Как вы знаете, управление транзакциями - это комплексная задача. Так что не рекомендуется разбросать код по модулям, где эти проблемы не являются их основной заботой.
Если вы используете JTA UserTransaction в среде, отличной от EJB, значит, JTA доступен (Apache Tomcat не поддерживает JTA).
Правило 1 °
Управление стыковочными транзакциями включено по умолчанию для всех запросов JSF (Seam 2.0+).
Я думаю, что Управление транзакциями швов лучше, чем Транзакции, управляемые швом. Это означает, что за кулисами Seam заботится о вызовах begin и commit. Seam играет роль менеджера транзакций, используя Seam Transaction Manager.
Сценарий 1 °: доступен POJO + JTA (Apache Tomcat не поддерживает JTA)
Диспетчер транзакций, используемый Seam: org.jboss.seam.transaction.UTtransaction
Включено по умолчанию в среде без EJB (война), когда доступен JTA (JBoss поддерживает JTA)
Если вы используете JPA EntityManager или Hibernate Session, вам необходимо зарегистрировать их, чтобы позволить Seam управлять границами транзакций.
См. 9.3. Контексты сохраняемости с управлением швами, как настроить контекст сохраняемости с управляемым швом (вводится с помощью @In)
Затем введите EntityManager (EntityManager) или сеанс (Hibernate) с помощью @In (с областью действия ScopeType.CONVERSATION)
@Name("businessService")
public class BusinessServiceImpl implementes BusinessService {
@In
private EntityManager entityManager;
public void doSomething() {
// You do not need to call entityManager().getTransaction().begin();
// because Seam Transaction Manager takes care of it
// By using proxies
// Therefore, if you call entityManager().getTransaction().begin()
// You will get IllegalStateException
// Some EntityManager operations persist, find etc
// You do not need to call entityManager().getTransaction().commit();
// because Seam Transaction Manager takes care of it
// By using proxies
}
}
За кулисами диспетчер транзакций стыков подключает EntityManager (JPA) или сеанс (Hibernate) к активной пользовательской транзакции JTA, вызывая метод joinTransaction
сценарий 2 °: транзакция POJO + RESOURCE_LOCAL (в спящем режиме или JPA)
Диспетчер транзакций, используемый Seam (JPA): org.jboss.seam.transaction.EntityTransaction
Диспетчер транзакций, используемый Seam (Hibernate): org.jboss.seam.transaction.HibernateTransaction
См. 9.3. Контексты сохраняемости с управлением швами, как настроить контекст сохраняемости с управляемым швом (вводится с помощью @In)
За кулисами Seam Transaction Manager заботится о вызове begin и commit в базовой технологии с помощью прокси-серверов.
Сценарий 3 °: EJB
Диспетчер транзакций, используемый Seam: org.jboss.seam.transaction.CMTTransaction
Включено по умолчанию в среде EJB. Будьте осторожны, в этом случае Seam не контролирует транзакцию, управляемую контейнером.
С уважением,
person
Arthur Ronald
schedule
10.12.2009