我遇到了一个棘手的问题,但首先让我解释一下上下文。
该项目只是一个简单的项目,所以我熟悉了RMI。该项目是一个股票市场服务器和一个从服务器提取有关资金的数据的客户端。
我已将该项目分为 3 个 java 项目。服务器(具有 MockStockMarket 和 Fund)、客户端(具有 GUI 类和与服务器对话的类:BannerController)以及具有客户端和服务器都需要的接口(interface)的项目(IStockMarket 和 IFund)。
我希望我的横幅 Controller 与股票市场对话,以便横幅 Controller 获得资金。这是使用 getFunds() 完成的:ArrayList。
如您所见,StockMarket 应该是远程的,并且 Fund 应该是可序列化的。
问题是,由于某种原因,当我使用以下代码时:
IStockMarket market = new MockStockMarket();
Naming.rebind("rmi://localhost/StockMarket", market);
IStockMarket(按预期)和 IFund(非预期)都变得遥远。这不是我想要的。
郑重声明:Fund 实现了 IFound,它扩展了 Serialized(因此没有远程功能),MockStockMarket 扩展了 UnicastRemoteObject 并实现了 IStockMarket,它扩展了 Remote。
以下是发布两个接口(interface)的 Web 服务器的屏幕截图:http://imageshack.us/m/194/4755/rmibothinterfacespublis.png .
最佳答案
将 RMI 服务绑定(bind)到端口与 Web 服务器发布文件不同。您所附的屏幕截图显示您的 IStockMarket.class 和 IFund.class 文件作为 HTTP 资源公开,与“绑定(bind)”RMI 服务没有任何关系。如果我的解释有误,请随时向问题添加更多详细信息,我会尝试回答它们。
关于Java RMI,一个接口(interface)在网络服务器上作为远程发布,但它不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020119/