我已经阅读了oracle关于RMI实现的教程和书中关于RMI的章节:"开始Java 8 api,扩展和库- Swing, JavaFX, JavaScript, JDBC和网络编程api。"
在oracle教程中,远程接口的实现直接发生在服务器类中,而在书中,以及这个论坛上的许多其他问题中,作者使用了一个单独的实现类来实例化在服务器类中的接口。
我的一个问题是,在服务器类中直接实现Remote接口是否是一个好做法。
在我的例子中,我必须能够通过客户端挂起和恢复服务器。我已经实现了这两种方法,它们确实有效。
接口:public interface MyRemote extends Remote {
boolean isSuspended() throws RemoteException;
void resumeServer() throws RemoteException;
void suspendServer() throws RemoteException, InterruptedException;
}
要挂起服务器,我只需在ServerClass
中设置boolean suspended;
使用额外的RemoteImplementation类,我无法访问该变量。我可以从ServerClass调用静态方法,如从RemoteImplementation类调用ServerClass.suspendSrv()
。
当直接在ServerClass中实现MyRemote接口时,我可以通过实现的方法直接访问变量。
静态的方式有点打击我,因为我可以调用那些方法,甚至没有服务器运行,可能有一些其他的问题,我现在不能想到。
最后只剩下一个问题:
是否存在不直接在ServerClass中实现MyRemote接口的缺点?
我真的很感谢你的建议!只要适合你,对RMI来说不重要。
我一直想知道为什么这么多RMI示例使用一个单独的主类来启动服务器。除非您有几个远程对象要同时启动,否则这是毫无意义的,这是不寻常的。大多数情况下,你只有一个,你通过第一个获得其他的。把它放到例子里会给人一种你必须那样做的错误印象。你没有。