Есть ли что-то аналогичное аннотации 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..