我會盡量保持這篇文章儘可能小,所以我會添加更多的信息和代碼,如果請求。編碼RMI客戶端回調從服務器編碼 - UnmarshalException ClassNotFoundException
場景:我正在編寫一個服務器/客戶端應用程序來跟蹤我們公司的一些流程,因此用戶將創建小標籤,該標籤將從一個用戶的屏幕切換到另一個用戶(根據Swing編寫的客戶端)流程。
我正在運行本地Glasfish 3.1服務器(在Eclipse中)和MySql。在服務器上,我運行Spring MVC和Spring Data + Hibernate。
的屬性文件保存這些信息,便於變化:
rmi.serverPort = 1971
rmi.clientPort = 2010
在服務器啓動時還有那臺RMI環境這樣一個bean:
@Autowired
private RmiData rmiData;
@Autowired
private DataRequestHandler dataRequestHandler;
@Autowired
private ConnectionRequestHandler connectionRequestHandler;
.
.
.
LocateRegistry.createRegistry(rmiData.getServerPort());
String rmiUrl = "rmi://" + rmiData.getHost() + ":" + rmiData.getServerPort() + "/";
Naming.rebind(rmiUrl + "ConnectionRequestHandler", connectionRequestHandler);
Naming.rebind(rmiUrl + "DataRequestHandler", dataRequestHandler);
服務器包含的接口並且處理程序和客戶端的實現都只有接口。
這是沒有SecurityManager和沒有政策文件。儘管我必須將Hibernate jar包含到客戶端來解決其他異常(SO中的解決方案)。
使客戶端連接到服務器並請求數據工作後,我開始將回調編碼到客戶端(服務器也必須將數據推送到客戶端)。所以這就是我現在被卡住的地方。
這裏是我想提出的回調(客戶端的行爲像一個服務器):
private ClientCallbackHandler clientCallbackHandler = new ClientCallbackHandlerImpl();
.
.
.
LocateRegistry.createRegistry(rmiData.getClientPort());
String rmiUrl = "rmi://localhost:" + rmiData.getClientPort() + "/";
Naming.rebind(rmiUrl + "ClientCallbackHandler", clientCallbackHandler);
服務器只包含客戶端界面和客戶既有接口和實現的處理程序。
因此,當服務器執行
String rmiUrl = "rmi://" + clientHost + ":" + clientPort + "/";
clientCallbackHandler = (ClientCallbackHandler)Naming.lookup(rmiUrl + "ClientCallbackHandler");
我得到下面的異常在服務器上:
SEVERE: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: br.com.affair.socontrol.rmi.ClientCallbackHandlerImpl (no security manager: RMI class loader disabled)
我避免在安裝安全管理器和策略文件(也試過了,沒有成功),我堅持在這裏。
我不明白爲什麼服務器一旦所需要的是接口就會抱怨實現類。任何幫助深表感謝。謝謝。
道德:不要複製/粘貼。瞭解你在做什麼。 – EJP 2013-03-06 19:54:55
其實我只在幾個案例中複製/粘貼我自己的代碼,沒有人可以通過複製別人的代碼來處理rmi。我明白我在做什麼,但是這個課程擴展跳過了我的眼睛。我在這裏最大的問題實際上是不從其他類的代碼複製。感謝您的光臨。 – 2013-03-07 00:21:39
爲了完整起見,您也可以在構造函數中調用'UnicastRemoteObject.exportObject()',而不是擴展'UnicastRemoteObject()'。 – EJP 2013-03-07 06:46:17