在ServerClass或单独的ImplementationClass中实现RMI接口



我已经阅读了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示例使用一个单独的主类来启动服务器。除非您有几个远程对象要同时启动,否则这是毫无意义的,这是不寻常的。大多数情况下,你只有一个,你通过第一个获得其他的。把它放到例子里会给人一种你必须那样做的错误印象。你没有。

最新更新