2011-07-09 37 views
0

我在運行我的HelloWorld Java RMI應用程序時遇到問題。我在一臺計算機上有服務器,遠程類和遠程接口,另一臺上有客戶端和遠程接口。服務器和註冊表運行良好。當我嘗試運行客戶端時,收到此錯誤:從服務器下載存根類的問題 - Java RMI

Client1異常:java.rmi.UnmarshalException:error unmarshalling return;嵌套的異常是: java.lang.ClassNotFoundException:Remote_Stub(沒有安全管理器:禁用RMI類加載器)

我注意到如果我在與客戶端相同的目錄中有Remote_Stub.class文件,一切工作正常。所以我想我的問題是從服務器上下載存根到客戶端。

我不太清楚爲什麼這給了我這個錯誤,但做了一些研究後,我認爲它與安全性有關,因爲我沒有權限從一臺計算機下載文件到另一臺計算機因爲它指出「沒有安全管理員」)如果是這樣,有誰知道我該如何解決這個問題?或者我可以如何設置權限?

謝謝! Micheal

回答

0

您的服務器需要設置安全策略。你需要一個JVM屬性,如:

-Djava.security.policy=/path/to/myserver.policy 

哪裏myserver.policy是具有服務器的安全策略文件,例如:

grant { 
    permission java.security.AllPermission "", ""; 
}; 

在一個相關的說明,我沒有親自一個巨大的風扇的RMI,因爲它在過去給我提供了處理服務器和客戶端之間的類版本的方式,以及它是Java特有的事實,因此限制了您的客戶端使用Java編寫。如果您可以靈活地選擇不同的客戶端 - 服務器技術,則應該查看SOAP(AXIS2並不差)或REST服務(Restlet看起來非常有前途)。這篇文章可以幫助你的優點和缺點:

http://michaeldehaan.net/2008/07/17/xmlrpc-vs-rest-vs-soap-vs-all-your-rpc-options/

+0

或參見RMI/IIOP。 – EJP

0

根本不需要JDK 1.5中的存根。查看UnicastRemoteObject的類Javadoc。