1

所以我在使用LocateRegistry.createRegistry(),但这有一个问题:即它在调用它的进程中运行,所以如果我使用多个 JVM,那么启动注册表的 JVM 崩溃将取消所有注册表JVM。

所以看起来我需要使用 rmiregistry (或其他东西?)将执行 RMI 查找/绑定的进程与服务器 JVM 隔离开来。

我试图这样做,现在当我尝试这样做时出现此错误Registry.rebind()

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: {my remote interface name}
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)

我究竟做错了什么?我用谷歌搜索了这个异常,它与 RMI 代码库有关,但我真的迷路了。如果问题出在rmiregistry命令中,有哪些命令行选项可以告诉它该做什么?如果问题出在我的服务器 JVM 中,我需要做什么?

4

1 回答 1

1

什么崩溃?我已经好几年没见过 JVM 崩溃了。除非您有 JNI,否则包含您的 RMI 服务器的 JVM 不会比 rmiregistry 命令启动的独立 JVM 更容易崩溃。并且使用 LocateRegistry.createRegistry() 可以永远解决您的类路径问题。

于 2011-04-15T23:44:53.830 回答