当前位置:  技术问答>java相关

关于rmi的问题???怪怪的.

    来源: 互联网  发布时间:2015-08-30

    本文导语:  如果我在我的包含*.class的目录中启动rmiregistry,然后再启动的我的ProductServer不会出错。但是在其他目录启动rmiregistry后,在再包含*.class的目录中启动ProductServer出错。 Constructing server implements... Binding server implements...

如果我在我的包含*.class的目录中启动rmiregistry,然后再启动的我的ProductServer不会出错。但是在其他目录启动rmiregistry后,在再包含*.class的目录中启动ProductServer出错。


Constructing server implements...
Binding server implements to registry...
Error:java.rmi.ServerException: RemoteException occurred in server thread; neste
d exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
        java.lang.ClassNotFoundException: ProductImpl_Stub

我的程序如下:

import java.rmi.*;
public interface Product extends Remote
{
    public String getDescription() throws RemoteException;
}
import java.rmi.*;
import java.rmi.server.*;

public class ProductClient 
{
    public static void main(String args[])
    {
        System.setSecurityManager(new RMISecurityManager());
        String url="rmi://localhost/";
        try
        {
            Product c1=(Product)Naming.lookup(url+"toaster");
            Product c2=(Product)Naming.lookup(url+"microwave");
            System.out.println(c1.getDescription());
            System.out.println(c2.getDescription());
        }
        catch(Exception e){System.out.println("Error:"+e);}
        System.exit(0);
    }
}
import java.rmi.*;
import java.rmi.server.*;

public class ProductImpl extends UnicastRemoteObject implements Product
{
    public ProductImpl(String n) throws RemoteException
    {
        name=n;
    }
    public String getDescription() throws RemoteException
    {
        return "I am a "+name+". Buy me!";
    }
    
    private String name;
}
import java.rmi.*;
import java.rmi.server.*;
import sun.applet.*;

public class ProductServer
{
    public static void main(String args[])
    {
        try
        {
            System.out.println("Constructing server implements...");
            
            ProductImpl p1=new ProductImpl("Blackwell Toaster");
            ProductImpl p2=new ProductImpl("ZapXpress Microwave Oven");
            System.out.println("Binding server implements to registry...");
            Naming.rebind("toaster",p1);
            Naming.rebind("microwave",p2);
            System.out.println("Waiting for invocations from clients...");
        }catch(Exception e){System.out.println("Error:"+e);}
    }
}


|
在rebind()的时候,rmiregistry 要寻找stub 和 skeleton类来序列化和反序列化客户端的请求。

你的问题比较明白,stub类所在的路径没有被包含进 CLASSPATH 中,但是当前路径 “.”在CLASSPATH中。所以rmiregistry在你的.class路径中启动就没错,但是在其他地方不行。

另外,rmiregistry 不能在包括 stub 的目录下运行,否则客户端不能得到 stub. stub 是要传递给客户的,否则客户没有帮法序列化对server的请求。但是rmiregistry发现当前路径下有stub,就会认为客户已经得到了stub,于是就不传递了。

rmi的深入理解有些复杂的地方,多看看书,在做实验吧!

|
如果我在我的包含*.class的目录中启动rmiregistry,然后再启动的我的ProductServer不会出错。但是在其他目录启动rmiregistry后,在再包含*.class的目录中启动ProductServer出错。

rmiregistry所在的jvm(实例)和你的服务器所用的jvm不是一个,所以:

"如果我在我的包含*.class的目录中启动rmiregistry,然后再启动的我的ProductServer不会出错。" 因为,rmiregistry所用的jvm能找到需要的类。

"但是在其他目录启动rmiregistry后,在再包含*.class的目录中启动ProductServer出错。" 因为,虽然你的ProductServer所用的jvm能找到需要的类,但是rmiregistry所用的jvm却找不到需要的类。

|
这很显然嘛,否则它怎么找到stub呀。

    
 
 

您可能感兴趣的文章:

  • RMI初级问题!!!怎样让不同的主机之间用RMI????
  • 请问关于WebLogic RMI的问题
  • 菜鸟问题;请问哪里要用rmi/corba?
  • rmi server启动的问题??
  • RMI的问题
  • 关于RMI ACCESSCONTROLEXCEPTION的问题
  • 关于rmi的一个问题,请大家关照一下
  • 问高手一个有关RMI的问题
  • ○ 关于rmi中stub文件的问题,紧急!
  • 在运行juilder7 rmi例子时候的一个问题。
  • RMI配置问题,能者进.
  • 关于RMI的问题???
  • 关于RMI的连接的一个问题,请各位高手指导一下
  • 关于rmi服务端的一个问题,请各位大虾帮忙!
  • rmi的问题?不懂,奇怪!
  • 请高手指点有关rmi的问题。。。 - 多谢!!!!
  • 关于RMI的问题 在线等候
  • rmi中实现的奇观问题?
  • 一个有关jdbc的RMI的问题,JAVA高手指点一下
  • 高分!!!关于RMI的security policy问题怎样在代码中实现?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.management.remote.rmi类rmiconnectorserver的类成员方法: rmi_client_socket_factory_attribute定义及介绍
  • Eclipse的RMI开发插件 RMI Plugin for Eclipse
  • java命名空间javax.management.remote.rmi类rmiconnectorserver的类成员方法: rmi_server_socket_factory_attribute定义及介绍
  • 请教:rmi中的server为什么不能注册?
  • java命名空间javax.rmi.corba接口utildelegate的类成员方法: registertarget定义及介绍
  • 请教RMI基础知识,谢谢!
  • java命名空间java.rmi.server类rmisocketfactory的类成员方法: getdefaultsocketfactory定义及介绍
  • RMI via JMS
  • java命名空间javax.management.remote.rmi类rmiserverimpl的类成员方法: getprotocol定义及介绍
  • 急!怎样才能获得javax.rmi包?
  • java命名空间javax.rmi.corba接口portableremoteobjectdelegate的类成员方法: connect定义及介绍
  • 有谁在Unix上用过RMI么?rmiregistry启动后如何停下来?
  • java命名空间javax.rmi.corba接口tie的类成员方法: settarget定义及介绍
  • Eclipse RMI Plugin
  • java命名空间javax.management.remote.rmi类rmiiiopserverimpl的类成员方法: getprotocol定义及介绍
  • 菜鸟上路。有关rmi????????
  • java命名空间javax.management.remote.rmi类rmijrmpserverimpl的类成员方法: getprotocol定义及介绍
  • 大家都用RMI做一些什么事情?大家畅所欲言,来者有分。
  • java命名空间javax.rmi.corba接口utildelegate的类成员方法: gettie定义及介绍
  • 请问rmi通讯和socket通讯有什么优劣和异同?
  • java命名空间javax.rmi.corba接口portableremoteobjectdelegate的类成员方法: tostub定义及介绍
  • 在j++中怎样引用其它的包,比如RMI包????


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3