2015-06-12 4 views
5

को देखते हुए दो सेम @Startup साथ एनोटेट:@DependsOn इंजेक्शन वाले किसी अन्य सीडीआई बीन के लिए आवश्यक है?

@Singleton  
@Startup 
@DependsOn("B") 
public A { 
    @Inject 
    private B b; 
} 

@Singleton  
@Startup 
public B {} 

इस स्थिति है कि बी सुनिश्चित करने के लिए @DependsOn आवश्यक एक से पहले आरंभ नहीं हो जाता है? या क्या कॉन्फ़िगरेशन पर कुछ सम्मेलन है कि ऐसी स्थिति में इंजेक्शन का आदेश प्रारंभिकरण के आदेश को निर्धारित करता है?

आधिकारिक ट्यूटोरियल इस मामले को कवर नहीं करता है, लेकिन केवल बीन्स जो केवल इंटरेक्टिक/वायरिंग लिंक के बिना @ इंजेक्ट के माध्यम से कवर किए जाते हैं।

उत्तर

1

यदि बीन ए वास्तव में बीन बी को प्रारंभ करने पर निर्भर करता है तो आपको इसकी आवश्यकता होती है।

@ स्टार्टअप के साथ आप उत्सुक इंस्टेंटेशन कर रहे हैं - सिंगलटन स्टार्टअप समय पर तत्काल है या नहीं, इसका उपयोग किया जाता है या नहीं।

आलसी तत्कालता में, सिंगलटन को तब तक तत्काल नहीं किया जाता जब तक कि इसकी विधि की आवश्यकता नहीं होती है।

कभी-कभी अनेक सिंगलटन सत्र सेम एक आवेदन के लिए डेटा प्रारंभ करने में उपयोग किया जाता है और इसलिए एक विशेष क्रम में प्रारंभ किया जाना चाहिए:

दोनों मामलों में, कंटेनर में सेम जो भी है ताकि इसे चाहता प्रारंभ कर सकते हैं। इन मामलों में, javax.ejb.Depends पर सिंगलटन सत्र बीन की स्टार्टअप निर्भरताओं की घोषणा करने के लिए एनोटेशन का उपयोग करें।

1

हां, यह आवश्यक है।

अन्यथा कुछ भी गारंटी नहीं देता है कि BA से पहले शुरू किया जाएगा।

JavaEE 6 documentation के अनुसार:

कभी-कभी अनेक सिंगलटन सत्र सेम एक आवेदन के लिए डेटा प्रारंभ करने में उपयोग किया जाता है और इसलिए एक विशेष क्रम में प्रारंभ किया जाना चाहिए। इन मामलों में, सिंगलटन सत्र बीन की स्टार्टअप निर्भरताओं की घोषणा करने के लिए javax.ejb.DependsOn एनोटेशन का उपयोग करें। @DependsOn एनोटेशन की मान विशेषता एक या अधिक तार है जो लक्ष्य सिंगलटन सत्र बीन का नाम निर्दिष्ट करती है। यदि @DependsOn में एक से अधिक निर्भर सिंगलटन बीन निर्दिष्ट हैं, तो जिस क्रम में वे सूचीबद्ध हैं, वह क्रमशः वह क्रम नहीं है जिसमें ईजेबी कंटेनर लक्षित सिंगलटन सत्र बीन्स शुरू करेगा।

उदाहरण:

निम्नलिखित सिंगलटन सत्र सेम, PrimaryBean, ऊपर पहली बार शुरू किया जाना चाहिए:

@Singleton 
public class PrimaryBean { ... } 

SecondaryBeanPrimaryBean पर निर्भर करता है:

@Singleton 
@DependsOn("PrimaryBean") 
public class SecondaryBean { ... } 

यह है कि गारंटी देता है EJB कंटेनरआरंभ करेगा SecondaryBean से पहले 0।

+0

अगर मुझे वास्तव में @DependsOn एनोटेशन की ज़रूरत है तो यह हमेशा मुझे परेशान करता है। क्योंकि अगर माध्यमिक बीन को प्राथमिक बीन की आवश्यकता होती है तो इसका अर्थ यह है कि पीबी को एसबी में इंजेक्शन दिया जाता है और कहीं भी इसका उपयोग किया जाता है ताकि एसबी में इसका इस्तेमाल करने से पहले पीबी की शुरूआत की गारंटी हो।क्या कोई असली दुनिया का मामला है जिसमें एसबी पीबी पर निर्भर करता है लेकिन इसका उपयोग नहीं करता है? – rychu

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