Ответ 1
[Какая] разница между
java.rmi.Naming
иjava.rmi.registry.LocateRegistry
Отличие состоит в том, что поле name
на Naming.rebind()
равно анализируется как URL, а Registry.rebind()
- это "имя для связи с удаленной ссылкой" . Вызов LocateRegistry.getRegistry()
предполагает, что реестр находится на локальном хосте на порту по умолчанию, а Naming.rebind()
позволяет указать, какой реестр использовать.
В Java 1.6 Naming.rebind()
анализируется name
как URL-адрес и вызывает Naming.getRegistry()
с хостом/портом реестра. Это вызывает LocateRegistry.getRegistry(host, port)
.
public static void rebind(String name, Remote obj) throws RemoteException, MalformedURLException
ParsedNamingURL parsed = parseURL(name);
Registry registry = getRegistry(parsed);
if (obj == null)
throw new NullPointerException("cannot bind to null");
registry.rebind(parsed.name, obj);
}
...
private static Registry getRegistry(ParsedNamingURL parsed) throws RemoteException {
return LocateRegistry.getRegistry(parsed.host, parsed.port);
}