运行RMI-Java的困难
我有一个客户机,一个服务器客户机和另一个服务器。Server客户端在中间,用于客户端和Server Fink之间的不同操作。我的代码在本地主机上按预期工作 我的问题是,我必须将这两台服务器放在同一个目录中(用javac和rmic编译),然后启动rmiregistry。这样很好用。我想从这两个服务器的原始文件夹(仍然在本地主机上)运行它们中的每一个。我尝试了一些方法,但得到了通常的java.rmi.NotBoundException或其他异常运行RMI-Java的困难,java,rmi,Java,Rmi,我有一个客户机,一个服务器客户机和另一个服务器。Server客户端在中间,用于客户端和Server Fink之间的不同操作。我的代码在本地主机上按预期工作 我的问题是,我必须将这两台服务器放在同一个目录中(用javac和rmic编译),然后启动rmiregistry。这样很好用。我想从这两个服务器的原始文件夹(仍然在本地主机上)运行它们中的每一个。我尝试了一些方法,但得到了通常的java.rmi.NotBoundException或其他异常 serverClient: serverClient
serverClient:
serverClient sC=new serverClient(cars);
Naming.rebind("//localhost/serviceOne", sC);
ServerFin:
ServerFin srv = new ServerFin (prodc);
Naming.rebind("//localhost/serviceTwo", srv);
我通常使用
String dest = "//localhost/serviceOne";
MyClass obj =(MyClass)Naming.lookup(dest);
与上述;首先,我编译ServerFin并启动它。然后,我使用javac、rmic进行编译,并将存根从ServerFin复制粘贴到serverClient的dir。当我启动serverClient时,问题出现了
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: xxximpl_stub
我尝试过很多东西,比如Registry=LocateRegistry.createRegistry(1099)代码>但这是没有希望的。它就是不起作用
我到底该如何告诉中间服务器客户端连接到已经运行的注册表(使用ServerFin服务),并将其服务存储在那里?如果此代码导致NotBoundException,则您查找的主机错误。如果服务器在另一台主机上运行,则需要在查找URL中使用该主机名
但不在绑定URL中。这始终是“localhost”
如果你得到另一个例外,你总是可以考虑告诉我们它是什么。< /P>
编辑如果您得到的是ClassNotFoundException
,则有三种情况
您在导出远程对象时得到它。生成存根,或者在远程对象构造函数中调用super(0)
而不是super()
,这样您就不需要存根了。如果远程对象未扩展UnicastRemoteObject
,出于同样的原因,请使用端口号为零的UnicastRemoteObject.exportObject()
你在装订的时候拿到的。注册表的类路径上没有命名该类。修复该问题,或者从服务器JVM内部启动注册表,使用LocateRegistry.createRegistry(),
注意将结果存储在静态变量中
你抬头看的时候就知道了。客户端在其类路径上没有命名该类。您忘记将其包含在客户机JAR文件中,或者您做了一些无效的事情,例如将其复制到项目客户机部分的不同包中:它必须是相同的类、相同的包,最好是相同的目标代码
老实说,我不太理解你的帖子。两台服务器都在我的电脑上运行,客户端也是。你的意思是我必须改变我的查找吗?类似这样的内容:.lookup(“serviceTwo”)代码>或查找(“serviceOne”)代码>取决于当前客户的需求?我有点困惑。提前感谢:)如果所有内容都在本地主机上运行,则无法获取NotBoundException。那么你的问题是什么?我不知道更改URL中的主机名有什么不清楚的地方。它当然没有给出你在这里提到的结果。对不起,我再次运行它,它是另一个<代码>java.rmi.UnmarshalException:错误解组参数;嵌套异常是:java.lang.ClassNotFoundException
我仍然无法获取它。其他任何人也无法获取它,除非您提供真正的异常。请将整个堆栈跟踪编辑到您的问题中。由于我的困惑,您是对的,我认为我不清楚。我改变了一点我的操作。现在有什么意义吗?我要求一个完整的堆栈跟踪。不是这样,给我。我们。这个完成堆栈Trace,不会发生的。我会自己解决这个问题。谢谢。如果你不打算提供完整的信息,你应该坦率地删除这个问题,它没有永久的意义。