По-прежнему полезно реализовать EJB с RMI, когда вы можете реализовать веб-службы (SOA/REST)?

Это может показаться похожим на этот, но это не так.

Я как бы понимаю EJB и RMI, и некоторое время я работаю с веб-сервисами под SOA. Я хочу знать, почему полезно работать с EJB, предоставляя удаленные интерфейсы под RMI вместо публикации веб-сервисов (SOA/REST, но главным образом SOA). Я не спрашиваю, какой из них лучше, просто я хочу знать очень хорошую причину, почему я должен предпочесть реализовать EJB с удаленными интерфейсами через веб-службы.

Я просмотрел много веб-страниц, но все выглядело устаревшим. До сих пор у меня есть то, что EJB, отображающий удаленные интерфейсы, лучше, чем WS, при интеграции с прежней системой Java. Если я хочу управлять транзакциями, я мог бы реализовать EJB с локальными интерфейсами. Также я не думаю, что выбор EJB над RMI более эффективен, чем интерфейс веб-службы.

Я прав? Что-то мне не хватает?

В самом деле, спасибо заранее.

Ответ 1

EJB лучше, если

  • вам необходимо выполнить количество вызовов, которые должны выполняться в одном транзакции (теоретически у нас есть транзакционные веб-службы, но не каждая реализация обеспечивает их), (stateful) EJBs светят, когда дело доходит до управления транзакциями. Практически в любое время, когда вам нужно, чтобы обеспечить работоспособность EJB было бы лучше, чем веб-сервис;
  • вам нужно работать - Web Службы медленные - они используют XML/JSON, проталкиваемую через HTTP, RMI Протокол IIOP, используемый EJB, более эффективен;
  • вам нужно подключиться к какой-либо унаследованной системе, которая использует устаревшую спецификацию для Java Web Services (уродливый материал Axis 1.0, несовместимый с JAX-WS), это может быть кошмар, чтобы соединить все с веб-службами, иметь дело с несовместимыми определениями WSDL, странные конверты SOAP. EJB обратно совместимы, старый EJB 2 может быть подключен без каких-либо проблем с EJB 3.1;
  • современные EJB (EJB 3.X) могут выставлять свой интерфейс в качестве службы JAX-WS SOAP/WSDL или службы REST JAX-RS, добавляя две или три простые аннотации

Почему (REST) ​​веб-сервисы так популярны? EJB можно подключать только к другому Java-приложению. Большинство современных Rich Internet Applications написаны на JavaScript, поэтому единственный способ связать их с любыми бэкэнд - это использовать какой-то веб-сервис (обычно REST + JSON). Для таких приложений EJB довольно бесполезны.

Ответ 2

Как клиент, так и служба должны быть написаны на Java, если вы используете RMI в качестве проводного протокола.

SOAP использует XML через HTTP, а REST использует чистый HTTP для связи между клиентом и сервисом. Любой конец разговора может быть написан на любом языке, который может отправлять соответствующие запросы по HTTP, что гораздо менее ограничительно.

Я думаю, что это одна из причин, по которой веб-службы через HTTP выигрывают над RMI. Простой и открытый выигрыш, каждый раз.

Ответ 3

Это разные вещи для разных целей.

EJB предназначены для использования в системе N-уровня, которая тесно связана, и вы контролируете все элементы. Они предлагают прямое кодирование на языке, используя то, что кажется обычным вызовом метода, и производительность LAN-типа по сравнению с IIOP или любым другим протоколом, который развернул поставщик EE.

SOAP/REST лучше всего использовать в Интернете или в B2B или в других ситуациях, когда вы не контролируете оба конца, и вам нужна свободная связь. Вы получаете гораздо более медленную производительность из-за всего XML, но вы также получаете стандартный отраслевой протокол в середине, который дает обеим сторонам защиту от проблем с одним источником.