2014-09-29 77 views
0

我想在这里我解释一下以前的问题,我不得不Running a sample RMI application运行在RMI application.Here的官方网站甲骨文给出的是我的大职位的例子。运行示例应用程序的RMI

不过,我还是有这个问题:

ComputeEngine exception: 
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: compute.Compute 
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419) 
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) 
at sun.rmi.transport.Transport$1.run(Transport.java:177) 
at sun.rmi.transport.Transport$1.run(Transport.java:174) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.rmi.transport.Transport.serviceCall(Transport.java:173) 
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) 
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275) 
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252) 
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:378) 
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) 
at engine.ComputeEngine.main(ComputeEngine.java:30) 
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: compute.Compute 
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source) 
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409) 
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) 
at sun.rmi.transport.Transport$1.run(Transport.java:177) 
at sun.rmi.transport.Transport$1.run(Transport.java:174) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.rmi.transport.Transport.serviceCall(Transport.java:173) 
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) 
Caused by: java.lang.ClassNotFoundException: compute.Compute 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1206) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:270) 
at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1219) 
at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:729) 
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:673) 
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:610) 
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:646) 
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:311) 
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:255) 
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1556) 
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1512) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
... 13 more 

这是ComuteEngine.java(服务器)的内容:

package engine; 

import java.rmi.RemoteException; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
import java.rmi.server.UnicastRemoteObject; 
import compute.Compute; 
import compute.Task; 

public class ComputeEngine implements Compute { 

public ComputeEngine() { 
    super(); 
} 

public <T> T executeTask(Task<T> t) { 
    return t.execute(); 
} 

public static void main(String[] args) { 
    if (System.getSecurityManager() == null) { 
     System.setSecurityManager(new SecurityManager()); 
    } 
    try { 
     String name = "Compute"; 
     Compute engine = new ComputeEngine(); 
     Compute stub = 
      (Compute) UnicastRemoteObject.exportObject(engine, 0); 
     Registry registry = LocateRegistry.getRegistry(); 
     registry.rebind(name, stub); 
     System.out.println("ComputeEngine bound"); 
    } catch (Exception e) { 
     System.err.println("ComputeEngine exception:"); 
     e.printStackTrace(); 
    } 
} 
} 

有谁知道如何解决这个问题?

+0

里面的东西'ComputerEngine'发生在其主'()'方法。 * ComputeEngine.java *文件的#** 30 **是什么? – 2014-09-29 01:12:30

+0

它是:registry.rebind(name,stub);你可以看看我的更新问题 – Othmane 2014-09-29 01:29:14

+0

看看你的Java版本,这是甲骨文文件]中描述(http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/enhancements-7中的.html)。 – 2014-09-29 01:38:24

回答

0

我succeded通过添加启动我的程序:

LocateRegistry.createRegistry(1099); 

创建安全manager.However,推出只是从我的终端rmiregistry中没有工作之前。我认为是因为服务器和rmiregistry之间的通信问题,也许是因为我不得不向类路径添加一些类,但我不知道如何正确执行。

+0

Eh?在'我的答案'(http://stackoverflow.com/a/9542464/207421)中有'可能重复'链接中有三种不同的方法。 – EJP 2014-10-01 01:51:59

+0

我已经尝试过使用无法使用的代码库功能。但是,要启动包含相关JAR或目录的CLASSPATH的注册表,我不知道如何在终端中执行此操作,因为我认为我已经尝试了添加包含计算任务接口和任务接口的JAR不适用于Eclipse和终端 – Othmane 2014-10-01 03:51:38

相关问题