2010-09-25 18 views
7

मैं कुछ सीडीआई-आधारित परियोजनाओं के लिए अपने स्वयं के संदर्भ रखना चाहता हूं। मुझे कस्टम स्कॉप्स चाहिए (चाहते हैं) ताकि मैं अलग कर सकूं कि एक घटक कितना समय तक रहता है और कहां रहता है।सीडीआई - कस्टम संदर्भ और स्कॉप्स लिखना

अपने स्वयं के संदर्भ को लागू करने के लिए, आपको कॉन्टेक्स्ट इंटरफ़ेस को कार्यान्वित करने की आवश्यकता है जो कि बहुत ही आत्म-स्पष्टीकरणपूर्ण है, लेकिन जब इसे बनाया गया है तो आप वास्तव में कैसे या कहां परिभाषित करते हैं?

उत्तर

4

मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन मेरा मानना ​​है कि यह काम करेगा।

public void afterBeanDiscovery(@Observes AfterBeanDiscover afterBeanDiscovery, BeanManager beanManager) 
{ 
    CustomContext customContext = new CustomContext(); 
    afterBeanDiscovery.addContext(customContext); 

    beanManager ... 
} 

अब, चाल है, तो आप उस संदर्भ के लिए एक संदर्भ पकड़ की जरूरत है: प्रत्येक कस्टम गुंजाइश/संदर्भ आप अपने आवेदन में चाहते हैं, तो आप बस एक विस्तार के माध्यम से इस संदर्भ जोड़ने के लिए जब कंटेनर आरंभ नहीं हो जाता जरूरत तो फिर जब आप इसे शुरू करना या रोकना चाहते हैं, तो आप कर सकते हैं। यही कारण है कि हो सकता है कुछ की तरह:

@Inject 
protected HttpRequestLifecycle httpRequestLifecycle; 

public void doSomething() 
{ 
    startContext(); 
    doStuff(); 
    stopContext(); 
} 

public void startContext() 
{ 
    httpRequestContextLifecycle.getHttpRequestContext().activate(); 
} 

कि यह करना चाहिए, वहाँ नहीं प्रलेखन का खजाना वहाँ बाहर है, इसलिए मुझे आशा है कि इस मदद करता है।

किसी को भी रुचि रखते हैं, स्रोत यहाँ की जाँच: http://github.com/walterjwhite/server.web.application

वाल्टर

+0

वास्तव में, यह मुझे वास्तव में पास हो गया। इसे सक्रिय करने के द्वारा संदर्भ शुरू करने के बाद भी, मुझे अभी भी कोई संदर्भ नहीं है ... –

+0

यहां एक और नोट - जब तक आप इसे सिंगलटन नहीं बनाते तब तक आप संदर्भ को इंजेक्ट नहीं कर सकते। यदि यह एप्लिकेशन-स्कोप्ड है, तो आपको कोई गारंटी नहीं है कि आपको संदर्भ में मानचित्र के समान संदर्भ मिलेगा। इसका मतलब है कि, जो संदर्भ आप सक्रिय करते हैं वह एक डमी संदर्भ है, यह कुछ भी नियंत्रित नहीं करता है। मैं जो कर रहा हूं वह मेरे जीवन चक्र प्रबंधन वर्गों में इसका संदर्भ रख रहा था और उसके बाद उस जीवन चक्र को इंजेक्शन दे रहा था और संदर्भ प्राप्त कर रहा था। –

+2

यदि यह @ सिंगलेटन था, तो आप एकाधिक अनुरोधों को कैसे अलग करेंगे? क्या आप संदर्भ श्रोता में कहीं भी संदर्भ बना और सक्रिय नहीं करना चाहिए? –

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