Вопрос

Привет всем. В настоящее время я занимаюсь проектом, который предполагает широкое использование Java RMI, и мне интересно, знает ли кто-нибудь какие-нибудь хорошие ресурсы по этому поводу.

Проблема с материалом, который я сейчас нахожу, заключается в том, что он обычно сильно устарел (например, Java 1.3) и/или наполовину завершен.Я бы даже рад купить книгу по ней, но смотрю на Амазоне, всем книгам лет 7 лет.

Поэтому, если кто-нибудь знает какие-либо хорошие ресурсы, книги или хорошие примеры реализации, мне было бы очень интересно о них услышать.Заранее спасибо за вашу помощь.

Это было полезно?

Решение

RMI Привет, мир выглядит красиво для начала.Конечно, это все еще простой пример, так что, возможно, советы по производительности/масштабируемости RMI будет полезно, поскольку вы уже знакомы с RMI.

Другие советы

Java.RMI за прошедшие годы изменился очень мало, поэтому на большую часть старой документации все еще можно ссылаться.Обратите внимание, что одним из существенных изменений является необходимость компилировать заглушки RMI, если вы используете версию Java 5.0.Большинство людей отошли от RMI и приняли Река (ранее называвшийся Jini) для распределенных систем.

Если вы все еще думаете о дальнейшем развитии RMI, я бы посоветовал прочитать документация Oracle или задайте свои вопросы на их форумы.

Что касается книг… Ява РМИ Уильям Гроссо или Сетевое программирование на Java Эллиот Гарольд.

RMI не сильно изменился.Я думаю, что книги эпохи 1.3 подойдут.

Спасибо всем за ваши ответы. Я думаю, что то, что люди сказали о том, что RMI не сильно изменилось, верно, однако учебные пособия все же могли бы быть немного лучше, поскольку они замалчивают некоторые важные моменты.

В конце концов, лучшая книга, которую я нашел, в которой описываются некоторые действительно хорошие аспекты RMI, такие как активация, была Сетевое программирование на Java и распределенные вычисления.

я посмотрел на другого О'Рейли Java RMI книга, и, по моему мнению, она вообще не очень хороша для чего-то большего, чем самый маленький из проектов RMI.

Если вы собираетесь активно использовать RMI, я бы посоветовал взглянуть на Весеннее удаленное взаимодействие.Это очень помогает в абстрагировании протокола удаленного взаимодействия, помогает вам переключить реализацию удаленного взаимодействия позже, если вам нужно (например, переключиться на Hessian или SOAP).

Если вы используете RMI или любой другой протокол удаленных объектов, следует иметь в виду, что вы можете генерировать большой объем трафика, вызывая методы удаленных объектов.В вашем коде может быть неочевидно, что эти объекты являются удаленными.Это может вызвать проблемы с производительностью.

Если вы можете, я бы посоветовал вам иметь архитектуру, более или менее ориентированную на сервисы, в которой вы вызываете удаленные службы для получения объекта данных, но не слишком много поведения для этих объектов...

Вы пробовали Sun't? Учебное пособие по RMI?Все учебные пособия по Sun очень хороши, и обычно с них я начинаю изучать Java в первую очередь.

Книга, которую мы использовали в школе, с хорошим примером кода: Справочник разработчика J2EE.Имейте в виду, что это огромный справочник объемом около 1500 страниц, в котором только одна глава (около 50 страниц) посвящена RMI.

Книга О'Рейли RMI довольно хороша.Действуй.

Абсолютно бесценный статья на многодомном RMI (хосты с несколькими IP-адресами) Очень простым для понимания образом объясняет RMI и рассматривает вопросы хостинга реестров на машинах с более чем одним IP-адресом, а также способы решения проблем с частными IP-адресами.Спас мой бекон.

Помимо уже упомянутых, в статье Понимание внутреннего устройства Java RMI ИМХО было вполне прилично, немного покопавшись во внутренностях.

Вот еще один хороший пример удаленного вызова метода с помощью Redisson framework:

Давайте предположим YourServiceImpl содержит метод, который вам нужно вызвать удаленно, и реализует YourService интерфейс.

YourServiceImpl должен быть зарегистрирован в Redisson через объект RemoteService:

YourService yourService = new YourServiceImpl();

RRemoteService remoteService = redisson.getRemoteService();
remoteService.register(YourService.class, yourService);

Для удаленного вызова метода необходим только служебный интерфейс:

RRemoteService remoteService = redisson.getRemoteService();
YourService service = remoteService.get(YourService.class);

MyObject result = service.myMethod(someParam1, someParam2);

Также он поддерживает асинхронные вызовы.

// async interface for YourService
@RRemoteAsync(YourService.class)
public interface YourServiceAsync {

    RFuture<Long> someMethod1(Long param1, String param2);

    RFuture<Void> someMethod2(MyObject param);

}

RRemoteService remoteService = redisson.getRemoteService();
YourServiceAsync asyncService = remoteService.get(YourServiceAsync.class);

RFuture<Long> res = asyncService.someMethod1(12L, "param");
res.thenApply(r -> {
 ...
});

Подробнее здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top