質問

皆さん、こんにちは。私は現在、Java RMI を広範囲に使用するプロジェクトに取り組んでいます。それに関する良いリソースを知っている人はいないだろうかと思っていました。

現在見つけている資料に関して私が抱えている問題は、その資料が通常かなり古い (Java 1.3 など) か、半分完成しているか、あるいはその両方であることです。この本についての本も喜んで買いたいのですが、Amazon で見るとどれも 7 年前の本のようです。

したがって、誰かが優れたリソース、書籍、または優れた実装例を知っている場合は、それらについて聞くことに非常に興味があります。よろしくお願いいたします。

役に立ちましたか?

解決

RMI Hello World 始めは良さそうです。もちろん、それはまだ簡単な例ですので、 RMIのパフォーマンス/スケーラビリティに関するヒントが役立つでしょう。すでにRMIに精通しているためです。

他のヒント

Java.RMIは長年にわたってほとんど変更されていないため、ほとんどの古いドキュメントを引き続き参照できます。 1つの重要な変更は、Java 5.0のバージョンを使用している場合、RMIスタブをコンパイルする必要があることに注意してください。 ほとんどの人はRMIから離れ、分散システム用に River (以前はJiniと呼ばれていました)を採用しました。

まだRMIを使用することを考えている場合は、を読むことをお勧めします。 Oracleのドキュメント、またはフォーラムに質問を投稿する。

書籍の場合… William Grossoによる Java RMI またはElliotte Haroldによる Java Network Programming

RMIはそれほど変化していません。 1.3時代の本で十分だと思います。

ご回答ありがとうございます。RMI はあまり変わっていないという人々の意見は正しいと思いますが、チュートリアルはいくつかの重要な点を省略しているため、もう少し改善される可能性があります。

結局のところ、私が見つけたこれまでで最高の本は、アクティベーションなどの RMI の本当に優れた部分の一部をカバーしているものでした。 Java ネットワーク プログラミングと分散コンピューティング.

他のも見たよ オライリー Java RMI 私の意見では、最小の RMI プロジェクトよりも大きなプロジェクトについては、まったく良いものではありません。

RMIを多用する場合は、 Spring Remoting 。これは、リモーティングプロトコルの抽象化に非常に役立ち、必要に応じて後でリモーティングの実装を切り替えるのに役立ちます(たとえば、HessianまたはSOAPに切り替える)。

RMIまたはその他のリモートオブジェクトプロトコルを使用する場合に留意すべきことの1つは、リモートオブジェクトのメソッドを呼び出すことで大量のトラフィックを生成できることです。これらのオブジェクトがリモートであることは、コードでは明らかではありません。パフォーマンスの問題が発生する可能性があります。

可能な場合は、リモートサービスを呼び出してデータオブジェクトを取得するアーキテクチャを多かれ少なかれサービス指向にすることをお勧めします。

Sunは RMIチュートリアルを試しましたか? Sunのチュートリアルはすべて非常に優れており、通常はJavaについて何かを学ぶための最初の場所です。

学校で使用したコード例が良い本は、 J2EE開発者ハンドブック。これは、RMIに関する章が1つ(約50ページ)しかない約1500ページの巨大な参考書であることを忘れないでください。

O'Reilly RMIの本はかなり優れています。どうぞ。

絶対に貴重な記事マルチホームRMI(複数のIPを持つホスト)RMIを非常に理解しやすい方法で説明し、複数のIPアドレスを持つマシンでレジストリをホストする問題と、プライベートIPの処理方法についても説明します。ベーコンを保存しました。

すでに述べたものに加えて、記事 Java RMI内部構造についてはかなりまともな私見で、内部を少し調べました。

Redissonフレームワークを使用したリモートメソッド呼び出しのもう1つの良い例を次に示します。

YourServiceImpl にリモートで呼び出す必要のあるメソッドが含まれ、 YourService インターフェースを実装すると仮定します。

YourServiceImplは、RemoteServiceオブジェクトを介してRedissonに登録する必要があります。

YourService yourService = new YourServiceImpl();

RRemoteService remoteService = redisson.getRemoteService();
remoteService.register(YourService.class, yourService);

リモートでメソッドを呼び出すには、サービスインターフェイスのみが必要です。

RRemoteService remoteService = redisson.getRemoteService();
YourService service = remoteService.get(YourService.class);

MyObject result = service.myMethod(someParam1, someParam2);

また、非同期呼び出しもサポートしています。

// async interface for YourService
@RRemoteAsync(YourService.class)
public interface YourServiceAsync {

    RFuture<Long> someMethod1(Long param1, String param2);

    RFuture<Void> someMethod2(MyObject param);

}

RRemoteService remoteService = redisson.getRemoteService();
YourServiceAsync asyncService = remoteService.get(YourServiceAsync.class);

RFuture<Long> res = asyncService.someMethod1(12L, "param");
res.thenApply(r -> {
 ...
});

詳細こちら

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top