Tag: rmir​​egistry

RMI注册表问题:使用“file:”URL方案绑定代码库时,rmiregistry可能会导致意外exception

有关Java Update 1.6.0_29的背景知识,请参阅本文的“RMI注册表问题”。 如果我理解正确(我是德语),更新引入了rmiregistry中的一个错误,它无法使用代码库中的file:pattern。 IE以下将不再适用于1.6.0_29: -Djava.rmi.server.codebase=”file:myproject/bin/ …” 我们目前正在使用具有file:syntax的代码库的function。 有谁知道使这项工作的解决方法? 注意: 不,我们不想启动本地Web服务器或ftp服务器。 更新: 在Naming.bind上抛出此exception: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: access to class loader denied 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)

单一RMI服务的简单入口点?

我有几个服务导出RMI接口。 他们曾经通过创建自己的注册表(使用LocateRegistry.createRegistry )并在那里绑定它来提供此function。 但是,当服务作为单独的应用程序在同一个VM(Tomcat)中运行时,这变得不可能,因为由于某种原因,那里只能有一个注册表。 我通过使用所有服务的中央注册表来解决这个问题。 即便如此,我对注册表的多对象注册表角色,只是它的入口点设施并不感兴趣。 然而,中央注册表引入了更多的复杂性(例如,它必须首先启动,它必须具有它注册的服务接口)。 有没有办法让每个服务独立地提供其RMI接口的入口点,同时让它们在同一个VM中运行(这是托管细节,而不是设计的一部分)?

RMI连接被拒绝

我想要获得rmi连接。 我遇到了很多安全问题,但一直无法找到解决这一问题的方法。 我执行我的jar文件: java -Djava.security.policy=java.security.AllPermission -jar “myjarfile” 我用来创建它的代码是: public class server { public static void main(String args[])throws Exception { if (System.getSecurityManager() == null) System.setSecurityManager ( new RMISecurityManager() { public void checkConnect (String host, int port) {} public void checkConnect (String host, int port, Object context) {} }); try { sampleserverimpl server = new sampleserverimpl(); System.out.println(“SERVER […]

为什么RMI注册表忽略了java.rmi.server.codebase属性

我正在为java RMI运行Hello World示例 1)我在一个空文件夹中运行注册表 motta@motta-laptop ~/tmp $ rmiregistry 2)我启动HTTP服务器以在运行时检索类。 download文件夹包含客户端 – 服务器的远程接口 motta@motta-laptop ~/download $ java NanoHTTPD 8080 3)我按照java RMI教程的建议启动服务器传递java.rmi.server.codebase属性 motta@motta-laptop ~/server $ java -Djava.rmi.server.codebase=”http://localhost:8080″ WarehouseServer RMI注册表未联系HTTP服务器并抛出exception(请参阅问题后的详细​​信息)。 但如果我做以下事情 1)使用java.rmi.server.codebase属性启动rmi注册表 motta@motta-laptop ~/tmp $ rmiregistry -J-Djava.rmi.server.codebase=”http://localhost:8080/” 2)像以前一样启动HTTP服务器 3)没有任何选项启动服务器 motta@motta-laptop ~/server $ java WarehouseServer 它有效,但为什么呢? 似乎在第一个过程中,RMI注册表忽略了java.rmi.server.codebase属性 谢谢 ================================= 我在跑步 java version “1.7.0_21” Java(TM) SE Runtime Environment (build 1.7.0_21-b11) […]

服务器通过RMI没有注册表

我有一个可以通过RMI连接的服务对象。 目前我这样做: 服务器 Registry r = LocateRegistry.createRegistry(1234); r.bind(“server”, UnicastRemoteObject.exportObject(remoteServer, 0)); 客户 RemoteServer s = LocateRegistry.getRegistry(“example.com”, 1234).lookup(“server”); 服务器上的注册表只有一个用途,用于链接到单个服务器对象。 我想我也可以在服务器上这样做: UnicastRemoteObject.exportObject(remoteServer, 1234); 但那我将如何从客户端连接到服务器对象?

如何设置rmiregistry使用的类路径?

我正在尝试制作Java RMI客户端/服务器应用程序。 我在启动应用程序的服务器端时遇到问题,因为当我尝试启动应用程序的服务器端时,它在调用Registry.bind()方法期间一直运行到ClassNotFoundException 。 我从这里的简单教程开始: http : //docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html 。 按照这些说明操作后,它最初抛出一个ClassNotFoundException,抱怨它找不到“example.hello.Hello”。 我能够通过从教程中的destDir目录启动rmiregistry来解决这个问题,因为rmiregistry显然使用它的初始起始目录作为其类路径的一部分。 之后我开始使用我的其他测试应用程序,直到我开始在服务器类中使用第三方jar文件之前我一直很好。 现在,如果我的服务器类引用任何jar文件中的任何内容,则Registry.bind()会抛出ClassNotFoundException,因为rmiregistry应用程序不知道这些jar文件。 据我所知,rmiregistry不接受任何类型的路径启动arg,所以我想知道如何告诉它我想要它承认什么类路径。 根据这里的教程: http : //docs.oracle.com/javase/tutorial/rmi/running.html ,“你必须确保你将运行rmiregistry的shell或窗口没有设置CLASSPATH环境变量或有一个CLASSPATH环境变量,它不包含你想要下载到远程对象客户端的任何类的路径。“ 这听起来与我需要的相反……或者我读错了吗? 有没有人有任何成功启动使用第三方jar的RMI客户端/服务器(在我的情况下,commons-io,commons-logging和rmiio)? 这是在Windows上,顺便说一下。 更新我找到了解决方法。 请参阅下面的答案。