Tôi biết tôi không phải tinker với luồng trong EJB Container, do đó tôi không biết làm thế nào để làm điều sau đây trong một môi trường EJB đúng cách:Có điều gì đó hoạt động như .wait() và .notify() trong môi trường EJB không?
Tham gia đang:
- Stateless Session Bean "Client"
- Stateless Session Bean "server"
- MessageQueue "Queue"
- Message Driven Bean "Mdb" mà xử lý thông điệp từ "Queue"
- n Stateless Session Beans W1 qua Wn
Kịch bản là:
Khách hàng gọi là Phương pháp server, mà lần lượt gửi nhiều tin nhắn để Queue. Sau đó, Máy chủ sẽ thực hiện một số nội dung khác. Trong thời gian chờ đợi, Mdb tiêu thụ một tin nhắn, gọi Wi thực hiện một số phép tính khá dài và nhận kết quả. Bây giờ Mdb cho kết quả là Máy chủ. Khi Máy chủ nhận tất cả "kết quả" cho mọi thư được gửi, nó sẽ thực hiện một số phép tính khác với kết quả từ W s và trả về kết quả đó cho Khách hàng.
My Vấn đề:
Trong Java SE tôi sẽ chỉ cần làm .wait() để có server chờ đợi kết quả của cuộc W s, sau server đã làm việc sau khi gửi tin nhắn. Sau đó, mdb sẽ .notify() khi nó đã đặt kết quả. Vì tôi không phải tinker với luồng trong các thùng chứa EJB, như các đặc điểm kỹ thuật nói, tôi bị mất nguyên nhân tôi đã không tìm thấy bất kỳ cách thích hợp để đạt được cùng một hành vi trong môi trường EJB.
Bất kỳ trợ giúp nào về vấn đề đó sẽ thực sự được đánh giá cao, cảm ơn trước.
P .: Tôi đang làm việc với JBoss 5.1.0, trong trường hợp có bất kỳ biện pháp cụ thể nào của nhà cung cấp để giải quyết vấn đề đó.
Ok, đó là tương tự như những gì tôi nghĩ về, nhưng vấn đề lớn nhất của tôi là "sau đó chờ đợi cho tin nhắn phản ứng" -part. Đó là nơi tôi sẽ sử dụng thông báo chờ đợi trong SE. Vì vậy, tôi đang tìm kiếm cơ chế chờ đợi thực tế với MDB. Bạn có gợi ý về điều đó không? – Daniel
@Daniel - bạn sẽ thiết lập một MessageConsumer và gọi 'receive()' trên đó. đó là phần "chờ" của phương trình. bạn không sử dụng MDB cho xử lý cuối cùng, chỉ có tác phẩm được phân phối. – jtahlborn
Có điều kiện chủng tộc nào có thể xảy ra khi máy chủ bỏ lỡ thông báo từ MDB hoàn tất trước khi máy chủ gọi nhận()? –