zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    VysorPro助手
    Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
    Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset
    Native SBS for Android
    ADB和Fastboot最新版的谷歌官方下载链接
    How do I install Daydream on my phone?
    Daydream Controller手柄数据的解析
    蓝牙BLE传输性能及延迟分析
    VR(虚拟现实)开发资源汇总
    Android(Java)控制GPIO的方法及耗时分析
  • 原文地址:https://www.cnblogs.com/silyvin/p/10308956.html
Copyright © 2011-2022 走看看