我在本书中阅读了有关RMI实现的oracle tutorial和有关RMI的章节:“开始Java 8 API,扩展和库 - Swing,JavaFX,JavaScript,JDBC和网络编程API。” / p>
在oracle教程中,Remote接口的实现直接发生在服务器类中,而在本书中,以及该论坛上的许多其他问题,作者使用单独的实现类来实现在服务器类中实例化的接口。
我的一个问题是,直接在服务器类中实现Remote接口是否是一种好习惯。
在我的情况下,我必须能够通过客户端暂停和恢复服务器。我已经实现了这两种方法,但它们确实有效。
界面:
public interface MyRemote extends Remote {
boolean isSuspended() throws RemoteException;
void resumeServer() throws RemoteException;
void suspendServer() throws RemoteException, InterruptedException;
}
要暂停服务器,我只需在ServerClass中设置boolean suspended;
使用其他RemoteImplementation类,我无法访问该变量。我可以从ServerIlass调用一个静态方法,如RemoteImplementation类中的ServerClass.suspendSrv()
。
直接在ServerClass中实现MyRemote接口时,我可以通过实现的方法直接访问变量。
静态方式让我感到震惊,因为我甚至可以在没有服务器运行的情况下调用这些方法,并且可能还有其他一些我现在想不到的问题。
最后还剩下一个问题:
在ServerClass中没有直接实现MyRemote接口是否有任何缺点?
我真的很感激你的想法!
答案 0 :(得分:2)
无论什么适合你:对RMI来说并不重要。
我一直想知道为什么这么多RMI示例使用单独的主类来启动服务器。除非你有几个远程对象一次启动,否则它真的没有意义,这很不寻常。大多数情况下,你只有一个,而你通过第一个获得任何其他人。将它放入示例中会给人一种错觉,即你必须这样做。你没有。