Như bạn biết, Quản lý giao dịch là một mối quan tâm chéo. Vì vậy, nó không phải là một ý tưởng tốt mã của bạn nằm rải rác về trong các mô-đun mà những mối quan tâm không phải là mối quan tâm chính của họ.
Nếu bạn đang sử dụng JTA UserTransaction trong môi trường không phải EJB, vì vậy JTA là sẵn có (Apache Tomcat không hỗ trợ JTA).
1 ° quy tắc
quản lý giao dịch Seam được kích hoạt theo mặc định cho tất cả các yêu cầu JSF (Seam 2.0+).
Tôi nghĩ Seam quản lý giao dịch âm thanh tốt hơn khi Giao dịch của Seam quản lý. Nó có nghĩa là Seam quan tâm, đằng sau hậu trường, gọi điện thoại bắt đầu và cam kết. Seam đóng vai trò của người quản lý giao dịch bằng cách sử dụng một Giám đốc Seam giao dịch
1 ° kịch bản: POJO + JTA sẵn (Apache Tomcat không hỗ trợ JTA) Quản lý
giao dịch được sử dụng bởi đường may: org.jboss.seam .transaction.UTtransaction
Enabled theo mặc định trong môi trường không EJB (chiến tranh) khi JTA sẵn (JBoss hỗ trợ JTA)
Nếu bạn đang sử dụng JPA EntityManager hoặc Hibernate Session, bạn cần đăng ký họ cho phép Seam quản lý ranh giới giao dịch
Xem 9.3. Seam-managed persistence contexts làm thế nào để thiết lập một Seam quản lý bối cảnh kiên trì (đúc bằng @In)
Sau đó tiêm một EntityManager (EntityManager) hoặc Session (Hibernate) bằng cách sử dụng @In (scoped để 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
}
}
Đằng sau hậu trường, Seam giao dịch quản lý tranh thủ sự EntityManager (JPA) hoặc Session (Hibernate) trong hoạt động JTA UserTransaction, bằng cách gọi joinTransaction phương pháp
2 ° kịch bản: POJO + RESOURCE_LOCAL (hoặc Hibernate hay JPA) giao dịch
quản lý giao dịch được sử dụng bởi Seam (JPA): org.jboss.seam.transaction.EntityTransaction
TRANSA ction quản lý được sử dụng bởi Seam (Hibernate): org.jboss.seam.transaction.HibernateTransaction
Xem 9.3. Seam-managed persistence contexts làm thế nào để thiết lập một Seam quản lý bối cảnh kiên trì (đúc bằng @In)
Đằng sau hậu trường, giao dịch Seam Quản lý chăm sóc gọi bắt đầu và cam kết trong công nghệ cơ bản bằng cách sử dụng proxy
3 ° kịch bản: EJB
giao dịch quản lý được sử dụng bởi Seam: org.jboss.seam.transaction.CMTTransaction
Bật theo mặc định trong môi trường EJB. Hãy cẩn thận, trong trường hợp đó, Seam không kiểm soát giao dịch được quản lý bởi container.
regards,
cho tên đầy đủ của @Transactional – Bozho
org.jboss.seam.annotations.Transactional – Damo