java.rmi.Naming和java.rmi.registry.LocateRegistry之间的区别

时间:2011-11-30 17:30:35

标签: java rmi

在学习RMI时(首先是Java)dudes使用

Naming.rebind(name, object) 

但是网络上的其他人(oracle)使用

Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, object);

我知道hf java有点旧,但我没有看到Naming类已被弃用。

那么,那有什么不同呢?

2 个答案:

答案 0 :(得分:7)

  

java.rmi.Namingjava.rmi.registry.LocateRegistry

之间的区别[有什么区别]

不同之处在于,name的{​​{1}}字段为parsed as an URLNaming.rebind()"name to associate with the remote reference"Registry.rebind()调用假定注册表位于默认端口的本地主机上,而LocateRegistry.getRegistry()允许您指定要使用的注册表。

在Java 1.6下Naming.rebind()Naming.rebind()解析为URL,并使用注册表的主机/端口调用name。这会调用Naming.getRegistry()

LocateRegistry.getRegistry(host, port)

答案 1 :(得分:6)

如果您查看源代码没有区别,那么您将看到:

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);
}

免责声明:从JDK获取的代码不是我自己的impl。

类似问题here