EJB3 с пружиной - PullRequest
       46

EJB3 с пружиной

2 голосов
/ 01 июня 2010

Я понял, что если я использую EJB в контексте Spring, я получаю все те же преимущества, как если бы я использовал его в «чистой» среде EJB3, это правда? Я погуглил, но не могу найти однозначного и ясного ответа.

Например, допустим, у меня есть сессионный компонент, который обновляет некоторые таблицы в базе данных и выдает системное исключение. В «чистой» среде EJB3 транзакция откатывается. Что, если я, например, @Autowire этого бина использую Spring, Spring заботится об обработке транзакций так же, как и контейнер EJB3? Или что? Может быть, требуется какая-то конкретная конфигурация или она полностью «автоматическая»?

Ответы [ 4 ]

6 голосов
/ 01 июня 2010

Я понял, что если я использую EJB в Весенний контекст, я получаю все то же самое выгоды, как будто я использовал его в "чистая" среда EJB3, это правда?

Обычно вы используете либо POJO + Spring , либо EJB3. Я немного озадачен тем, что вы подразумеваете под "EJB весной" ...

POJO + Spring и EJB3 сейчас довольно близки и имеют те же возможности, когда дело доходит до декларативного управления транзакциями .

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

На самом деле Spring и EJB3 зависят от других спецификаций. Важными из них являются: JPA ( постоянство ), JTA (распределенная транзакция), JMS ( обмен сообщениями ), JDBC ( источники данных ). Хорошая поддержка этому существует в двух технологических стеках.

Обе технологии стали очень гибкими, и вы можете выбирать, использовать или нет. Таким образом, вы можете иметь EJB3 в приложении. сервер и быть очень легким. Или вы можете использовать Spring со всеми модулями, которые почти так же тяжелы, как полноценное приложение. сервер.

Я думаю, что модель EJB3 все еще немного богаче, с такими вещами, как удаленное взаимодействие, сессионные компоненты с состоянием (SFSB), управляемые контейнером транзакции и расширенный контекст персистентности. Плюс возможная поддержка кластеризации в зависимости от приложения. сервер. Но это расширенные функции, которые используются редко (и IMO требует опыта).

См. EJB3 против пружины

3 голосов
/ 01 июня 2010
Spring

имеет много функций, одна из которых - управление транзакциями , которая использует общую абстракцию для всех различных реализаций orm (jpa, raw hibernate, jdbc, jdo и т. Д.). Поведение по умолчанию состоит в том, что в транзакционном методе исключение времени выполнения вызывает откат (что, вероятно, то, что вам нужно), но вы также можете точно настроить правила отката .

Однако для этого не требуется EJB. Если вы не используете EJB (без сохранения состояния, с состоянием, mdbs), JPA будет достаточно для этого, и поддержка spring jpa превосходна. В 90% случаев пружина предоставит все необходимое без EJB.


EDIT:

прочитайте это о Интеграция Spring EJB

2 голосов
/ 08 июня 2010

Я получил очень хорошие ответы со ссылками на статьи, и из тех, которые я скомпилировал, я понял, что да, сессионные компоненты работают одинаково, независимо от того, используются ли они с Spring или без, пока компоненты определены в Весенний контекст с <jee:jndi-lookup>. Также нашел хорошую, простую статью об этом: http://java.dzone.com/articles/ejb-30-and-spring-25

Однако я не могу принять только один ответ, потому что для меня все они одинаково хороши, но ни один из них точно не соответствует сути :) Может быть, мой вопрос не был достаточно ясным, чтобы начать с ...

(Было предложено опубликовать это как ответ на мой собственный вопрос)

2 голосов
/ 01 июня 2010

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

Ничто в жизни не является действительно "автоматическим". Вы должны сказать коду, что вы хотите когда-нибудь.

Реальный вопрос: почему вы думаете, что вам нужны и EJB, и Spring? Все, что вы можете сделать с EJB, можно сделать с помощью POJO с Spring. Что EJB покупают здесь?

...