Итак, я использовал 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 моего сервера, что мне нужно сделать?