С Spring в состоянии использовать транзакции точно так же, как EJB. Для меня Spring может заменить требование использования EJB. Может ли кто-нибудь сказать мне, какие дополнительные преимущества использования EJB?Весна против EJB. Может ли Spring заменить EJB?
ответ
Весна была разработана как альтернатива EJB с самого начала, поэтому ответ, конечно же, вы можете использовать Spring вместо EJB.
Если у вас есть «преимущество» от использования EJB, я бы сказал, что это будет зависеть от навыков вашей команды. Если у вас нет опыта Spring и много опыта EJB, то, возможно, придерживаться EJB 3.0 - хороший ход.
Серверы приложений, написанные для поддержки стандарта EJB, теоретически могут быть перенесены с одного совместимого сервера приложений Java EE на другой. Но это означает, что вы избегаете каких-либо расширений, связанных с конкретными поставщиками, которые блокируют вас для одного поставщика.
Пружинные порты легко соединяются между серверами приложений (например, WebLogic, Tomcat, JBOSS и т. Д.), Поскольку они не зависят от них.
Однако вы заперты в Spring.
Весна поощряет хорошие методы проектирования OO (например, интерфейсы, слои, разделение проблем), которые приносят пользу любой проблеме, к которой они прикасаются, даже если вы решили переключиться на 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 расположена поверх серверов приложений и библиотек служб. Код интеграции службы (например, шаблоны доступа к данным) находится в структуре и предоставляется разработчикам приложений. Напротив, структура EJB 3 интегрирована в сервер приложений, а код интеграции службы инкапсулирован за интерфейс. Таким образом, поставщики EJB 3 могут оптимизировать производительность и опыт разработчиков, работая на уровне сервера приложений. Например, они могут тесно привязать механизм JPA к управлению транзакциями JTA. Другим примером является поддержка кластеризации, которая прозрачна для разработчиков EJB 3.
EJB-не является совершенным, хотя, по-прежнему отсутствуют некоторые функции (например вливание, не являющиеся управляемые компоненты, такие как простой POJOs).
Образовательный ответ, но мне интересно, почему/когда вам нужно вводить простой POJO вместо инициализации нового? –
Для целей тестирования. – Philip
Очки Паскаля действительны. Тем не менее, в пользу Весны.
Спецификация EJB на самом деле немного свободна, и поэтому различные поведения могут наблюдаться с помощью разных серверов приложений. Конечно, это не относится к большинству случаев, но у меня была такая проблема для некоторых «темных углов».
Весна имеет много дополнительных положительных героев, таких как весенний тест, AOP, MVC, интеграция JSF и т. Д. EJB имеет некоторые из этих (например, перехватчики), но, на мой взгляд, они не так развиты.
В заключение, это зависит главным образом от вашего точного дела.
Возможно, что-то вроде: «Весна нужна только для сервлет-движка * будет более точной (EJB может использоваться в любом контейнере JEE, сервлет-движке! = Контейнер JEE). –
Ну, технически, Spring не требует и сервлет-двигателя. Например, Spring-тест использует контекст в памяти. – Bozho
Ну, технически, EJB не требуют отдельного контейнера, если вы идете этим путем. Начиная с EJB 3.1 существует стандартный API 'EJBContainer.createEJBContainer()' для использования встроенного контейнера. Итак, ваше утверждение неверно. –
Spring предназначен для дополнения EJB, а не для его замены. Spring - это слой поверх EJB. Как известно, кодирование EJB выполняется с использованием API, что означает, что мы должны внедрять все в API, используя среду Spring. Мы можем создать код котельной плиты, а затем просто взять эту тарелку, добавить к ней кое-что, тогда все будет сделано. Внутренняя пружина связана с EJB - Весна не будет существовать без EJB.
Главное преимущество использования пружины заключается в том, что между классами нет связи.
вы совершенно не правы, извините –
извините @sasi это даже не близко к правильному или приятному ответу ....... – Prakash
«Весна не существовала бы без EJB». Человек, ты на самом деле? Вы когда-нибудь в своей жизни использовали «\ @Stateless» в объявлении EJB или использовали аннотацию \ @EJB для инъекций? Как вы думаете, они будут работать в Jetty или Tomcat? Как вы думаете, что операции управляются весной? Вы знаете, что вы можете развернуть приложение Spring прямо в контейнер сервлетов? – 99Sono
Отличное объяснение. И +1 для не только ссылки на Google или спецификации ссылок. – cbmeeks
Так приятно вас сказать, особенно учитывая, что ответ 3,5 года. – duffymo
По-моему, «блокировка» слишком сильная фраза для описания Весны. В конце концов, Spring разработала, чтобы склеить все вместе, а не заменять их, вы всегда можете выбрать, с чем хотите интегрироваться. Кроме того, у всех есть блокировки, даже самые простые Apache Commons блокируют нас, но мы все еще используем его каждый день. –