2016-11-01 5 views
1

「Java 8 API、拡張機能、およびライブラリの開始 - Swing、JavaFX、JavaScript、JDBC、およびネットワークプログラミング」のRMI実装およびRMIに関する章については、oracle tutorialを読んでいます。 API。 "ServerClassまたは別個のImplementationClassのRMIインタフェース実装

リモート・インタフェースの実装は、サーバー・クラスで直接行われますが、本書では、このフォーラムのその他の多くの質問に対して、サーバー・クラスでインスタンス化されるインタフェース用の別個の実装クラスが使用されます。

私の質問の1つは、リモートインターフェイスをサーバークラスに直接実装することをお勧めします。

私の場合、クライアントを介してサーバーを中断して再開できる必要があります。私はそれを行うための両方の方法を実装しており、彼らは仕事をしています。

インタフェース:

public interface MyRemote extends Remote { 

    boolean isSuspended() throws RemoteException; 

    void resumeServer() throws RemoteException; 

    void suspendServer() throws RemoteException, InterruptedException; 
} 

私はちょうど追加RemoteImplementationクラスでの作業ServerClass

boolean suspended;

を設定し、サーバーを一時停止するには、私がその変数にアクセスすることはできません。 RemoteImplementationクラスからServerClass.suspendSrv()のようなServerClassから静的メソッドを呼び出すことができます。

ServerClassにMyRemoteインターフェイスを直接実装すると、実装されたメソッドによって変数に直接アクセスできます。

静的なやり方は、サーバを稼働させなくてもそれらのメソッドを呼び出すことができ、私が今考えることのできない他の問題があるかもしれないので、私は驚いた。

最後に残っているだけで一つの質問があります:

がServerClassに直接MyRemoteインタフェースを実装しないように任意の短所はありますか?

私は本当にあなたのアイデアを感謝します!

答えて

2

どのようなものであれ、それはRMIには関係ありません。

私はいつも非常に多くのRMIの例が別のメインクラスを使用してサーバーを起動するのかと疑問を抱きました。あなたが一度に起動するいくつかのリモートオブジェクトを持っていない限り、それは本当に意味がありません。これは珍しいことです。ほとんどの場合、あなたは1つしか持っていません。そしてそれを例に入れることは、あなたがそうする必要があるという誤った印象を与えます。あなたはそうしない。

+0

私はあなたがこれに応答することを望んでいました:)。あなたが主張するのは、私がずっと考え続けてきたことです。 ServerClassにインターフェイスを直接実装すると、作業が楽になります!乾杯! – motaa

関連する問題