Как стать автором
Обновить

Комментарии 14

У rmiregistry есть неприятная особенность, регистрировать объекты можно только с того же компьютера, с которого она запущена. При попытке зарегистрировать объект из другого компьютера выдается невнятная ошибка.
Тут два варианта, либо стаб система не нашла, либо codebase не прописан.
Либо (если порыться в итернете), то в одном из форумов по java написано, что из-за политики безопасности так делать нельзя.
Ну это уже зависит от настроек SM, нет?
При попытке зарегистрировать стаб на удалённом 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

Вообще из соображений безопасности, это весьма логично…
Логично… С другой стороны, почему нельзя было сделать возможность разрешенного диапазона адресов для регистрации. (а если сделано, то не очевидно...)
Если делать систему из 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).
Спасибо. Моё упущение. Исправил.
Как всегда радует статья в стиле «я вчера почитал, а теперь расскажу вам...»
как вы надоели, пионеры
Вот почему-то гуру редко пишут
Да, к сожалению в России это так. Подавляющее большинство статей пишут «не наши». Но и у нас есть достойные люди, например бывший суровый челябинский программист
согласен, читаю его с большим удовольствием :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории