2016-11-01 16 views
1

我已閱讀關於RMI實現的oracle tutorial以及本書中有關RMI的章節:「開始Java 8 API,擴展和庫 - Swing,JavaFX,JavaScript,JDBC和網絡編程蜜蜂。」ServerClass中的RMI接口實現或單獨ImplementationClass

在oracle教程中,遠程接口的實現直接發生在服務器類中,而在本書以及本論壇中的許多其他問題中,作者使用單獨的實現類來獲取在服務器類中實例化的接口。

我的問題之一是在服務器類中直接實現遠程接口是否是好的做法。

在我的情況下,我必須能夠通過客戶端暫停和恢復服務器。我已經實施了兩種方式來做到這一點,他們的確有用。

接口:

public interface MyRemote extends Remote { 

    boolean isSuspended() throws RemoteException; 

    void resumeServer() throws RemoteException; 

    void suspendServer() throws RemoteException, InterruptedException; 
} 

暫停我只是在ServerClass

與附加RemoteImplementation類工作設置boolean suspended;服務器,我不能訪問這個變量。我可以從RemoteImplementation類的ServerClass中調用一個靜態方法,如ServerClass.suspendSrv()

當直接在ServerClass中實現MyRemote接口時,我可以直接通過實現的方法訪問變量。

靜態的方式有點讓我感動,因爲我可以調用這些方法,甚至沒有運行服務器,並且可能還有一些我現在無法想到的其他問題。

最後只有一個問題,其餘:

是否有任何缺點,不能直接在ServerClass實現MyRemote接口?

我真的很感激你的想法!

回答

2

無論適合你:對RMI無關緊要。

我一直在想,爲什麼這麼多的RMI示例使用單獨的主類來啓動服務器。除非你有幾個遠程對象一次啓動,這是非常沒有意義的,這是不尋常的。大多數情況下你只有一個,而你通過第一個獲得其他人。並且將它列入實例給出了一個錯誤的印象,即你必須這樣做。你沒有。

+0

我希望你能迴應這個:)。你聲稱的是我一直在想的。直接在ServerClass中實現接口有利於事情!乾杯! – motaa