मैं जावा ईई 6 और सीडीआई में नया हूं। मैंने कुछ ट्यूटोरियल और वेल्ड दस्तावेज पढ़ा है। हालांकि मेरी समझ से काम करने वाला कुछ ऐसा नहीं है, इसलिए मुझे मदद चाहिए।एक ईजेबी की सीडीआई इंजेक्शन की ओर जाता है NullPointerException
मेरे पास निम्न स्थिति है। मैंने आईडीई के साथ आपूर्ति किए गए मेवेन आर्केटाइप का उपयोग करके नेटबीन 7.0.1 के साथ जावा ईई 6 एप्लीकेशन बनाया और आईडीई द्वारा आपूर्ति किए गए ग्लासफ़िश 3.1 पर तैनात किया गया।
beans.xml मेरे ईजेबी जार की मेटा-आईएनएफ निर्देशिका में स्थित है।
मैं अपने EJB कलाकृतियों (और EntityManager) के लिए एक वर्ग है कि एक निर्माता वर्ग के रूप में काम करता है को केवल बनाया है
@Stateless
public class EjbArtifactProducer {
@PersistenceContext(unitName = "trackProfiler-PU")
private EntityManager em;
@EJB
private UserFacadeLocal userFacade;
@EJB
private AuthServiceLocal authService;
@EJB
private NewsEntryFacadeLocal newsEntryFacade;
@EJB
private RoleFacadeLocal roleFacade;
@EJB
private TrackCommentFacade trackCommentFacade;
@EJB
private TrackFacade trackFacade;
@EJB
private TrackTypeFacade trackTypeFacade;
@EJB
private WaypointFacadeLocal waypointFacade;
@Produces
public AuthServiceLocal getAuthService() {
return authService;
}
@Produces
public EntityManager getEm() {
return em;
}
@Produces
public NewsEntryFacadeLocal getNewsEntryFacade() {
return newsEntryFacade;
}
@Produces
public RoleFacadeLocal getRoleFacade() {
return roleFacade;
}
@Produces
public TrackCommentFacade getTrackCommentFacade() {
return trackCommentFacade;
}
@Produces
public TrackFacade getTrackFacade() {
return trackFacade;
}
@Produces
public TrackTypeFacade getTrackTypeFacade() {
return trackTypeFacade;
}
@Produces
public UserFacadeLocal getUserFacade() {
return userFacade;
}
@Produces
public WaypointFacadeLocal getWaypointFacade() {
return waypointFacade;
}
}
मैं @Produces टिप्पणी के रूप में ऊपर दिखाए गए तरीकों पर खेतों एक सीधे लागू करने की कोशिश की।
हालांकि निम्नलिखित एक और EJB
@Inject
private NewsEntryFacadeLocal newsEntryFacade;
यह एक राज्यविहीन सत्र EJB में किया जाता है में कुछ भी इंजेक्षन नहीं करता, लेकिन जब मैं अपने व्यापार के तरीकों में से किसी में newsEntryFacade तक पहुँचने का प्रयास एक NullPointerException फेंक दिया है। तो स्पष्ट रूप से कोई इंजेक्शन नहीं हो रहा है या मेरे निर्माता शून्य संदर्भ प्रस्तुत करते हैं।
क्या मुझे कुछ याद आ रही है? या यह काम सीडीआई/वेल्ड के अनुसार होना चाहिए?
अजीब यह जब मैं वेब अनुप्रयोग भाग में EJBs @Inject करने की कोशिश कि जिस तरह से काम करने के लिए लगता है (हालांकि मैं अपने .war इस काम करने के लिए एक अतिरिक्त निर्माता वर्ग की जरूरत है, इस के रूप में यह होना चाहिए है?) ।
संपादित करें: परियोजना एक चींटी निर्माण (नेटबीन द्वारा उत्पन्न) के साथ काम करती है। क्या NetBeans द्वारा प्रदान की गई मेवेन आर्केटाइप के साथ कोई समस्या है? ऐसा लगता है कि मेवेन आर्केटाइप के साथ युद्ध और ईजेबी मॉड्यूल के बीच सीडीआई इंजेक्शन के साथ कुछ मुद्दे हैं। मैंने पाया कि अगर मेरे पास वेब और ईजेबी मॉड्यूल में अलग-अलग उत्पादक थे, तो ग्लासफ़िश एक तैनाती त्रुटि उत्पन्न करता है जिसमें कहा गया है कि इंटरफेस के दो अलग-अलग कार्यान्वयन हैं। लेकिन जब मैं वेब मॉड्यूल में निर्माता को हटा देता हूं वेल्ड शिकायत करता है कि वेब मॉड्यूल में मेरे बीन्स में इंजेक्ट करना चाहते हैं तो ईजेबी को हल नहीं किया जा सकता है। इसके अलावा चींटी बिल्ड ईजेबी को निर्माता के बिना इंजेक्शन किया जा सकता है, जबकि मेवेन बिल्ड को कक्षा में उत्पादक फ़ील्ड की आवश्यकता होती है। मैं यह नहीं समझा सकता कि यह कैसे हो सकता है। सभी अंतिम तैनाती के बराबर बराबर होना चाहिए, है ना?
एक और ईजेबी ने इंजेक्ट करने की कोशिश की, क्या यह वही ईजेबी जार या कोई अन्य संग्रह है? ध्यान दें: बीन-डिस्कवरी (या सीडीआई) को सक्षम करने के लिए beans.xml प्रत्येक तैनाती अभिलेखागार में मौजूद होना चाहिए। .Wars के लिए वेब-आईएनएफ में और मेटा-आईएनएफ में .jars – stratwine
हां। दोनों में beans.xml है। –
मैंने अपनी परियोजना को चींटी निर्माण में बदलने की कोशिश की है। सब कुछ ठीक काम करता है। मुझे अब युद्ध और ईजेबी मॉड्यूल के लिए अलग उत्पादक बनाने की भी आवश्यकता नहीं है। सवाल अब है: क्या मेवेन आर्केटाइप के साथ कोई समस्या है? या क्या विचार करने के लिए कोई विशेष चेतावनी है? –