rmi注册问题

时间:2011-04-26 18:43:10

标签: java classloader rmi rmiregistry

亲爱的堆栈溢出用户。

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

我正在为学校项目建立一个多玩家pacman。它需要使用java RMI,所以我创建了3个漂亮的jar文件。服务器包含(仅)一个主类,它将事物发布到远程服务器并加载一些东西,如地图等。客户端包含一些显示一些不错形式的摇摆垃圾。第三个包含所有pacman代码的库。

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

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

我一直得到同样的例外:

grant {permission java.security.AllPermission;};

有没有人知道问题是什么?以及如何解决它?

1 个答案:

答案 0 :(得分:0)

This也可以提供帮助。看看A.2。这似乎是出于什么原因。在提供的网址上找不到类/类。确保url正确形成,并且所有需要的类都在类路径上。

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

如果_Stub类是由RMIClassLoader加载的,那么RMI已经知道要用于其注释的代码库。如果_Stub类是从CLASSPATH加载的,那么就没有明显的代码库,RMI会查询java.rmi.server.codebase系统属性以查找代码库。如果未设置系统属性,则使用空代码库对存根进行编组,这意味着除非客户端在客户端的CLASSPATH中具有_Stub类文件的匹配副本,否则不能使用它。“