Комментарии 14
У rmiregistry есть неприятная особенность, регистрировать объекты можно только с того же компьютера, с которого она запущена. При попытке зарегистрировать объект из другого компьютера выдается невнятная ошибка.
Тут два варианта, либо стаб система не нашла, либо codebase не прописан.
При попытке зарегистрировать стаб на удалённом rmiregistry, на стороне rmiregistry возбуждается исключение AccessException. К нам оно приходит в виде RemoteException:
RemoteException — if remote communication with the registry failed; if exception is a ServerException containing an AccessException, then the registry denies the caller access to perform this operation (if originating from a non-local host, for example) (из api ref для Registry.bind)
Тоже самое будет при попытке unbind и rebind
Вообще из соображений безопасности, это весьма логично…
RemoteException — if remote communication with the registry failed; if exception is a ServerException containing an AccessException, then the registry denies the caller access to perform this operation (if originating from a non-local host, for example) (из api ref для Registry.bind)
Тоже самое будет при попытке unbind и rebind
Вообще из соображений безопасности, это весьма логично…
Логично… С другой стороны, почему нельзя было сделать возможность разрешенного диапазона адресов для регистрации. (а если сделано, то не очевидно...)
Если делать систему из N вычислительных единиц, которые обмениваются данными друг с другом, причем время от времени могут менять свое местоположение (такая вот распределенная система =) ), то каждый запрос будет выглядеть примерно так:
Есть главный компьютер «Главный», который знает актуальное положение всех единиц
Тогда запрос будет проходить так:
Вместо вполне логичного:
Ведь запись в rmiregistry(bind) представляет собой всего:
1) «Место» где находится объект
2) Тип объекта (.class фаил)
Получается вполне логично было бы сделать возможность регистрацию объектов с других компьютеров.
PS А вообще, по части удаленных вызовов с PyRo (правда это Python) по красоте сравниться не может ни одна из существующих RPC (Ice, Corbo и другие). Если брать microsoft, то можно со счета сбиться какую по счету RPC они предлагают.
PPS ссылка на минимальный пример использования PyRo
Если делать систему из N вычислительных единиц, которые обмениваются данными друг с другом, причем время от времени могут менять свое местоположение (такая вот распределенная система =) ), то каждый запрос будет выглядеть примерно так:
Есть главный компьютер «Главный», который знает актуальное положение всех единиц
Тогда запрос будет проходить так:
Единица1 запрашивает у rmiregistry Главного "ссылку" на Главного (актуальную, но это не обязательно)
Единица1 запрашивает у Главного положение Единицы2
Единица1 запрашивает у rmiregistry Единица2 "ссылку" на Единица2
Единица1 запрашивает у Единица2 метод
Вместо вполне логичного:
Единица1 запрашивает у rmiregistry Главного "ссылку" на Единица2
Единица1 запрашивает у Единица2 метод
Без использования дополнительно-созданного аналога DNSВедь запись в rmiregistry(bind) представляет собой всего:
1) «Место» где находится объект
2) Тип объекта (.class фаил)
Получается вполне логично было бы сделать возможность регистрацию объектов с других компьютеров.
PS А вообще, по части удаленных вызовов с PyRo (правда это Python) по красоте сравниться не может ни одна из существующих RPC (Ice, Corbo и другие). Если брать microsoft, то можно со счета сбиться какую по счету RPC они предлагают.
PPS ссылка на минимальный пример использования PyRo
«Рассмотрим на примере распределённых вычислений.» — в данном случае «распределённых» слишком громко сказано.
>все параметры передаются по значению (т.е. копии объектов, а не ссылки на них, как это обычно происходит)
Вы тут неправы. В RMI есть возможность переадавать как по значению (Serializable), так и по ссылке (Remote).
Вы тут неправы. В RMI есть возможность переадавать как по значению (Serializable), так и по ссылке (Remote).
Как всегда радует статья в стиле «я вчера почитал, а теперь расскажу вам...»
как вы надоели, пионеры
как вы надоели, пионеры
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
RMI (Remote Method Invocation)