Подтвердить что ты не робот

Разница между java.rmi.Naming и java.rmi.registry.LocateRegistry

при изучении RMI иногда (голова сначала Java) dudes используют

Naming.rebind(name, object) 

но другие люди в Интернете (оракул) используют

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

Я знаю, что hf java немного стар, но я не считаю класс Naming устаревшим.

Итак, какая разница тогда?

4b9b3361

Ответ 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);
}

Ответ 2

Нет разницы, если вы посмотрите на исходный код, вы увидите следующее:

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, не мой собственный.

Аналогичный вопрос здесь