Wie Sie wissen, ist das Transaktionsmanagement ein Querschnittsthema. Es ist also keine gute Idee, dass Ihr Code in Modulen verstreut ist, in denen diese Bedenken nicht ihre Hauptanliegen sind.
Wenn Sie eine JTA UserTransaction in einer Nicht-EJB-Umgebung verwenden, ist JTA verfügbar (Apache Tomcat unterstützt JTA nicht).
1 ° Szenario: POJO + JTA avaliable (Apache Tomcat nicht unterstützt JTA)
Manager-Transaktion, die von Seam: org.jboss.seam .transaction.UTtransaction
standardmäßig in nicht-EJB-Umgebung (Kriegs-) aktiviert, wenn JTA verfügbar (JBoss Support JTA)
Wenn Sie JPA EntityManager oder Hibernate Session verwenden, müssen Sie sich registrieren zu können Seam verwalten Transaktionsgrenzen
Siehe 9.3. Seam-managed persistence contexts, wie eine Naht gesteuerter Persistenz Kontext einzurichten (Injected von @in verwenden)
Dann injiziert eine EntityManager (EntityManager) oder Session (Hibernate) von @in (scoped zu ScopeType verwenden.GESPRÄCH)
@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
}
}
Hinter den Kulissen Seam Transaction Manager die EntityManager (JPA) oder Session (Hibernate) in der aktiven JTA Usertransaction anwerben, durch den Aufruf joinTransaction Methode
2 ° Szenario: POJO + RESOURCE_LOCAL (Entweder Hibernate oder JPA) Transaktion
Manager-Transaktion, die von Seam (JPA): org.jboss.seam.transaction.EntityTransaction
Transa ction-Manager, die von Seam (Hibernate): org.jboss.seam.transaction.HibernateTransaction
9.3. Seam-managed persistence contexts Sehen Sie, wie eine Naht gesteuerter Persistenz Kontext einzurichten (Injected von @in verwenden)
Hinter den Kulissen Seam Transaktion Manager kümmert sich um mithilfe von Proxys
3 ° Szenario in der zugrunde liegenden Technologie Aufruf beginnen und sich verpflichten: EJB
Transaction Manager, die von Seam: org.jboss.seam.transaction.CMTTransaction
In der EJB-Umgebung standardmäßig aktiviert. Achten Sie darauf, dass Seam in diesem Fall keine Container-gesteuerte Transaktion steuert.
Grüßen,
geben den vollständig qualifizierten Namen von @Transactional – Bozho
org.jboss.seam.annotations.Transactional – Damo