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

Spring против EJB. Может ли Spring заменить EJB?

Так как Spring может использовать транзакции так же, как EJB. Для меня Spring может заменить требование использования EJB. Может ли кто-нибудь сказать мне, какие дополнительные преимущества использования EJB?

4b9b3361

Ответ 1

Spring был разработан как альтернатива EJB с самого начала, поэтому ответ, конечно, вы можете использовать Spring вместо EJB.

Если есть "преимущество" использования EJB, я бы сказал, что это будет зависеть от навыков вашей команды. Если у вас нет опыта Spring и большого количества опыта EJB, то, возможно, прилипание к EJB 3.0 - хороший ход.

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

Spring легко переносится между серверами приложений (например, WebLogic, Tomcat, JBOSS и т.д.), потому что это не зависит от них.

Однако вы заблокированы в Spring.

Spring поощряет хорошие методы проектирования OO (например, интерфейсы, уровни, разделение проблем), которые приносят пользу любой проблеме, к которой они прикасаются, даже если вы решите переключиться на Guice или другую инфраструктуру DI.

Обновление. Этот вопрос и ответ пять лет в 2014 году. Надо сказать, что мир программирования и разработки приложений в то время сильно изменился.

Это уже не просто выбор между Java или С#, Spring или EJB. С vert.x можно вообще отказаться от Java EE. Вы можете писать очень масштабируемые, полиглот без сервера приложений.

Обновление: сейчас март 2016 года. Spring Boot предлагает еще лучший способ писать приложения без серверов приложений Java EE. Вы можете создать исполняемый JAR и запустить его на JVM.

Интересно, продолжит ли Oracle поддерживать спецификацию Java EE. Веб-службы перешли на EJB. Решение EJB мертво. (Только мое мнение.)

Ответ 2

Во-первых, позвольте мне сказать это четко, я не говорю, что вы не должны использовать Spring, но, поскольку вы просите о некоторых преимуществах, вот как минимум два из них:

  • EJB 3 является стандартным, а Spring не является (это де-факто стандарт, но это не одно и то же), и это не изменится в обозримом будущем. Хотя вы можете использовать фреймворк Spring с любым сервером приложений, Spring приложения блокируются как в самом Spring, так и в определенных сервисах, которые вы хотите интегрировать в Spring.

  • Структура Spring располагается поверх серверов приложений и библиотек служб. Код интеграции службы (например, шаблоны доступа к данным) находится в структуре и предоставляется разработчикам приложений. Напротив, структура EJB 3 интегрирована в сервер приложений, а код интеграции службы инкапсулирован за интерфейс. Таким образом, поставщики EJB 3 могут оптимизировать производительность и опыт разработчиков, работая на уровне сервера приложений. Например, они могут тесно привязать механизм JPA к управлению транзакциями JTA. Другим примером является поддержка кластеризации, которая прозрачна для разработчиков EJB 3.

EJB 3 не является совершенным, хотя он все еще не имеет некоторых функций (например, инъекции не управляемых компонентов, таких как простые POJO).

Ответ 3

Паскальные точки действительны. Однако в пользу Spring входят следующие.

  • Спецификация EJB на самом деле немного свободна, и поэтому различные поведения могут наблюдаться на разных серверах приложений. Конечно, для большинства случаев это будет неверно, но у меня была такая проблема для некоторых "темных углов".

  • Spring имеет много дополнительных полезных свойств, таких как spring -test, AOP, MVC, JSF-интеграция и т.д. EJB имеет некоторые из этих (например, перехватчиков), но, на мой взгляд, они не так развиты.

В заключение, это зависит главным образом от вашего конкретного случая.

Ответ 4

Spring предназначен для дополнения EJB, а не для его замены. Spring - это слой поверх EJB. Как известно, кодирование EJB выполняется с использованием API, а это значит, что мы должны реализовать все в API, используя структуру Spring. Мы можем создать код котельной плиты, а затем просто взять эту тарелку, добавить к ней кое-что, а потом все сделать. Внутренний Spring связан с EJB - Spring не будет существовать без EJB.

Основное преимущество использования Spring заключается в том, что между классами нет связи.