Поскольку Spring может использовать транзакции точно так же, как EJB . Для меня Spring может заменить требование использования EJB. Может ли кто-нибудь сказать мне, каковы дополнительные преимущества использования EJB?
Ответы:
Spring был разработан как альтернатива EJB с самого начала, поэтому ответ, конечно, можно использовать вместо EJB.
Если есть «преимущество» в использовании EJB, я бы сказал, что это будет зависеть от навыков вашей команды. Если у вас нет опыта в Spring и большой опыт работы с EJB, то, возможно, придерживаться EJB 3.0 - хороший шаг.
Серверы приложений, написанные для поддержки стандарта EJB, теоретически могут быть перенесены с одного совместимого сервера приложений Java EE на другой. Но это означает, что нужно держаться подальше от любых расширений для конкретных поставщиков, которые привязывают вас к одному поставщику.
Spring легко переносится между серверами приложений (например, WebLogic, Tomcat, JBOSS и т. Д.), Поскольку не зависит от них.
Однако вы заперты в Spring.
Spring поощряет хорошие методы объектно-ориентированного проектирования (например, интерфейсы, уровни, разделение задач), которые приносят пользу любой проблеме, с которой они сталкиваются, даже если вы решите переключиться на Guice или другую структуру DI.
Обновление: этому вопросу и ответу пять лет в 2014 году. Надо сказать, что мир программирования и разработки приложений сильно изменился за это время.
Это больше не просто выбор между Java или C #, Spring или EJB. С vert.x можно вообще отказаться от Java EE. Вы можете писать высокомасштабируемые многоязычные приложения без сервера приложений.
Обновление: сейчас март 2016 года. Spring Boot предлагает еще лучший способ писать приложения без серверов приложений Java EE. Вы можете создать исполняемый JAR-файл и запустить его на JVM.
Интересно, продолжит ли Oracle поддерживать спецификацию Java EE. Веб-сервисы пришли на смену EJB. Решение EJB мертво. (Только мое мнение.)
Во-первых, позвольте мне четко сказать, я не говорю, что вам не следует использовать Spring, но, поскольку вы просите о некоторых преимуществах, вот как минимум два из них:
EJB 3 является стандартом, а Spring - нет (это стандарт де-факто, но это не одно и то же), и это не изменится в обозримом будущем. Хотя вы можете использовать среду Spring с любым сервером приложений, приложения Spring заблокированы как в самой Spring, так и в конкретных службах, которые вы выбираете для интеграции в Spring.
Фреймворк Spring находится поверх серверов приложений и сервисных библиотек. Код интеграции службы (например, шаблоны доступа к данным) находится в структуре и доступен разработчикам приложений. В отличие от этого, структура EJB 3 интегрирована в сервер приложений, а код интеграции сервисов инкапсулируется за интерфейсом. Таким образом, поставщики EJB 3 могут оптимизировать производительность и удобство разработки, работая на уровне сервера приложений. Например, они могут тесно связать механизм JPA с управлением транзакциями JTA. Другой пример - поддержка кластеризации, которая прозрачна для разработчиков EJB 3.
EJB 3 не идеален, в нем все еще отсутствуют некоторые функции (например, внедрение неуправляемых компонентов, таких как простые POJO).
Очки Паскаля действительны. Однако в пользу Spring есть следующие аргументы.
Спецификация EJB на самом деле немного расплывчата, поэтому на разных серверах приложений можно наблюдать разное поведение. Конечно, в большинстве случаев это не так, но у меня была такая проблема с некоторыми «темными углами».
Spring имеет много дополнительных плюсов, таких как Spring-test, AOP, MVC, интеграция JSF и т. Д. EJB имеет некоторые из них (например, перехватчики), но, на мой взгляд, они не так уж и разработаны.
В заключение, это в основном зависит от вашего конкретного случая.
EJBContainer.createEJBContainer()
API для использования встроенного контейнера. Так что все же ваше утверждение неверно.
Spring предназначен для дополнения EJB, а не для его замены. Spring - это слой поверх EJB. Как мы знаем, кодирование EJB выполняется с использованием API, что означает, что мы должны реализовать все в API, используя среду Spring. Мы можем создать шаблонный код, затем просто взять эту табличку, добавить к ней что-нибудь, и все будет готово. Внутренне Spring связан с EJB - Spring не существовал бы без EJB.
Основное преимущество использования Spring в том, что между классами нет никакой связи.