Есть ли что-то аналогичное аннотации Springs @Transactional, доступной в Java EE 6?

в моей компании использование Spring framework не рекомендуется, и вместо этого продвигается Java EE 6. Но недавно я прочитал о Springs @Transactional аннотации Использование @Transactional и думаю, что это может быть очень полезным для нашего кода.

насколько я понимаю метод, аннотируемый @Transactional будет либо повторно использовать уже существующую транзакцию, либо открывать новую транзакцию, если при вызове этого метода не существует активной транзакции. Есть что-то аналогичное (например, аналогичная аннотация), доступная в Java EE 6?

4 ответов


компоненты EJB имеют этот транзакционный контроль в Java EE. Вы можете установить транзакцию метода на EJB, который требуется, RequiresNew, поддерживает и т. д. Вы почти всегда будете использовать компонент сеанса без состояния (@Stateless) для требований, которые вы описываете:

> @TransactionAttribute(value=[MANDATORY,
> REQUIRED, REQUIRES_NEW, SUPPORTS,
> NOT_SUPPORTED, NEVER]

Required, по умолчанию, будет повторно использовать существующий txn, если он работает, или создать новый, если его нет. Java EE 6 поставляется с EJB 3.1, поэтому вам даже не нужен бизнес-интерфейс, и вы можете упакуйте EJBs в файл WAR, Если хотите. Поэтому вы используете EJBs, но разработчику их гораздо проще интегрировать, если все, что вам нужно, это поддержка JTA.

Это полезная шпаргалка для аннотаций EJB и есть множество руководств, если Вы Google для них.


Java EE 7 теперь содержит @пакета javax.деловой.Транзакционный. Он действует так же, как и весенняя аннотация.


в Java EE 6 можно аннотировать сам класс bean EJB или отдельные бизнес-методы в EJB (оба сеанса EJBs и MDBs) с помощью TransactionAttribute Примечание. Это можно применить только при использовании управляемых проводок контейнера.

допустимые значения для аннотации определяются в TransactionAttributeType аннотация:

  • NOT_SUPPORTED
  • поддерживает
  • требуются
  • REQUIRES_NEW
  • обязательно
  • никогда

семантика этих значений не изменилась по сравнению с более ранними версиями спецификации EJB. Эти аннотации доступны с Java EE 5, когда аннотации были введены в EJB 3.0. Обратите внимание, что некоторые значения не применимы в некоторых сценариях-например, MDBs не может быть аннотирован ничем, кроме REQUIRED и NOT_SUPPORTED; любые другие значения не будут иметь смысла для управляемых контейнером trasactions для MDB (в конце концов, контейнер должен либо создать транзакцию, либо не должен в этом случае).

Если вы хотите быстрый обзор того, как атрибуты транзакции сравниваются между моделями EJB 3.0 и Spring, я с удовольствием укажу вам в направлении Стратегии Проектирования Транзакций Java. Отказ от ответственности: я просто довольный читатель этой книги.


EJB (без состояния и с состоянием) являются транзакционными компонентами по умолчанию, требуется транзакционное свойство по умолчанию, аналогичное spring..