RMI服务器,变量值未更新

时间:2016-01-29 16:39:24

标签: java rmi

这只是一个测试,以了解Java RMI服务器的工作原理。如果我执行服务器并与RMI客户端通信,那么变量" data"应该在客户端远程调用getData()方法时更新。但相反,该程序继续打印"你好2"。这意味着变量未更新,可能是因为服务器在另一个进程上执行。有人可以澄清一下吗?

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.logging.Level;
import java.util.logging.Logger;

public class RMIServer extends UnicastRemoteObject implements RMIi{

    public RMIServer() throws RemoteException{
        super();
    }

    static String data = "Hello";

    @Override
    public String getData(String text) throws RemoteException {
        data = "Hello 4";
        return data;
    }

    public static void main (String[] args){
        while(true) {
            try{
                data = "Hello 2";
                Registry reg = LocateRegistry.createRegistry(1099);
                reg.rebind("server", new RMIServer());
                System.out.println("Server Started");
                data = "Hello 3";
            }
            catch(Exception e){
                System.out.println(e);
            }

            System.out.println(data);
        }
    }

}

1 个答案:

答案 0 :(得分:2)

  

如果我执行服务器并与RMI客户端通信,则当客户端远程调用getData()方法时,应更新变量“data”。

正确。

  

但是程序会继续打印“你好2”。

什么节目?这里什么都没打印出来。但data是“Hello 2”,因为main()中存在无意义的循环。删除它。

  

这意味着变量未更新

不,不。这意味着你在一个无意义的循环中继续将它设置为该值,同时不断创建新的服务器实例。这里没有证据表明你已经执行了客户端。

  

可能是因为服务器是在另一个进程上执行的。

没有

NB data不应该是静态的。