में ईजेबी बीन है, तो मैं शून्य की वापसी करता हूं। मैं अपनी गुणों को पढ़ने के लिए निर्माता विधि से बीन प्राप्त करना चाहता हूं। कुछ परिदृश्यों में बीन EJB Singleton
बीन है।इंजेक्शनपॉइंट.जेटबीन() जावा ईई 7 (सीडीआई 1.1)
मैंने समस्या पर ध्यान केंद्रित करने के लिए अपना कोड सरल बना दिया है।
मेरे सरल क्वालीफायर:
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface InjectMe {}
सरल निर्माता:
@Dependent
public class SimpleProducer {
@Produces
@InjectMe
public String getInjectMe(InjectionPoint ip) {
// ip.getBean() returns null for some reason
return "ip=" + ip + ", bean=" + ip.getBean();
}
}
EJB (सिंगलटन):
@Singleton
@Startup
public class SimpleSingleton {
@Inject
@InjectMe
private String injectMe;
@PostConstruct
public void init() {
System.out.println(injectMe);
}
}
कंसोल आउटपुट:
जानकारी: आईपी = [BackedAnnotatedField] @Inject @InjectMe निजी com.test.ejb.SimpleSingleton.injectMe,
bean=null
जब मैं बदल Singleton
सेम CDI
सेम करने के लिए सब कुछ ठीक (ip.getBean()
रिटर्न रिक्त नहीं काम करता है)। यह Java EE 6
में Singleton
बीन के साथ भी काम करता है लेकिन यह Java EE 7
में नहीं है। मैं ग्लासफ़िश 4 एप्लिकेशन सर्वर का उपयोग कर रहा हूं।
क्या यह व्यवहार कहीं निर्दिष्ट है?
एक ग्लासफ़िश बग की तरह लगता है। –
@ जोहानएमेंट: ऐसा मत सोचो, वाइल्डफली के लिए एक ही व्यवहार। अभी तक प्रश्न का उत्तर नहीं दे सकता है, लेकिन संभावित कारण हो सकते हैं: 1) बीन खोज मॉड्यूल व्यवहार में परिवर्तन (डिफ़ॉल्ट: 'एनोटेटेड'); 2) एक (गैर-प्रासंगिक) वर्ग स्ट्रिंग इंजेक्शन; 3) 'आश्रित' –
के अलावा कोई घोषित दायरा नहीं है यदि आप 'ip.getMember()। GetDeclaringClass() 'कहते हैं, तो आप दोनों मामलों के लिए FQCN प्राप्त करेंगे, यह इंजेक्शनपॉइंट API दस्तावेज़ में एक उदाहरण के रूप में भी उपयोग किया जाता है और मैंने इसे 'बीन'' शून्य के बाद एक फॉलोअप कॉल के रूप में एक डेल्टास्पिक उदाहरण में देखा है। –