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

Ресурсы Java RMI

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

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

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

4b9b3361

Ответ 2

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

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

Что касается книг... Java RMI от William Grosso или Java Network Programming Эллиотта Гарольда.

Ответ 3

RMI не так сильно изменился. Я думаю, что 1,3 книги эпохи будут в порядке.

Ответ 4

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

В конце концов, лучшая книга, которую я нашел, которая охватывает некоторые из действительно хороших бит RMI, таких как Activation, была Java Network Programming and Distributed Вычислительный.

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

Книга O'Reilly RMI довольно хороша. Пойдите для этого.

Ответ 8

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

Ответ 10

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

Предположим, что 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 -> {
 ...
});

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