2012-01-15 13 views
3

私はサーバーjvmとクライアントjvmを持っています。クライアントは、tcpを介してシリアル化されたJavaオブジェクトを送信することによって、サーバーと通信します。通常、オブジェクトを適切にデシリアライズするために、サーバはクラスパスで受け取ったオブジェクトのクラスを持っています。javaクラスのバイトコードをjvmからjvmに移動

しかし、私が探しているのはそれを回避する方法です。つまり、クライアントに「何らかの形で」クラスのバイトコードをオンデマンドで送信させることができます。これはもちろん、クラスツリーを再帰する必要があります(元のクラスのメンバであれば、それ自体、サーバが知らなかった他のクラスのオブジェクトです)。

は、だから私はこの種のものを行うそこに任意の技術に疑問を抱きました。

Thx。

答えて

4

RMIには「クラスサーバー」という概念が含まれています。あなたはそれを再改革しているように思えるので、RMIの全部または一部の使用を検討することを検討してください。チュートリアルHere's

+0

RMIはこれをデフォルトで行いますが、クラスファイルを必要な場所に配備することをお勧めします。 –

0

これは非常に悪い考えです。基本的には、クライアントが現在のプロセス内で直接実行されるコードをサーバーに送信できるようにすることを意味します。このようなものは、一般的に深刻な脆弱性の1つであるArbitrary code executionという重大な脆弱性とみなされます。

それに基づいてシステム設計を構築することは、それほど賢明ではありません。

0

ストリームからクラスをロードするクラスローダーを作成します。詳細は、JarFileClassLoader exampleを参照してください。

これは、当然のことながら、クラスのいずれかが、リフレクションを使用し、直接潜在的なセキュリティ上の問題に加えて、バイトコードで実装に名前を付けていない場合は特に、非常に問題になります。安全なクラスローダーを調べる必要があります。

0

要件(例えば、agletの)Javaでのモバイルエージェントフレームワークに見てみるために、プレーンRMIは動作しない場合。

1

あなたはおよそCode Mobilityを求めています。また、グリッドコンピューティングの分野も多少関連性があります。

Mobility-RPCを見てみましょう、それはあなたが粒度(クラスレベル)の同じレベルで尋ねるまさにんライブラリです。

セキュリティは何かを覚えておいてください。しかし、データベースに送られたSQL、SSH、ビジネスルールエンジン、Adobe Flash、Javaアプレット、上記のRMI、ActiveX、JavaScript、Hadoop /グリッドコンピューティングフレームワークで実行されるbashコマンド - これらはすべてリモートの例ですコードが広く使用されています。すべてと同様に、セキュリティダイヤルを最大にすると、オプションが制限されます。しかし、上記のすべては、適切にファイアウォールされているか、サンドボックス化されている場合に有効です。

この例では、ほんの少しの手間を省きたいと思っています。あなたは、本格的な分散アプリケーションを設計しているわけではありません。だから、あなたが言ったことによると、自分自身がややコード移動性の支持者であるにもかかわらず、私はコードの移動性はおそらくこの場合には残酷であると言います。 (しかし他の人には便利です。)

グリッドコンピューティングについては、GridGainHadoopをご覧ください。 GridGainは純粋な(CPU中心の)グリッドコンピューティングフレームワークですが、Hadoopは独自の複製分散ファイルシステム(HDFS)を備えたデータマイニング/データウェアハウスプラットフォームです。

GridGainとHadoopは両方とも、リモートワーカーノードにタスク/ジョブを実装するユーザ定義のJavaコードを送信します。前回チェックしたときに、ユーザー提供のjarファイルを関連するノードに転送することでこれを行いました。 GridGain ClassLoaderはHadoopより洗練されているとは言えますが(Mobility-RPCより洗練されていません)。 Hadoopは基本的にすべてのジョブで新しいJVMを起動しますが、特に効率的ではありません(I/O負荷が与えられた場合のボトルネックではありません)。

Mobility-RPCは、リモートマシンがワーカーノードになることはまったく想定されていないため、多少異なります。ライブラリを実行しているアプリケーションでもかまいません。つまり、RPCやアドホックなタスク/オブジェクトの転送によく似ています。

関連する問題