EJB là các thành phần giao dịch. Giao dịch có thể được quản lý bởi chính máy chủ ứng dụng (CMT - giao dịch do container quản lý), hoặc tự tay bạn trong EJB (BMT - giao dịch được quản lý bằng bean).
EJB hỗ trợ giao dịch phân phối thông qua đặc tả JTA. Giao dịch phân phối được điều khiển bằng cách sử dụng UserTransaction
, có phương thức begin
, commit
, rollback
.
Với CMT, máy chủ ứng dụng bắt đầu, cam kết và khôi phục giao dịch (theo số transaction annotations) cho bạn và bạn không được phép can thiệp. Điều này có nghĩa là bạn không được truy cập vào số UserTransaction
trong trường hợp này. Tuy nhiên, với BMT, bạn làm điều đó theo cách thủ công và bạn tự kiểm soát giao dịch bằng cách sử dụng UserTransaction
.
Bây giờ hãy chuyển đến EntityManager
. Việc triển khai JPA có thể được sử dụng trong máy chủ ứng dụng hoặc độc lập. Nếu sử dụng độc lập, bạn cần sử dụng EntityManage.getTransaction
để tự mình phân định giao dịch JDBC. Nếu được sử dụng trong một máy chủ ứng dụng, thì EntityManager
đã phối hợp với người quản lý giao dịch phân phối JTA một cách minh bạch cho bạn.
Hầu hết thời gian, bạn sử dụng CMT với chú thích @Required
trên EJB. Điều này có nghĩa là bạn không cần truy cập vào số UserTransaction
cũng không phải EntityManager.getTransaction
. Ứng dụng. máy chủ bắt đầu và cam kết giao dịch, nhưng cũng phải cẩn thận để khôi phục nếu ngoại lệ được nâng lên. Đây là những gì tôi muốn giới thiệu cho mặt tiền của bạn.
(Có nhiều sự tinh tế hơn, chẳng hạn như PersistenceContextType
hoặc hướng dẫn thủ công của người quản lý thực thể trong giao dịch phân phối với EntityManager.joinTransaction
, nhưng đó chỉ khi bạn sử dụng công nghệ theo các cách khác nhau làm mặc định).
Bài viết hay để có ý tưởng tốt hơn về Giao dịch EJB, IMO, phải đọc http://entjavastuff.blogspot.com/2011/02/ejb-transaction-management-going-deeper.html – thirdy