• rmi


    java的jmr有两种注册发,1 代码注册 2 另起进程

    第2种方式太麻烦,本文仅讨论第一种方式的最佳实践

    http://blog.51cto.com/6221123/1112619

    按此链接构建demo ,

    server

            UserManagerImpl userManager=new UserManagerImpl();
            UserManagerInterface userManagerI=(UserManagerInterface) UnicastRemoteObject.exportObject(userManager,0);
            // Bind the remote object's stub in the registry
            Registry registry = LocateRegistry.createRegistry(2001);
            registry.rebind("userManager", userManagerI);
    
            // 启动时指定-Djava.rmi.server.hostname=192.168.57.234,否则客户端运行期报异常,
    
            // 无法获取-Dcom.sun.management.jmxremote.port
        //    registry = LocateRegistry.getRegistry(8288);
    
            System.out.println("server is ready");
    

     client

            Registry registry = LocateRegistry.getRegistry("192.168.57.234",2001);
            UserManagerInterface userManager = (UserManagerInterface)registry.lookup("userManager");
            User user = userManager.getUser();
            System.out.println(user.getName() + ":" + user.getAge());
    

    报:

    Java RMI:rmi Connection refused to host: 127.0.0.1

    参考:https://blog.csdn.net/chenchaofuck1/article/details/51558995/

     提出3个解决方案——

    1) 修改/etc/hosts 
    找到127.0.0.1       hostxxxxx这样的字样。把127.0.0.1改成真实的,可供其他机器连接的ip,如   192.168.xx.xx  hostname
    这样客户端就能得到真实的ip了。 

    这种方式打击粒度太多


    2) 在rmi服务器端程序启动脚本中加上两行,显式指定hostname。我的脚本: 
      

    Java代码  收藏代码
      1.  hostname=`hostname`   
      2. java -cp $CLASSPATH -Djava.rmi.server.codebase=$codebase -Djava.security.policy=$PROJECT_HOME/se_server/conf/se_server.policy -  
      3. Djava.rmi.server.hostname=$hostname com.abc.server.StartServer > $PROJECT_HOME/se_server/logs/init.log 2>&1 &  
    不过该方式有个局限,其他机器肯定能识别ip,但是可能无法识别hostname。当然,你也可以直接写死这个hostname,比如:-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx。 这样最省力,就是缺乏灵活性。
     
    赞成
     
    3)代码解决
    更正办法:把Naming.rebind("SectionWorkerManager", manager); 
    改成Naming.rebind("rmi://10.1.5.xxx:1099/SectionWorkerManager", manager);,直接用IP地址(10.1.5.xxx:1099为服务器本身IP),这样就没问题了;
     
    这种方式没成功
     
    更详细的内容有:https://blog.csdn.net/lmy86263/article/details/725947609
     
    最主要的:启动命令行java -Djava.rmi.server.hostname=192.168.57.234 -jar rmi.jar
  • 相关阅读:
    嵌入式开发-基础理论笔记
    如果有,说明你正在堕落!
    不愿意主动联系别人的6大理由
    WCF 服务的ABC之契约(七)
    WCF 服务的ABC之绑定(六)
    WCF 服务的ABC之地址(五)
    WCF 服务与终结点(四)
    WCF 配置文件(三)
    [转载][新手教程] 【小白教程】第一期:谁动了我的Grub?——Grub 修复
    [转载]反无人机企业DroneShield利用声音识别侦测无人机
  • 原文地址:https://www.cnblogs.com/silyvin/p/10308956.html
Copyright © 2020-2023  润新知