2014-11-19 15 views

Trả lời

1

@MessageDriven (MDB) là một phần của API JMS. JMS có tất cả các loại tính năng bổ sung khi nói đến việc thử lại khi sử dụng tin nhắn không thành công, hỗ trợ giao dịch và cũng cho phép bạn kiểm soát hàng đợi tin nhắn.

@Asynchronous chú thích không được giới thiệu cho java-ee-6 (ejb 3.1).

Giả sử các usecase là đơn giản gọi không đồng bộ trong một java-ee-6 thùng trở lên, sử dụng @Asynchronous (arun guptas blog on this)

Nếu bạn cần thêm ngoài đó, JMS có thể là một lựa chọn

6

@Asynchronous là chỉ thích hợp nếu giao dịch bên ngoài cần khởi chạy một vài tác phẩm song song và sau đó chờ đợi tất cả (hoặc khởi chạy một tác phẩm đơn lẻ trong nền, thực hiện một số công việc ở nền trước và sau đó đợi công việc nền). @Asynchronous không thích hợp cho giao dịch "cháy và quên" vì vùng chứa có thể bị hỏng trước khi công việc không đồng bộ bắt đầu thực hiện (theo ý kiến ​​của tôi, vô hiệu các phương thức không đồng bộ EJB rất hiếm khi hữu ích, có thể là như cập nhật bộ đệm trong bộ nhớ). Nếu bạn muốn đảm bảo công việc sẽ xảy ra một cách không đồng bộ mà không phải đợi nó hoàn thành, thì bạn nên gửi một tin nhắn tới MDB hoặc lên lịch hẹn giờ EJB.

+0

Cách vùng chứa có thể "lỗi"? – Dherik

+0

Quá trình JVM bị giết, máy đột ngột mất điện, v.v. –

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