Tôi có hai tác vụ mà tôi cần thực hiện nói task1
và task2
là một phần của cùng một quy trình nghiệp vụ. Tôi phải trả lời cho người dùng cuối khi hoàn thành task1
để thời gian đáp ứng của nó phải được giảm thiểu.Cách đúng để sử dụng các phương pháp không đồng bộ EJB
Cách tiếp cận hiện tại của tôi là thực hiện task1
và ngay sau khi task1
kết thúc, hãy gọi phương thức task2
không đồng bộ. task2
phức tạp và thời gian phản hồi nằm ngoài tầm kiểm soát của tôi vì nó có một số phụ thuộc bên ngoài.
@Stateless
public class SessionBean1 {
@Inject
SessionBean2 sessionBean2;
public void doTask1(){
// task one stuff
sessionBean2.doTask2();
}
}
@Stateless
public class SessionBean2 {
@Asynchronous
public void doTask2(){
// do task2 stuff
}
}
Trong websphere 8.0 (EJB container đang sử dụng) phương pháp đồng bộ và phương pháp không đồng bộ được điều hành bởi các nhóm luồng khác nhau.
Giả định ban đầu của tôi là ngay cả khi task2
đang hoạt động kém, task1
sẽ không có tác động, nhưng đáng buồn là điều đó không đúng.
Nếu task2
đang hoạt động kém, tất cả các chuỗi từ nhóm chủ đề không đồng bộ sẽ bị chiếm đóng. Điều này sẽ gây ra task1
để chờ các chuỗi không đồng bộ được miễn phí và do đó task1
có tác động.
Thông điệp trong nhật ký máy chủ websphrere: The request buffer for thread pool WorkManager.WebSphere_EJB_Container_AsynchMethods_Internal_WorkManager has reached its capacity
Câu hỏi của tôi là những gì sẽ là một cách thích hợp để đạt được những gì tôi đang cố gắng để đạt được ở đây.
Nếu bạn đang sử dụng Java EE 7, bạn có thể sử dụng chú thích @AccessTimeout (value = xx), nhưng tôi nghĩ Websphere là Java EE 6? – rjdkolb
@mattfreake: Như trong [image] được liên kết (http://2.1m.yt/itzn6So.jpg), không có yêu cầu phương thức async bị giới hạn và phụ thuộc vào số lượng các chủ đề không đồng bộ. Tôi có thể tăng không có chủ đề nhưng ngay cả khi trong một vài phút task2 thực hiện xấu, task1 của tôi vẫn sẽ phải chờ đợi. Ngoài ra, không có chủ đề nào bị giới hạn bởi cấu hình phần cứng. – ares
Ý tưởng về việc sử dụng hàng đợi JMS được đề xuất bởi @rjdkolb là một ý tưởng tốt hơn nhiều nếu việc định kích thước nhóm luồng là vấn đề. –