2010-01-07 20 views
13

आज दोपहर एक पूर्ण टर्बोट होने के नाते और कहीं भी जवाब नहीं मिल रहा है।ईजेबी 3.1 @EJB इंजेक्शन POJO

नए ईजेबी 3.1 spec के साथ एक ईजेबी को एक pojo में इंजेक्ट करना संभव है? मैं ईजेबी 3.0 में जानता हूं कि @EJB एनोटेशन का इस्तेमाल ईजेबी इंजेक्ट करने के लिए किया जा सकता है लेकिन यह सरल pojos पर काम नहीं करता है।

यदि ऐसा नहीं है तो मुझे जेएनडीआई में बीन अप देखना होगा क्योंकि मुझे पता है कि आप नए कीवर्ड का सरल उपयोग नहीं कर सकते हैं।

अग्रिम धन्यवाद।

कार्ल

+0

क्या आप सीडीआई का उपयोग कर रहे हैं? http://java.sun.com/javaee/6/docs/tutorial/doc/giwhb।एचटीएमएल –

उत्तर

19

हां, जेएनडीआई लुकअप का उपयोग करें।

चूंकि आपका POJO आपके द्वारा बनाया गया है (मुझे लगता है), कंटेनर निर्भरताओं को इंजेक्शन देने के लिए ज़िम्मेदार नहीं है।

+0

जावा ईई 5 के लिए सभी कार्यान्वयन जेएनडीआई पेड़ में @ लोकाल बीन प्रकाशित होने की अनुमति नहीं देते हैं। जहां तक ​​मुझे याद है कि यह कल्पना में एक वैकल्पिक विशेषता है। वेबलॉगिक 11 जी में यह नहीं चल रहा है, इसलिए उस स्थिति में हम इंजेक्शन संसाधन को POJO के लिए कन्स्ट्रक्टर तर्क के रूप में पास करते हैं। – BonanzaOne

7

नया ईजेबी स्पेक (3.1) ईजेबी के लिए वैश्विक जेएनडीआई नाम निर्दिष्ट करने की क्षमता को जोड़ता है। इसका मतलब है कि आप उन्हें किसी भी बीन में कहीं भी इस्तेमाल कर सकते हैं।

आपको एक स्पष्ट जेएनडीआई लुकअप करना होगा, हालांकि, एक ईजेबी 3.1 कंटेनर आपके POJO के बारे में नहीं पता होगा।

एकमात्र अपवाद, जिसे मैं अनुमान लगा रहा हूं, आप पर लागू नहीं होता है, यदि आपका पीओजेओ वास्तव में एक एप्लिकेशन क्लाइंट है, तो इस मामले में ईजेबी को शामिल करने वाला क्षेत्र स्थिर है, तो आप @EJB लागू कर सकते हैं इसके लिए एनोटेशन। यदि यह आपकी स्थिति है, तो आपको संपूर्ण जावा ईई 5 विनिर्देशन में एप्लिकेशन क्लाइंट नियमों की जांच करनी चाहिए।

अंत में, जावा ईई 6, जेएसआर -29 9 को शामिल करने के साथ, आप किसी भी तरह से होने वाले वर्णन की अनुमति दे सकते हैं; मैं अभी तक कल्पना नहीं जानता इसलिए इस पर टिप्पणी नहीं कर सकता।

मुझे उम्मीद है कि यह सब मदद करता है।

+1

जावा ईई (यहां तक ​​कि जे 2 ईई) के पिछले संस्करणों के साथ कहीं से भी एक लुकअप करना संभव था। ईजेबी 3.1 उसमें बदलाव नहीं करता है। जावा ईई 6 में नया क्या है कि आप सीडीआई का उपयोग करके कुछ भी प्रबंधित बीन बना सकते हैं और सीडीआई बीन्स में इंजेक्शन से भी लाभ उठा सकते हैं। –

+1

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

1

मुझे आश्चर्य है कि अगर मैं inject EJBs into unmanaged objects कर सकता हूं। अधिक जानकारी के लिए Weld (जेएसआर 2 9 9 संदर्भ कार्यान्वयन) दस्तावेज देखें।

लेकिन अगर आप एक भंडार या इस तरह फैक्ट्री के अंदर हाथ से निर्भरता इंजेक्शन प्रदर्शन कर सकते हैं:

@Stateless 
public PojoRespository { 

    @Inject 
    ResourceForPojos resource; 
    @PersistenceContext 
    private EntityManager em; 

    public Pojo findById(Object id) { 
    Pojo p = (Pojo) em.find(Pojo.class, id); 
    p.setResource(resource); // injects resource 
    return p; 
    } 

} 

आप कई तरीकों जहां इंजेक्शन प्रदर्शन किया जाना चाहिए है, तो आप एक इंटरसेप्टर इस्तेमाल कर सकते हैं।

28

नए ईजेबी 3.1 spec के साथ एक ईजेबी को एक pojo में इंजेक्ट करना संभव है? मैं ईजेबी 3.0 में जानता हूं कि @EJB एनोटेशन का इस्तेमाल ईजेबी इंजेक्ट करने के लिए किया जा सकता है लेकिन यह सरल pojos पर काम नहीं करता है। एक POJO में EJB के

इंजेक्शन संभव यदि आप JSR-299 (जावा सी ontexts और डी ependency मैं njection) अर्थात का उपयोग करता है, तो अपने POJO एक CDI कामयाब सेम है। उस मामले में, तुम कर सकते हो:

@Inject MyEJB service 

लेकिन यह एक EJB 3.1 सुविधा इस CDI से आता नहीं है,। और यदि आप सीडीआई का उपयोग नहीं कर रहे हैं, तो आपको एक लुकअप करना होगा।

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