Значение java RMI, пожалуйста?

Почему люди используют RMI или когда я должен использовать RMI? Я прочитал эти учебники о RMI на сайте oracle. Но он не содержит достаточных практических примеров.

Насколько я понимаю, программное обеспечение должно иметь свои модули как "несвязанные и разделенные", насколько это возможно. RMI как-то кажется примером высокого сцепления со мной. Почему это не плохое кодирование? Я думал, что клиент должен только запускать инструкции, тогда как все фактические манипуляции с объектом выполнялись сервером.

(В настоящее время я работаю над степенью бакалавра по информатике и очень неопытен, поэтому, пожалуйста, исправьте меня, если я пойму, что эти понятия ошибочны.)

Спасибо заранее!

Ответ 1

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

В некоторых случаях (погружение в устаревшие или "корпоративные" приложения) у вас просто нет выбора.

Однако, если вы запускаете новый проект, другие параметры:

REST + JSON через HTTP

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

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

Приклеивание java, Джерси - блестящая библиотека, чтобы писать собственные веб-службы RESTful.

Если вы хотите включить в комплект поставки решение для веб-сервисов RESTful с помощью java, Dropwizard хороших парней в Yammer дает вам полный сервер и рамки, готовые просто подключить вашу бизнес-логику, а также обеспечивают ведение журнала, подключение к базе данных, сериализацию, маршрутизацию запросов и даже сбор показателей из коробки.

SOAP

Предыдущий стандарт для связи с удаленными службами. Если у вас нет причин использовать его, я бы придерживался REST.

Бережливость

Thrift создаст клиента и заглушку сервера, в основном выполняя большую часть работы. Сообщение находится в эффективном двоичном протоколе. Он набирает популярность в мире Java, поскольку он используется многими проектами с открытым исходным кодом в поле "Большие данные". Примеры, Cassandra, HBase (переход на Avro). Scrooge - это твиттер-проект для создания идиоматических отсеков для scala.

Акковые актеры

Akka - это каркас, который реализует модель актера для Scala и Java. Включает положения для межсервисного общения и заботится о многих деталях под капотом. I


В зависимости от ваших потребностей некоторые из них будут более подходящими, чем другие.

Ответ 2

Каждый раз, когда у вас есть функция, требующая большой централизованной вычислительной мощности или какого-либо дорогого ресурса (например, огромной базы данных), но ваши выходные данные должны быть во многих местах, где такая рабочая нагрузка не может быть развернута, тогда вы должны смотреть на Удаленный вызов метода, Рассмотрим Интернет, у вас на рабочем столе нет копии Google для поиска, который вы хотите вычислить, вы дистанционно вызываете серверы Google в тот момент, когда вам нужен результат. RMI - это протокол/система для распределения вашего приложения по серверам и разделения клиентов, которым необходим доступ к результатам этого кода.

RMI может также служить способом защиты аспектов вашего приложения (например, проприетарного алгоритма). RMI - не единственный подход, вы также можете использовать HTTP, SOAP и т.д. Многие из этих других подходов предлагают другие вещи, такие как истинная прозрачность языка, более простые и эффективные реализации и лучшая развязка.

Вот заявленные цели RMI из документации

Цели поддержки распределенных объектов в Java-программировании язык:

  • Поддержка бесшовного удаленного вызова для объектов на разных виртуальных машинах
  • Поддержка обратных вызовов с серверов на апплеты
  • Интеграция распределенной объектной модели в язык программирования Java естественным образом при сохранении большей части программирования Java семантика языкового объекта
  • Сделайте различия между моделью распределенных объектов и объектной моделью локальной платформы Java
  • Сделать написание надежных распределенных приложений максимально простым
  • Сохранять безопасность типов, обеспечиваемую средой выполнения платформы Java
  • Поддержка различной ссылочной семантики для удаленных объектов; например, живые (непостоянные) ссылки, постоянные ссылки и ленивые активация
  • Поддерживать безопасную среду платформы Java, предоставляемую менеджерами безопасности и загрузчиками классов. В основе всех этих целей лежит общее требование, чтобы модель RMI была простой (простой в использовании) и естественно (хорошо вписывается в язык).

Ответ 3

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

Сегодня удаленные службы основаны на полной противоположности подхода RMI: REST и JSON.

Ответ 4

RMI - это совершенно противоположный случай, когда вам требуется жесткая привязка, настолько плотная, что кажется локальным вызовом метода. Если вы этого не хотите, не используйте его. Вся парадигма RPC предназначена не для всех, в том числе и для меня, хотя я написал книгу о RMI, но у каждого инструмента есть свои возможности. Например, Java EE построена на модели RMI.