Проблема сервера Java RMI

Я занимаюсь этим учебным пособием: http://www.youtube.com/watch?v=vkw275ptI3E это учебник java rmi (клиент, сервер), но он пытается это сделать на Local и не работает на моем компьютере

Когда я пытаюсь активировать свой сервер в локальном, я получил это сообщение:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
 java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
 java.lang.ClassNotFoundException: simple.rmi.server.MyServer_Stub
 at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:400)
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
 at sun.rmi.transport.Transport$1.run(Transport.java:159)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
 at java.lang.Thread.run(Thread.java:680)
 at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
 at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
 at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
 at simple.rmi.server.MyServer.main(MyServer.java:33)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
 java.lang.ClassNotFoundException: simple.rmi.server.MyServer_Stub
 at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
 at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:390)
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
 at sun.rmi.transport.Transport$1.run(Transport.java:159)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
 at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.ClassNotFoundException: simple.rmi.server.MyServer_Stub
 at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1185)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:249)
 at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1198)
 at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:433)
 at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:164)
 at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
 at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
 at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:201)
 at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1589)
 at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1494)
 at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1748)
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1327)
 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
 ... 12 more

Что я могу сделать?

1 ответ

В недавних версиях JDK произошли некоторые несовместимые изменения, из-за которых старые учебники RMI не работают. В частности, JDK 7u21 теперь требует, чтобы вы устанавливали свойство codebase на клиенте и в реестре, а также на сервере. Сценарий показывает только настройки на сервере.

Скринкаст (или, возможно, плагин Eclipse) также устарел, поскольку он показывает генерацию заглушек. Не нужно использовать какой-либо инструмент, такой как rmic или плагин Eclipse, для создания заглушек, поскольку Rails сгенерирован автоматически с помощью Java SE 5 (который был выпущен в 2002 году).

licensed under cc by-sa 3.0 with attribution.