在Java RMI Naming.rebind(url,obj)中,obj的参数是什么?

时间:2015-06-02 07:18:09

标签: java rmi

我正在搜索使用java rmi,但我发现有些代码令人困惑:

public class RmiServer{
public static void main(String[] args) throws Exception
 {
    int port = 1099;
    String url = "rmi://localhost:1099/HelloServiceImpl";
    LocateRegistry.createRegistry(port);
    Naming.rebind(url, new HelloServiceImpl());
    System.out.println("already create remote service:" + url);
 }
}

但参数" new HelloServiceImpl()"只是一个原始对象瞬间。它不是一个存根!这段代码如何将存根重新绑定到注册表? 正如我们在Name.rebind中看到的那样:

public static void rebind(String name, Remote obj)
    throws RemoteException, java.net.MalformedURLException
{
    ParsedNamingURL parsed = parseURL(name);
    Registry registry = getRegistry(parsed);

    if (obj == null)
        throw new NullPointerException("cannot bind to null");

    registry.rebind(parsed.name, obj);
}

它将obj传递给注册表而不是存根! 谁能帮助我得到答案?

顺便说一句,HelloServiceImpl是这样的:

public class HelloServiceImpl extends UnicastRemoteObject implements      HelloService
 {

public HelloServiceImpl() throws RemoteException
{
}

@Override
public String sayHello(String name) throws RemoteException
{
    return String.format("Hello %s", name);
}
}

1 个答案:

答案 0 :(得分:0)

将导出的远程对象作为RMI参数或结果传递,而不是传递存根。这是自动的。