2010-06-01 3 views
2

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

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

+0

Похоже, вы ответили на свой вопрос. Я предлагаю вам опубликовать ваше «обновление» в качестве ответа. Таким образом, вы можете принять его через несколько дней. – ewernli

+0

@ewernli: Хорошо, сделал то, что вы предложили – fish

ответ

2

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

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

(было высказано предположение о том, что я отправляю это как ответ на мой собственный вопрос)

+0

+1 для вашего расследования – ewernli

+0

u получил себя +1 – user1622058

2

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

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

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

+1

«Вы должны настроить его для этого»: чтобы быть справедливым: в обоих есть разумные значения по умолчанию. весной: определить platformtransactionmanager, использовать аннотации @transactional, и вы работаете, это не так много конфигурации. –

+1

Можете ли вы использовать удаленную связь с POJO весной? – fish

+0

Да: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html –

3

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

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


EDIT:

прочитать о Spring EJB integration

6

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

Вы обычно используют либо POJO + Spring или EJB3. Я немного смущает то, что вы имеете в виду под «EJB весна» ...

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

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

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

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

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

См EJB3 vs Spring

+0

Хорошо, что можно использовать сессионные бобы, используя Spring. Это хороший вопрос, если есть какой-то момент в этом, но до сих пор у меня есть две причины: 1) «правила», которые требуют, чтобы бэкэнд-услуги были EJB. 2) С помощью контекстных файлов Spring легко издеваться над некоторыми службами, которые используются EJB. Я не понимаю, как Spring использует EJB, и я теряю некоторые «автоматические» функции контейнера. – fish

+0

@фиш Ах! Поэтому ваш вопрос был действительно о том, как интегрировать EJB с Spring. Я понял, что это плохо. Глядя на http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html, я считаю, что Spring запускает транзакцию JTA, и EJB просто зачисляется на нее как если они отмечены символом «REQUIRED», который является значением по умолчанию. Таким образом, это должно работать прозрачно. Но если бы я был вами, я бы сделал несколько тестов, чтобы быть уверенным в любом случае. – ewernli