2016-09-22 7 views
8

वेबस्पेयर 8.0 पर चलने वाले जावा ईई 6 एप्लिकेशन के संदर्भ में, मुझे किसी भी व्यवसाय विधि को निष्पादित करने से पहले कई स्टार्टअप कार्यों को निष्पादित करने की आवश्यकता है। इस उद्देश्य के लिए @Startup @Singleton बीन का उपयोग करना एक आशाजनक समाधान की तरह लगता है। हालांकि, यह पूरी तरह से स्पष्ट नहीं है कि आवेदन जीवनशैली कैसा दिखता है। EJB 3.1 spec राज्यों निम्नलिखित:@Singleton @Startup @PostConstruct विधि क्लाइंट कॉल के लिए उपलब्ध ईजेबी से पहले वापस लौटने की गारंटी है?

डिफ़ॉल्ट रूप से, कंटेनर तय करने के लिए जिम्मेदार है जब करने के लिए एक सिंगलटन सेम उदाहरण प्रारंभ है। हालांकि, बीन डेवलपर वैकल्पिक रूप से प्रारंभिक प्रारंभ के लिए सिंगलटन को कॉन्फ़िगर कर सकता है। यदि सिंगलटन बीन क्लास पर स्टार्टअप एनोटेशन दिखाई देता है या सिंगलटन को तैनाती वर्णनकर्ता के माध्यम से के रूप में नामित प्रारंभिक प्रारंभ करने की आवश्यकता है, तो कंटेनर को एप्लिकेशन स्टार्टअप अनुक्रम के दौरान सिंगलटन बीन इंस्टेंस प्रारंभ करना होगा। कंटेनर को से पहले ऐसे सभी स्टार्टअप-टाइम सिंगलेटन को प्रारंभ करना होगा, किसी भी ग्राहक अनुरोध एप्लिकेशन में किसी एंटरप्राइज़ बीन घटकों को वितरित किए जाते हैं।

  1. अंतिम वाक्य में, वास्तव में क्या "प्रारंभ" का गठन? ग्राहक अनुरोधों के लिए एंटरप्राइज़ बीन्स उपलब्ध कराने से पहले @Startup बीन की @PostConstruct विधि के लिए कंटेनर प्रतीक्षा करेगा?

  2. "क्लाइंट अनुरोध" के बारे में बात करते हुए, इस संदर्भ में @ शेड्यूल्ड एनोटेशन गिनती के साथ एक ईजेबी विधि के निर्धारित निष्पादन करें?

मैं गारंटी नहीं है कि कुछ कोड चलाया जा सकता है आवेदन स्टार्टअप पर निष्पादित किया जाता है आवेदन के विभिन्न EJBs में से किसी में व्यापार के तरीकों में से किसी से पहले, ग्राहक कॉल या अनुसूचित फांसी के माध्यम से यह हो की जरूरत है। @Singleton @Startup बीन की @PostConstruct विधि के अंदर स्टार्टअप कोड चला रहा है ऐसी गारंटी प्रदान करता है? यदि नहीं, तो क्या इस व्यवहार की गारंटी देने का कोई और तरीका है?

+0

ठीक है, यह निश्चित रूप से एक अनुप्रयोग सर्वर के लिए बीन्स की सेवा करने के लिए खराब डिज़ाइन होगा जो अभी भी उनके '@ पोस्टकस्ट्रक्चर' विधियों को चलाने के बीच में हैं। – Kayaman

+1

@Kayaman उनके '@ पोस्टकॉन्स्ट्रक्चर' विधियों के बीच में सेम की सेवा करने और * सभी * बीन्स पर कॉल को रोकने के बीच एक अंतर है, जबकि * किसी भी * 'स्टार्टअप 'बीन अपनी' पोस्टकॉन्स्ट्रक्चर 'विधि में है, जो व्यवहार है कल्पना द्वारा आवश्यक है। –

+0

@ ब्रेटकेल वास्तव में है। उत्तरार्द्ध गारंटी देता है कि पूर्व नहीं हो सकता है। हालांकि, उनके उद्धरण ने स्पष्ट रूप से '@ पोस्टकस्ट्रक्चर' का उल्लेख नहीं किया है, मुझे विश्वास है कि वह सोच रहा था कि '@ पोस्टकॉन्स्ट्रक्चर' प्रारंभिकरण का हिस्सा है या नहीं। – Kayaman

उत्तर

6
  1. हाँ, मॉड्यूल में सभी @Startup सेम के @PostConstruct विधि ("EJB आवेदन") के लिए कंटेनर प्रतीक्षा करता है किसी भी ग्राहक अनुरोध भेजने की अनुमति से पहले वापस जाने के लिए।
  2. हां, यह वेबस्पेयर एप्लिकेशन सर्वर में है, जैसा कि ज्ञान केंद्र में Developing singleton session beans विषय द्वारा निहित है, जो कहता है "एक सिंगलटन बीन में एक पोस्ट कॉन्स्ट्रक्ट विधि एक ईजेबी टाइमर बना सकती है [...] हालांकि, डेडलॉक से बचने के लिए , PostConstruct विधि को EJB टाइमर चलाने के लिए इंतजार नहीं करना चाहिए "। दूसरे शब्दों में, टाइमर कॉलबैक इनवॉशंस @PostConstruct पूर्ण करने के तरीकों की प्रतीक्षा करेंगे, इसलिए @PostConstruct विधियों को पूरा करने के लिए टाइमर कॉलबैक आमंत्रणों की प्रतीक्षा नहीं करनी चाहिए।
+0

यह वही है जो मैं ढूंढ रहा था। धन्यवाद! –

संबंधित मुद्दे