ServerClass 或单独的 ImplementationClass 中的 RMI 接口实现
RMI interface implementation in ServerClass or seperate ImplementationClass
我已经阅读了oracle tutorial关于RMI实现和书中关于RMI的章节:"Beginning Java 8 APIs, Extensions, and Libraries - Swing, JavaFX, JavaScript, JDBC, and Network Programming APIs."
在 oracle 教程中,远程接口的实现直接发生在服务器中 class,而在书中以及该论坛上的许多其他问题中,作者使用单独的实现 class在服务器 class.
中实例化的接口
我的一个问题是直接在服务器中实现远程接口是否是一种好的做法class。
在我的例子中,我必须能够通过客户端暂停和恢复服务器。我已经实现了这两种方法,它们确实有效。
界面:
public interface MyRemote extends Remote {
boolean isSuspended() throws RemoteException;
void resumeServer() throws RemoteException;
void suspendServer() throws RemoteException, InterruptedException;
}
为了暂停服务器,我只是在 ServerClass
中设置了一个 boolean suspended;
使用额外的 RemoteImplementation class,我无法访问该变量。我可以从 ServerClass 调用静态方法,例如从 RemoteImplementation class.
调用 ServerClass.suspendSrv()
直接在 ServerClass 中实现 MyRemote 接口时,我可以通过实现的方法直接访问变量。
静态方式让我有点吃惊,因为我什至可以在没有服务器的情况下调用这些方法 运行 并且可能还有一些我现在无法想到的其他问题。
最后只剩一题了:
不直接在 ServerClass 中实现 MyRemote 接口有什么缺点吗?
非常感谢您的想法!
任何适合你的:对RMI来说无所谓。
我一直想知道为什么这么多 RMI 示例使用单独的主 class 来启动服务器。除非您同时启动多个远程对象,否则这真的毫无意义,这是不寻常的。大多数情况下你只有一个,你通过第一个获得任何其他的。将其放入示例中会给人一种错误的印象,即您必须那样做。你没有。
我已经阅读了oracle tutorial关于RMI实现和书中关于RMI的章节:"Beginning Java 8 APIs, Extensions, and Libraries - Swing, JavaFX, JavaScript, JDBC, and Network Programming APIs."
在 oracle 教程中,远程接口的实现直接发生在服务器中 class,而在书中以及该论坛上的许多其他问题中,作者使用单独的实现 class在服务器 class.
中实例化的接口我的一个问题是直接在服务器中实现远程接口是否是一种好的做法class。
在我的例子中,我必须能够通过客户端暂停和恢复服务器。我已经实现了这两种方法,它们确实有效。
界面:
public interface MyRemote extends Remote {
boolean isSuspended() throws RemoteException;
void resumeServer() throws RemoteException;
void suspendServer() throws RemoteException, InterruptedException;
}
为了暂停服务器,我只是在 ServerClass
中设置了一个boolean suspended;
使用额外的 RemoteImplementation class,我无法访问该变量。我可以从 ServerClass 调用静态方法,例如从 RemoteImplementation class.
调用ServerClass.suspendSrv()
直接在 ServerClass 中实现 MyRemote 接口时,我可以通过实现的方法直接访问变量。
静态方式让我有点吃惊,因为我什至可以在没有服务器的情况下调用这些方法 运行 并且可能还有一些我现在无法想到的其他问题。
最后只剩一题了:
不直接在 ServerClass 中实现 MyRemote 接口有什么缺点吗?
非常感谢您的想法!
任何适合你的:对RMI来说无所谓。
我一直想知道为什么这么多 RMI 示例使用单独的主 class 来启动服务器。除非您同时启动多个远程对象,否则这真的毫无意义,这是不寻常的。大多数情况下你只有一个,你通过第一个获得任何其他的。将其放入示例中会给人一种错误的印象,即您必须那样做。你没有。