Ответ 1
RMI Hello World выглядит неплохо для начала. Конечно, это еще простой пример, поэтому, возможно, советы по производительности/масштабируемости RMI будут полезны, так как вы уже знакомы с RMI.
В настоящее время я занимаюсь проектом, предусматривающим широкое использование Java RMI, и мне было интересно, кто-нибудь знает о каких-либо хороших ресурсах об этом.
Проблема с материалом, который я нахожу в настоящее время, состоит в том, что он, как правило, довольно устарел (как Java 1.3) и/или наполовину завершен. Я даже был бы счастлив купить книгу об этом, но, глядя на Амазон, всем книгам уже 7 лет.
Поэтому, если кто-нибудь знает о каких-либо хороших ресурсах, книгах или хороших примерах реализации, мне было бы очень интересно узнать о них.
RMI Hello World выглядит неплохо для начала. Конечно, это еще простой пример, поэтому, возможно, советы по производительности/масштабируемости RMI будут полезны, так как вы уже знакомы с RMI.
В течение многих лет Java.RMI мало изменился, поэтому в большинстве старых документов все еще можно ссылаться. Обратите внимание, что одним существенным изменением является необходимость компиляции RMI-заглушек, если вы используете версию Java 5.0. Большинство людей отошли от RMI и приняли River (ранее называемый Jini) для распределенных систем.
Если вы все еще думаете о продвижении вперед с RMI, я бы предложил прочитать документацию Oracle или разместить ваши вопросы по их форумы.
Что касается книг... Java RMI от William Grosso или Java Network Programming Эллиотта Гарольда.
RMI не так сильно изменился. Я думаю, что 1,3 книги эпохи будут в порядке.
Спасибо всем за ваши ответы. Я думаю, что люди, которые говорили о том, что RMI не сильно изменились, верны, однако учебные пособия все же могут быть немного лучше, они замаскируют некоторые важные моменты.
В конце концов, лучшая книга, которую я нашел, которая охватывает некоторые из действительно хороших бит RMI, таких как Activation, была Java Network Programming and Distributed Вычислительный.
Я посмотрел на другую книгу O'reilly Java RMI, и, по моему мнению, это не очень хорошо, для чего-то большего, чем самый маленький из проектов RMI.
Если вы собираетесь активно использовать RMI, я бы предложил посмотреть Spring Remoting. Это очень помогает в абстрагировании протокола удаленного доступа, поможет вам позже переключить удаленное выполнение, если вам нужно (например, переключиться на Hessian или SOAP).
Одна вещь, о которой следует помнить, если вы используете RMI или любой другой протокол удаленного объекта, заключается в том, что вы можете генерировать много трафика, вызывая методы на удаленных объектах. В вашем коде может быть не очевидно, что эти объекты удалены. Это может вызвать проблемы с производительностью.
Если вы можете, я бы посоветовал вам иметь архитектуру более или менее ориентированную на обслуживание, где вы вызываете удаленные службы для получения объекта данных, но не слишком много поведений для этих объектов...
Вы пробовали Sun't учебник по RMI? Все учебники Sun очень хороши, и я обычно начинаю с того, что начинаю изучать что-либо о Java.
Книга, которую мы использовали в школе с хорошим примером кода - Справочник разработчика J2EE. Имейте в виду, что это огромный справочник объемом около 1500 страниц и всего одна глава (около 50 страниц) по RMI.
Книга O'Reilly RMI довольно хороша. Пойдите для этого.
Абсолютно бесценный статья о многопользовательском RMI (хосты с несколькими IP-адресами). Объясняет RMI очень легко понять и затрагивает вопросы хостинг реестров на машинах с более чем одним IP-адресом и как частные IP-адреса могут быть рассмотрены. Сохранял мой бекон.
В дополнение к уже упомянутым, статья Общие сведения о внутренних языках Java RMI была довольно приличной ИМХО, немного перебирая внутренние элементы.
Вот еще один хороший пример удаленного вызова метода с картой 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 -> {
...
});
Подробнее здесь