2011-06-21 47 views
6

Trong công ty của tôi, việc sử dụng khung công tác Spring không được khuyến khích và thay vào đó Java EE 6 được quảng bá. Nhưng gần đây tôi đã đọc về chú thích của Springs @Transactional tại Using @Transactional và nghĩ rằng điều này có thể thực sự hữu ích cho mã của chúng tôi.Có điều gì tương tự với chú thích @Transactional của Springs có sẵn trong Java EE 6 không?

Theo tôi hiểu phương thức được chú thích với @Transactional sẽ sử dụng lại giao dịch đã có hoặc mở giao dịch mới nếu không có giao dịch hoạt động tồn tại khi gọi phương thức đó. Có điều gì đó tương tự (ví dụ: chú thích tương tự) có sẵn trong Java EE 6 không?

Trả lời

9

thành phần EJB có quyền kiểm soát giao dịch này trong Java EE. Bạn có thể thiết lập các giao dịch của một phương pháp trên EJB được yêu cầu, RequiresNew, hỗ trợ, vv Bạn sẽ hầu như luôn luôn sử dụng một Stateless Session Bean (@Stateless) cho các yêu cầu bạn mô tả:

> @TransactionAttribute(value=[MANDATORY, 
> REQUIRED, REQUIRES_NEW, SUPPORTS, 
> NOT_SUPPORTED, NEVER] 

buộc, mặc định , sẽ tái sử dụng một txn hiện có nếu có một lần chạy hoặc tạo một cái mới nếu không có. Java EE 6 tàu với EJB 3.1, vì vậy bạn thậm chí không cần giao diện kinh doanh và bạn có thể đóng gói các EJB trong tệp WAR nếu bạn muốn. Do đó bạn đang sử dụng các EJB, nhưng với nhà phát triển, chúng dễ tích hợp hơn nhiều nếu tất cả những gì bạn muốn là hỗ trợ JTA.

Đây là một useful cheat sheet cho chú thích EJB và có nhiều hướng dẫn nếu bạn sử dụng Google cho chúng.

0

EJB của (stateless và stateful) là những thành phần giao dịch mặc định, mặc định tài sản giao dịch là cần thiết, tương tự như mùa xuân ..

3

Trong Java EE 6, người ta có thể chú thích chính lớp EJB bean hoặc các phương thức nghiệp vụ riêng lẻ trong EJB (cả hai phiên EJB và MDB) với chú thích TransactionAttribute. Điều này chỉ có thể được áp dụng nếu bạn sử dụng các giao dịch được quản lý bởi vùng chứa.

giá trị hợp lệ cho các chú thích được định nghĩa trong TransactionAttributeType chú thích:

  • NOT_SUPPORTED
  • HỖ TRỢ
  • YÊU CẦU
  • REQUIRES_NEW
  • BẮT BUỘC
  • KHÔNG BAO GIỜ

Ngữ nghĩa của các giá trị này không thay đổi so với các phiên bản trước của đặc tả EJB. Các chú thích này có sẵn từ Java EE 5, khi các chú thích được giới thiệu trong EJB 3.0. Lưu ý rằng, một số giá trị không được áp dụng trong các trường hợp nhất định - ví dụ MDBs không thể được chú thích với bất kỳ thứ gì nhưng REQUIRED và NOT_SUPPORTED; bất kỳ giá trị nào khác sẽ không có ý nghĩa đối với các giao dịch quản lý vùng chứa cho MDB (sau khi tất cả, vùng chứa phải tạo một giao dịch hoặc không phải là giao dịch, trong trường hợp này).

Nếu bạn muốn có tổng quan nhanh về cách các thuộc tính giao dịch so sánh giữa các mô hình EJB 3.0 và Spring, tôi sẵn lòng chỉ cho bạn theo hướng Java Transaction Design Strategies. Disclaimer: Tôi chỉ là một người đọc hài lòng của cuốn sách này.

Các vấn đề liên quan