java - rmi 注册问题

标签 java classloader rmi rmiregistry

亲爱的堆栈溢出用户。

我已经阅读了很多 RMI 注册表问题,并尝试用它们来解决我的问题,但没有成功。所以这是我的情况,我希望有人至少能帮我一点忙。

我正在为一个学校项目构建一个多人吃 bean 人。它需要使用 java RMI,所以我创建了 3 个不错的 jar 文件。服务器包含(仅)一个主类,该主类将事物发布到远程服务器并加载一些东西,如 map 等。客户端包含一些显示一些漂亮表格的 swing 垃圾。第三个是包含所有 pacman 代码的库。

现在,当我在本地启动服务器时,它会启动一个 rmiregistry 并将游戏绑定(bind)到它(当然是在设置之后)。然后我将我的客户端连接到它并且可以很好地播放。一切正常,我可以启动一个 View 客户端,全部连接到我的本地 rmiregistery 并很好地获取游戏对象。 之后,我独立于服务器启动注册表并再次成功运行程序。即使通过我笔记本电脑的 IP(不是 127.0.0.1)它也能正常工作。请注意,我没有设置注册表的类路径。

所以在那之后我将这些东西移到了服务器上(2008 年)。我在那里启动了 rmiregistry,没有类路径,并尝试将我的 server.jar 连接到它,但失败了。 (找不到 ..spel 类异常(exception))所以我修复了类路径....没有效果....所以我打开了一个新的控制台启动了一个新的注册表,将 pacman.jar 复制到 c:\并运行服务器.jar 与 -Djava.rmi.server.codebase=c:\paramether....无效...然后我设置了一个安全管理器...(System.setSecurityManager(new RMISecurityManager()); ) 并制定了一个包含以下内容的策略:grant {permission java.security.AllPermission;}; 并使用 server.jar -Djava.rmi.server.codebase=c:-Djava.security.policy=server.policy... 再次无效。

我不断收到同样的异常:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
        java.lang.ClassNotFoundException: Tervoort.Bram.Packman.Spel
        at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
        at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
        at sun.rmi.transport.Transport$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)

有人知道问题出在哪里吗?以及如何解决?

最佳答案

This也可能有帮助。看看 A.2。似乎出于任何原因。在提供的 URL 中找不到一个/多个类。确保 url 的格式正确并且所有需要的类都在类路径中。

“当远程对象被 RMI 编码时(无论是作为远程调用的参数还是作为返回值), stub 类的代码库由 RMI 检索并用于注释序列化 stub 。当 stub 是未编码后,代码库用于使用 RMIClassLoader 加载 stub 类文件,除非该类已在 CLASSPATH 中找到,或者已被接收对象的上下文类加载器找到,例如 applet 代码库。

如果 _Stub 类由 RMIClassLoader 加载,那么 RMI 已经知道要使用哪个代码库来进行注解。如果 _Stub 类是从 CLASSPATH 加载的,则没有明显的代码库,RMI 会引用 java.rmi.server.codebase 系统属性来查找代码库。如果未设置系统属性,则 stub 将使用空代码库进行编码,这意味着除非客户端在其 CLASSPATH 中具有 _Stub 类文件的匹配副本,否则无法使用它。”

关于java - rmi 注册问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5794946/

相关文章:

java - Try-catch 创建无限循环

java - 打包/取消打包自定义对象的 HashMap 的最佳方法是什么?

java - RMI 问题 : what happens to an object reference after server goes down?

互联网上的java RMI。主机拒绝连接

java - 简单的 RMI 应用程序

java - 通知远程 View 中的位图无法回收

java - 在 Java 中创建动态给定类的实例

java - PDF 中带有水平分页符的表格

引用子类 : avoid class loading deadlock 的 Java 静态初始化程序

java - 在 jar 的 list 中指定默认类加载器