मेरे पास दो कार्य हैं जिन्हें मुझे task1
और task2
कहने की आवश्यकता है जो एक ही व्यवसाय प्रक्रिया का हिस्सा हैं। मुझे task1
पूर्ण होने पर अंतिम उपयोगकर्ता को प्रतिक्रिया देना होगा ताकि प्रतिक्रिया समय को कम किया जाना चाहिए।ईजेबी असिंक्रोनस विधियों का उपयोग करने का सही तरीका
मेरा वर्तमान दृष्टिकोण task1
निष्पादित करना है और जैसे ही task1
समाप्त हो गया है, task2
विधि को अतुल्यकालिक रूप से लागू करें। task2
जटिल है और इसका प्रतिक्रिया समय मेरे नियंत्रण से बाहर है क्योंकि इसमें कुछ बाहरी निर्भरता है।
@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
}
}
websphere 8.0 (प्रयोग में EJB कंटेनर) तुल्यकालिक तरीके और अतुल्यकालिक तरीकों में अलग धागा पूल द्वारा चलाए जा रहे हैं।
मेरी प्रारंभिक धारणा यह थी कि task2
बुरी तरह से प्रदर्शन कर रहा है, task1
का कोई प्रभाव नहीं होगा, लेकिन दुख की बात यह सच नहीं है।
यदि task2
बुरी तरह से प्रदर्शन कर रहा है, तो एसिंक्रोनस थ्रेड पूल से सभी धागे पर कब्जा कर लिया जाएगा। यह task1
का कारण बन जाएगा ताकि एसिंक्रोनस थ्रेड मुक्त हो जाएं और इसलिए task1
पर प्रभाव पड़ता है।
websphrere सर्वर लॉग में संदेश: The request buffer for thread pool WorkManager.WebSphere_EJB_Container_AsynchMethods_Internal_WorkManager has reached its capacity
मेरा प्रश्न है कि मैं क्या यहाँ क्या हासिल करने की कोशिश कर रहा हूँ प्राप्त करने के लिए एक उचित तरीका होगा है।
यदि आप जावा ईई 7 का उपयोग कर रहे थे, तो आप @AccessTimeout (value = xx) एनोटेशन का उपयोग कर सकते हैं, लेकिन मुझे लगता है कि वेबस्पेयर जावा ईई 6 है? – rjdkolb
@mattfreake: जैसा कि लिंक [छवि] में है (http://2.1m.yt/itzn6So।jpg), async विधि अनुरोधों की संख्या सीमित हैं और async धागे की संख्या पर निर्भर हैं। मैं धागे की संख्या बढ़ा सकता हूं लेकिन यहां तक कि अगर कुछ मिनटों के लिए task2 बुरी तरह से प्रदर्शन करता है, तो मेरे कार्य 1 को अभी भी इंतजार करना होगा। हार्डवेयर कॉन्फ़िगरेशन द्वारा थ्रेड की संख्या सीमित नहीं है। – ares
@rjdkolb द्वारा सुझाए गए जेएमएस कतार का उपयोग करने का विचार थ्रेड पूल का आकार बदलना मुश्किल है। –