2013-02-05 24 views
5

Tôi có một Kho lưu trữ ứng dụng doanh nghiệp (EAR) chứa nhiều mô-đun phụ trợ (EJB) cũng như một số mô-đun web (WAR).Có thể quan sát sự kiện CDI bên trong WAR khi được đóng gói dưới dạng EAR

Các tổ chức sự kiện bị sa thải bên trong một trong các module phụ trợ:

@Inject private Event<MyEvent> myEvent; 
... 
public void fireEvent() { 
    myEvent.fire(new MyEvent()); 
} 
... 

Nó có thể được quan sát thấy trong bất kỳ các module phụ trợ khác với mã như thế này:

public void listener(@Observes MyEvent myEvent) { 
.. 
} 

Nhưng tôi không thể truy xuất sự kiện bên trong các WAR. Đây có phải là do khả năng hiển thị của trình nạp lớp (các lớp từ WAR không hiển thị với các EJB) hay CDI nên xử lý điều này?

Nếu không thể sử dụng CDI cho các sự kiện rộng ứng dụng, các lựa chọn thay thế là gì?

  • JMS
  • Ổi EventBus
  • ...

Có điều gì đó làm việc với CDI? Có lẽ một số phần mở rộng CDI mà cầu các sự kiện vào các cuộc chiến tranh?

----------- EDIT:

Tôi có thể quan sát sự kiện nếu nó được kích hoạt trong cùng một WAR. Ngoài ra, tôi đã cố gắng sử dụng một bean @Stateless làm trình xử lý sự kiện mà không thành công.

Bao bì là như thế này:

  • EAR
    • WAR (sự kiện nên được quan sát thấy ở đây)
    • WAR
    • EJB (sự kiện bị sa thải ở đây)
+0

Chắc chắn trong quý vị nộp WAR bạn có một '/ WEB-INF/beans.xml' –

+0

yes .. file beans.xml được đưa ra. – psartini

+0

Bạn có thể vui lòng gửi các trình lắng nghe sự kiện WAR (một cái gì đó để hiểu làm thế nào bạn nhanh chóng và sử dụng chúng, có lẽ CDI không nhận thức được trường hợp đậu của bạn ...). Mô tả đóng gói chi tiết cũng sẽ giúp ích. –

Trả lời

3

Sau một số nghiên cứu khác, dường như hành vi mong đợi vì các lớp WAR không hiển thị với các EJB.

Suy nghĩ thêm về điều này là một điều tốt - trong môi trường nhóm, sự kiện CDI sẽ chỉ nhận được bởi WAR chạy trên cùng một nút khi mô-đun EJB kích hoạt sự kiện. Nhưng để cập nhật đáng tin cậy chế độ xem của người dùng, chúng tôi cần nhận nó trên mọi trường hợp.

JMS hoặc hệ thống nhắn tin khác rõ ràng là cách thực hiện trong trường hợp này. Ngoài ra còn có một mở rộng CDI có sẵn cho CDI < -> JMS bắc cầu: Seam3 JMS

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