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
原文地址:https://www.cnblogs.com/silyvin/p/10308956.html