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

Java 在ServerClass或单独的ImplementationClass中实现RMI接口,java,rmi,Java,Rmi,我已经阅读了书中关于RMI实现的章节和关于RMI的章节:“开始Java8API、扩展和库——Swing、JavaFX、JavaScript、JDBC和网络编程API。” 在oracle教程中,远程接口的实现直接发生在服务器类中,而在本书以及本论坛上的许多其他问题中,作者对在服务器类中实例化的接口使用单独的实现类 我的一个问题是,直接在服务器类中实现远程接口是否是一种良好的做法 在我的情况下,我必须能够通过客户端暂停和恢复服务器。我已经实现了这两种方法,它们都很有效 界面: public inte

我已经阅读了书中关于RMI实现的章节和关于RMI的章节:“开始Java8API、扩展和库——Swing、JavaFX、JavaScript、JDBC和网络编程API。”

在oracle教程中,远程接口的实现直接发生在服务器类中,而在本书以及本论坛上的许多其他问题中,作者对在服务器类中实例化的接口使用单独的实现类

我的一个问题是,直接在服务器类中实现远程接口是否是一种良好的做法

在我的情况下,我必须能够通过客户端暂停和恢复服务器。我已经实现了这两种方法,它们都很有效

界面:

public interface MyRemote extends Remote {

  boolean isSuspended() throws RemoteException;

  void resumeServer() throws RemoteException;

  void suspendServer() throws RemoteException, InterruptedException;
}
要挂起服务器,我只需设置一个
布尔挂起

使用其他RemoteImplementation类时,我无法访问该变量。我可以从ServerClass调用静态方法,比如从RemoteImplementation类调用
ServerClass.suspendSrv()

在ServerClass中直接实现MyRemote接口时,我可以通过实现的方法直接访问变量

静态方式让我有点头疼,因为我甚至可以在没有服务器运行的情况下调用这些方法,可能还有一些其他问题我现在想不起来

最后,还有一个问题:

是否存在不直接在ServerClass中实现MyRemote接口的缺点?


我真的很欣赏你的想法

任何适合你的:对RMI来说都无所谓


我一直想知道为什么这么多RMI示例使用单独的主类来启动服务器。除非同时启动多个远程对象,否则它实际上毫无意义,这是不寻常的。大多数情况下,你只有一个,你通过第一个获得任何其他的。把它放到例子中会给人一种错误的印象,认为你必须这样做。你不知道。

我希望你能回答这个问题:)。你所说的正是我一直在想的。将接口直接实现到ServerClass中可以大大简化工作!干杯