Я готовлюсь к экзамену, и у меня возникает вопрос, что я надеюсь, что кто-то здесь сможет ответить мне.
Его о RMI и удаленных объектах. Интересно, почему так много различий между этими двумя реализациями. один расширяет объект UnicastRemoteObject, тогда как другой экспортирует объект как объект UnicastRemoteObject.
Я действительно не понимаю, кстати, это всего лишь быстрый и грязный пример: -)
Интерфейс:
public interface EchoI extends Remote {
public String echo() throws RemoteException
}
Это код сервера (версия 1):
public class EchoImpl extends UnicastRemoteObject implements EchoI {
public EchoImpl {
super();
}
public static void main (String[] args) {
try {
LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
StoreHouse storehouseImpl = new StorehouseImpl();
Naming.rebind("//localhost/StoreHouse.SERVICE_NAME", storehouseImpl);
System.out.println("Server ready");
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
public String echo() {
return "echo";
}
}
и это будет версия 2:
public class EchoImpl implements EchoI {
public static void main (String[] args) {
EchoI echoService = new EchoImpl();
EchoI stub = (EchoI) UnicastRemoteObject.exportObject(echoService, 0);
Registry registry = LocateRegistry.getRegistry();
registry.bind("echoService", stub);
...
}
}
Мой вопрос: в чем разница между этими двумя?
в первой версии реестр явно создается, кроме того, удаленный объект создается в рамках повторной операции.
Мне очень любопытно, почему в первую очередь мне нужно создать реестр самостоятельно, но не нужно явно экспортировать объект и просто переустановить его с помощью именования.
это тот объект, который уже привязан к реестру раньше, или я могу использовать привязку вместо этого? И что произойдет, если объект ранее не был связан и повторная переинструкция?
в второй версии, реестр, похоже, уже создан?
Почему привязка к наименованию так же, как привязка к реестру напрямую?
Если вы хотите, чтобы я включил какие-либо подробности, оставьте мне комментарий...
Это то, что я думаю:
- первый класс direclty реализует интерфейс UnicastRemoteObject, что означает, что во время выполнения создается реестр и объект автоматически экспортируется в реестр RMI.
- поскольку объект уже привязан к реестру, необходимо выполнить повторную проверку вместо нормального связывания
- последний, делает все это явно