Trong Java EE về cơ bản có 3 cơ chế để đối phó với asynchronicity:
- JMS
- CDI xe buýt kiện
- phương pháp chú thích @Asynchronous đậu stateless session
ewernli đã đưa ra một lời giải thích rất tốt về những lợi thế mà JMS có. Đó là một hệ thống rất đầy đủ tính năng, nhưng tất cả các tính năng này đều có chi phí một chút ở trên cao và phức tạp, ví dụ: quản lý các đối tượng hành chính có liên quan.
Ngoài ra, đặc điểm kỹ thuật của JMS chưa được cập nhật trong gần một thập kỷ. Nó vẫn đang được thực sự hữu ích cho thấy rất nhiều tầm nhìn xa mà đi vào thiết kế của API, nhưng đôi khi nó có thể cảm thấy một chút phức tạp. Cách thức mà các đối tượng quản trị như đích phải được xác định, cách mà bạn cần để có được kết nối, tạo một phiên, v.v., tất cả đều cảm thấy một chút thấp, cũ và phức tạp. Nhận tin nhắn mặc dù đã được đơn giản hóa rất nhiều với các tin nhắn điều khiển đậu, nhưng gửi có không.
Sau đó, vì một số lý do kỳ lạ kế thừa, các mô-đun web bị cấm nghe các điểm đến của JMS. Tất nhiên không có lý do gì cho điều đó nữa, nhưng nó nằm trong J2EE 1.3 và các thông số kỹ thuật sau này. Các máy chủ ứng dụng tương thích vẫn duy trì quy tắc này, nhưng tất cả chúng đều cung cấp cấu hình cụ thể cho nhà cung cấp để cho phép nó. Tuy nhiên điều này làm cho ứng dụng của bạn kém di động hơn.
Một tập con của các trường hợp sử dụng mà JMS đã được sử dụng trong lịch sử là lập trình dựa trên sự kiện rất đơn giản trong một ứng dụng duy nhất. Cho rằng xe buýt sự kiện CDI được cho là phù hợp hơn bây giờ, vì nó là một cách tiếp cận trọng lượng nhẹ hơn, hiện đại hơn và tổng thể nhẹ hơn.
Một nhóm nhỏ các trường hợp sử dụng khác mà JMS đã được sử dụng chỉ đơn giản là làm bất kỳ công việc nào một cách không đồng bộ. Đối với những người đó đôi khi được sử dụng để thực hiện một MDB mà sau đó sẽ chỉ unwrap các thông số từ tin nhắn và gọi một số phương pháp đậu phiên không trạng thái trực tiếp đi qua trong các thông số đó. Trong trường hợp này, mô hình nhắn tin là hoàn toàn không cần thiết và chỉ cần gọi một phương thức chú thích @Asynchronous là một cách tiếp cận đơn giản và trực tiếp hơn.
Nguồn
2010-12-05 22:01:02
Vì đôi khi mọi người không muốn sử dụng EJB –
Vì vậy, bạn quyết định tự mình kết hợp hàng đợi thư dựa trên cơ sở dữ liệu thay vì sử dụng hệ thống nhắn tin hiện có. Chắc chắn nó sẽ hoạt động, nhưng tôi sẽ hỏi tại sao bạn thậm chí làm phiền với bean thực thể, bạn không có trạng thái duy trì, hoặc cập nhật để thực hiện cho bảng, vì vậy bạn có thể thực hiện cuộc gọi db trực tiếp từ một servlet (nếu dựa trên web) hoặc một bean phiên không trạng thái. Tất cả đều là những sản phẩm thay thế kém cho một hệ thống nhắn tin thực tế. – Robin