अपने प्रश्न का सबसे छोटा जवाब निश्चित रूप से है यह एक अच्छा विचार है यह संभव है कि हम एक घटक कर सकते हैं कि वास्तव में जोड़ा EJBs सर्वलेट की तरह और EJB 3.1 में काम करने के लिए बनाने के लिए: @Singleton
एक @Singleton
सेम एक सर्वलेट की तरह मल्टी-थ्रेडेड किया जा सकता है, या तो द्वारा:
- तरीकों पर
@ConcurrencyManagement(BEAN)
- का उपयोग
@ConcurrencyManagement(CONTAINER)
का उपयोग करना @Lock(READ)
के साथ जहां समरूपता वांछित है और @Lock(WRITE)
उन विधियों पर है जो थ्रेड सुरक्षित नहीं हैं।
एक अन्य चीज जो Servlets के पास वर्षों से है कि ईजेबी कभी नहीं था <load-on-startup>
जो एक सर्वलेट उत्सुकता से लोड करने और आवेदन शुरू करने पर काम करने की अनुमति देता है।
सर्वलेट <load-on-start>
से मेल खाने के लिए हमने @Startup
एनोटेशन जोड़ा जो किसी भी @Singleton
ईजेबी में जोड़ा जा सकता है और एप्लिकेशन शुरू होने पर इसे शुरू करने का कारण बन जाएगा। इन बीन्स में @PostConstruct
विधि होगी जब एप्लिकेशन शुरू होता है और उनके @PreDestroy
को एप्लिकेशन बंद होने पर बुलाया जाता है।
एक नंबर (<load-on-startup>1</load-on-startup>
) का उपयोग करने के बजाय जिस क्रम में सेम @Startup
शुरुआत के साथ उसकी व्याख्या, आप @DependsOn
साथ सेम व्याख्या और सेम एनोटेट सेम से पहले शुरू करने की आवश्यकता की एक सूची निर्दिष्ट कर सकते हैं हुक्म चलाना करने के लिए।
और Servlets और EJB को संरेखित करने के लिए हमने ईजेबी 3.1 में बहुत कम ज्ञात और समझा पहलू किया था, यह निश्चित रूप से .war
फ़ाइलों के अंदर ईजेबी को पैक करने की अनुमति देने के लिए था - यह कम ज्ञात हिस्सा नहीं है - और जब हमने ऐसा किया सर्वलेट दृष्टिकोण से मेल खाने के लिए हमने चुपचाप java:comp/env
की परिभाषा को बदल दिया।
ईजेबी 3.1 से पहले दो ईजेबी को java:comp/env
नामस्थान (java:comp/env
ईजेबी स्पेक में बीन-स्कॉप्ड) साझा करने का कोई संभावित तरीका नहीं था। इसके विपरीत, Servlets, व्यक्तिगत Servlets के लिए अपने निजी java:comp/env
नामस्थान (java:comp/env
Servlet spec में मॉड्यूल-स्कॉप्ड) के लिए कभी भी कोई रास्ता नहीं था। तो ईजेबी 3.1 में एक ईजेबी जो युद्ध में पैक किया गया है, वही मॉड्यूल-स्कॉप्ड java:comp/env
वेबस्पेप में अन्य सभी Servlets और EJB के रूप में नामस्थान होगा, जो बीन-स्कॉप्ड java:comp/env
नामस्थान के लिए एक बहुत बड़ा विपरीत है कि ईजेबी पैक होने पर प्राप्त होते हैं एक युद्ध के बाहर एक ईएआर। हमने उस पर हफ्तों तक बहस की।
अपने दोस्तों को प्रश्नोत्तरी करने के लिए बीयर-टाइम का मामूली थोड़ा सा मामूली।
स्रोत
2012-06-27 01:30:23
उन्हें लगातार क्यों होना चाहिए? वे पूरी तरह से अलग चीजें करते हैं। – EJP
@EJP, ठीक है, वे अलग-अलग उद्देश्य हल करते हैं, लेकिन उनके पास स्टेटलेसनेस के मामले में समानता है। इस समानता के साथ, ईजेबी केवल उदाहरण होने की बजाय धागे के द्वारा अधिक प्रदर्शन प्रभावी बना सकते थे। –
यदि आप एक सर्वलेट/एक उदाहरण की चीजों में रुचि रखते हैं - तो आप इस पोस्ट को देखें: http://piotrnowicki.com/2012/04/one-servlet-instance-to-rule-them-all/ –