标签: rmiregistry

运行rmi服务器,classnotfound

嗨,我试图运行结合一个类来命名服务器的Java应用程序,但我不断地得到一个ClassNotFoundException

首先,我启动注册表:

rmir​​egistry的

然后从eclipse我尝试执行服务器,但得到此错误

java.rmi.ServerException:服务器线程中发生RemoteException; 嵌套异常是:java.rmi.UnmarshalException:错误解组参数; 嵌套异常是:java.lang.ClassNotFoundException:sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)的sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)中的progInternet2008.commons.NominabileFactory at sun.rmi.transport.Transport $ 1.run(Transport.java:159)位于sun.rmi的sun.rmi.transport.Transport.serviceCall(Transport.java:155)的java.security.AccessController.doPrivileged(Native Method) .transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(TCPTransport.java:790)at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.运行(TCPTransport.java:649)java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)at java.lang .hread.run(Thread.java:619)位于sun.rmi的sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233). server.UnicastRef.invoke(UnicastRef.java:359)位于sun.rmi.registry.RegistryImpl_Stub.rebind(未知来源)的progInternet2008.Pozzobon.tesi.Slave.main(Slave.java:54)引起:java.rmi. UnmarshalException:错误解组参数; 嵌套异常是:java.lang.ClassNotFoundException:sun.rmi.registry.RegistryImpl_Skel中的progInternet2008.commons.NominabileFactory.

我已经阅读了RMI Java教程,但仍然无法使其工作......

作为VM Arguments,我设置了这个:

-Djava.rmi.server.codebase =文件:$ {} workspace_loc/progInternet2008

请帮我

(我正在使用Java 6)

java eclipse rmi rmiregistry

22
推荐指数
4
解决办法
6万
查看次数

如何设置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上,顺便说一下.


更新 我找到了解决方法.请参阅下面的答案.

java rmi rmiregistry classnotfoundexception

15
推荐指数
2
解决办法
2万
查看次数

RMI服务器:rmiregistry或LocateRegistry.createRegistry

对于服务器端的RMI,我们需要启动rmiregistry程序,还是只需要调用LocateRegistry.createRegistry?如果两者都有可能,有哪些优点和缺点?

java rmi rmiregistry

13
推荐指数
1
解决办法
1万
查看次数

类java.rmi.registry.Registry和java.rmi.Naming之间的区别

Registry班级和Naming班级有什么区别.

在我的申请中,我正在Registry上课.但我想了解Naming课程及其用途?

java naming rmi rmiregistry

12
推荐指数
1
解决办法
3692
查看次数

如何关闭在特定端口上运行的rmiregistry?

我正在研究Java RMI.我在端口2028上运行我的rmiregistry没有什么问题,因为我已经使用那个来运行我的测试程序.我可以使用其他端口运行我的程序,但我想知道,我们如何关闭在特定端口上运行的rmiregistry?

java linux rmi rmiregistry

8
推荐指数
2
解决办法
2万
查看次数

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

我正在运行java RMI的Hello World示例

1)我在一个空文件夹中运行注册表

motta@motta-laptop ~/tmp $ rmiregistry
Run Code Online (Sandbox Code Playgroud)

2)我启动HTTP服务器以在运行时检索类.download文件夹包含客户端 - 服务器的远程接口

motta@motta-laptop ~/download $ java NanoHTTPD 8080
Run Code Online (Sandbox Code Playgroud)

3)我按照java RMI教程的建议启动服务器传递java.rmi.server.codebase属性

motta@motta-laptop ~/server $ java -Djava.rmi.server.codebase="http://localhost:8080" WarehouseServer
Run Code Online (Sandbox Code Playgroud)

RMI注册表未联系HTTP服务器并且抛出异常(请参阅问题后的详细​​信息). 但如果我做以下事情

1)使用java.rmi.server.codebase属性启动rmi注册表

motta@motta-laptop ~/tmp $ rmiregistry -J-Djava.rmi.server.codebase="http://localhost:8080/"
Run Code Online (Sandbox Code Playgroud)

2)像以前一样启动HTTP服务器

3)没有任何选项启动服务器

motta@motta-laptop ~/server $ java WarehouseServer
Run Code Online (Sandbox Code Playgroud)

它有效,但为什么呢?似乎在第一个过程中,RMI注册表忽略了java.rmi.server.codebase属性

谢谢

=================================

我在跑步

java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)

RMI注册表的例外

Constructing server implementation...
Binding server implementation to registry...
Exception in thread "main" java.rmi.ServerException: RemoteException occurred in …
Run Code Online (Sandbox Code Playgroud)

java rmi rmiregistry nanohttpd

7
推荐指数
1
解决办法
1万
查看次数

如何通过java代码启动RMI注册表?

我为客户端和服务器编写了java程序.但是,要运行该程序,我需要手动启动rmi注册表!如何通过java代码(通过服务器)启动RMI注册表?

java client rmi rmiregistry

6
推荐指数
1
解决办法
2万
查看次数

JUnit和RMI应用程序的最佳实践,RMI Registry

我正在为RMI客户端应用程序编写一组系统集成测试.我想在JUnit 3.8.2中启动RMI服务器,然后运行这些测试.有没有人这样做过?

我在使用main的pojo中使用类似的东西:


    import java.rmi.registry.*;

    ....

    //setup
    try {

        java.rmi.registry.LocateRegistry.createRegistry(1099);
        System.out.println("RMI registry ready.");

        this.StartMyServer();

        // client set up

        MyClient m = null;
        m = (MyClient) Naming.lookup("//MyHost/MyServer", m);

        // tests here

    } catch (MyClientException me) {

        System.out.println("MyClient fall down go boom");

    } catch (MyServerException me) {

        System.out.println("MyServer fall down go boom");

    } catch (Exception e) {

        System.out.println("Exception starting RMI registry:");

    } 


将此转换为junit测试的最佳方法是什么,因此注册表只启动一次,并且仅在注册表实际启动时才运行测试?我想避免让测试类有一个测试方法,其中包含来自main的所有测试代码,这是我在来到这里之前发现的.

另外,在编写测试时应该注意什么?任何RMI测试都有问题吗?

java junit rmi rmiregistry

5
推荐指数
1
解决办法
3428
查看次数

服务器通过没有注册表的RMI

我有一个可以通过RMI连接的服务对象.目前我这样做:

服务器

Registry r = LocateRegistry.createRegistry(1234);
r.bind("server", UnicastRemoteObject.exportObject(remoteServer, 0));
Run Code Online (Sandbox Code Playgroud)

客户

RemoteServer s = LocateRegistry.getRegistry("example.com", 1234).lookup("server");
Run Code Online (Sandbox Code Playgroud)

服务器上的注册表只有一个用途,用于链接到单个服务器对象.我想我也可以在服务器上这样做:

UnicastRemoteObject.exportObject(remoteServer, 1234);
Run Code Online (Sandbox Code Playgroud)

但那我将如何从客户端连接到服务器对象?

java registry networking rmi rmiregistry

4
推荐指数
1
解决办法
4342
查看次数

RMI连接被拒绝

我正在努力获得rmi连接.我遇到了很多安全问题,但一直无法找到解决这一问题的方法.我执行我的jar文件:

java -Djava.security.policy=java.security.AllPermission -jar "myjarfile"
Run Code Online (Sandbox Code Playgroud)

我用来创建它的代码是:

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 IS WAITING");
        LocateRegistry.createRegistry(2020);

        //Runtime.getRuntime().exec("rmiregistry 2020");
        Naming.rebind("//localhost:2020/SERVER", server);

    }
    catch(Exception e)
    {
        System.out.println(e);
    }
}
};
Run Code Online (Sandbox Code Playgroud)

我收到的错误跟踪是:

Exception in thread "RMI TCP Connection(idle)" java.security.AccessControlExcept
ion: access denied (java.net.SocketPermission …
Run Code Online (Sandbox Code Playgroud)

java rmi hosts rmiregistry

3
推荐指数
1
解决办法
5839
查看次数

我正在运行RMI应用程序而没有安全管理器:RMI类加载器禁用异常

这是完整的例外:

Computeappengine exceptionRemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: Client.prog (no security manager: RMI class loader disabled)
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: Client.prog (no security manager: RMI class loader disabled)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:334)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at Engine.ComputeappEngine_Stub.executeTask(Unknown …
Run Code Online (Sandbox Code Playgroud)

java eclipse-plugin rmi rmiregistry classpath

1
推荐指数
1
解决办法
2万
查看次数

无法在ubuntu服务器上启动jstatd

我想设置两个运行jstatd的服务器,这样我就可以动态监控我的应用程序.Web服务器已经启动并运行,但是另一台服务器总是会遇到这样的例外情况.

无法将/ JStatRemoteHost绑定到RMI注册表java.rmi.ServerException:服务器线程中发生了RemoteException; 嵌套异常是:java.rmi.UnmarshalException:错误解组参数; 嵌套的例外是:抛出java.lang.ClassNotFoundException:sun.jvmstat.monitor.remote.RemoteHost(无安全管理器:RMI类装载器禁用)在sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419)在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 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java)中的sun.rmi.transport.Transport.serviceCall(Transport.java:173)中的java.security.AccessController.doPrivileged(Native Method)java:143)引起:java.rmi.UnmarshalException:错误解组参数; 嵌套异常是:java.lang.ClassNotFoundException:sun.rmi.reg中的sun.rmi.registry.RegistryImpl_Skel.dispatch(未知源)sun.jvmstat.monitor.remote.RemoteHost(没有安全管理器:RMI类加载器被禁用).位于sun.rmi的sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)的sunastServerRef.oldDispatch(UnicastServerRef.java:409)位于sun.rmi的sun.rmi.transport.Transport $ 1.run(Transport.java:177). transport.Transport $ 1.run(Transport.java:174)位于sun.rmi.transport.tcp的sun.rmi.transport.Transport.serviceCall(Transport.java:173)的java.security.AccessController.doPrivileged(Native Method) .TCPTransport.handleMessages(TCPTransport.java:553)at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.

我确定jstatd加载了内容为的策略文件

grant codebase"file:$ {java.home} /../ lib/tools.jar"{permission java.security.AllPermission; };

我无法想象问题是什么来的,请帮忙.

rmiregistry jstatd

1
推荐指数
1
解决办法
6192
查看次数