我有一個討厭的問題,但首先讓我解釋一下上下文。Java RMI,一個界面在網絡服務器上發佈爲遠程,而它不應該是
該項目只是一個簡單的項目,所以我熟悉RMI。該項目是一個股票市場服務器和一個客戶端,用於從服務器獲取有關資金的數據。
我已經在3個java項目中劃分了項目。服務器(具有MockStockMarket和Fund),客戶端(具有GUI類和與服務器交談的類:BannerController)以及具有客戶端和服務器需要的接口(IStockMarket和IFund)的項目。
我希望我的bannerController與StockMarket交談,以便bannercontroller獲得資金。這是使用getFunds():ArrayList完成的。
正如你所看到的,StockMarket應該是遠程的,基金應該是可串行化的。
的問題是,由於某種原因,當我使用下面的代碼:
IStockMarket market = new MockStockMarket();
Naming.rebind("rmi://localhost/StockMarket", market);
兩個IStockMarket(如預期)和iFund中(未如預期)成爲遙控器。這不是我想要的。
備案:基金實施IFund,它擴展了Serializable(所以沒有任何遠程),MockStockMarket擴展了UnicastRemoteObject並實現了擴展Remote的IStockMarket。
下面是Web服務器發佈兩個接口的屏幕截圖:http://imageshack.us/m/194/4755/rmibothinterfacespublis.png。
對於索裏的代碼:https://rapidshare.com/files/2085773800/stockmarket.zip
網絡服務器不是「發佈」任何東西。它從您的代碼庫位置*返回*,放置它的位置*,以響應由RMI代碼庫客戶端發出的GET請求。 – EJP 2011-05-18 00:48:14
它正在發佈其他jvms的文件,以便從代碼庫下載它... – Rob 2011-05-18 08:59:11
這就是*你*通過將它們放入代碼庫來發布文件。它們需要在那裏才能滿足遠程接口的類加載。這不像你有其他選擇。 – EJP 2011-05-20 00:59:43