2011-06-17 28 views
18

शीर्षक के अनुसार, "javax.naming.N.NoInitialContextException" का अर्थ गैर तकनीकी शर्तों में क्या है? और इसे ठीक करने के लिए कुछ सामान्य सुझाव क्या हैं?"javax.naming.N.NoInitialContextException" का क्या अर्थ है?

संपादित करें (कंसोल से):

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.java:25) 
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.java:10) 
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:30) 
    at cepars.review.Test.main(Test.java:43) 
java.lang.NullPointerException 
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:31) 
    at cepars.review.Test.main(Test.java:43) 
cepars.app.DAOException 
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:39) 
    at cepars.review.Test.main(Test.java:43) 
+1

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

+0

डुप्लिकेट का एक स्वीकार्य उत्तर नहीं है। कृपया यह न बताएं कि उनके पास कोई जवाब नहीं है जब उनके पास कोई स्वीकार्य उत्तर नहीं है। –

+0

मेरे पास ऐसा कुछ था जब जावा ई सीडीआई यानी @ इंजेक्शन का उपयोग कर रहा था और बिना रनविथ (Arquillian.class) के बिना जुनीट एकीकरण परीक्षण चलाएं! –

उत्तर

13

के लिए डॉक्स में काफी बेहतर समझाया गया है यह मूल रूप से इसका मतलब है कि आवेदन कुछ "नामकरण संचालन" (जैसे JNDI या LDAP लुकअप) प्रदर्शन करने के लिए चाहता है, और यह पर्याप्त नहीं था निर्देशिका सर्वर से कनेक्शन बनाने में सक्षम होने के लिए उपलब्ध जानकारी। के रूप में अपवाद राज्य के लिए डॉक्स,

यह अपवाद फेंक दिया जाता है, जब कोई प्रारंभिक संदर्भ कार्यान्वयन बनाया जा सकता है। InitialContext क्लास के दस्तावेज़ में वर्णित प्रारंभिक संदर्भ कार्यान्वयन का नीति चुना गया है।

और अगर आप कर्तव्यनिष्ठा InitialContext के लिए javadocs पर एक नजर है, वे बहुत अच्छी तरह से कैसे प्रारंभिक संदर्भ का निर्माण किया है का वर्णन है, और क्या अपने विकल्पों आदि का पता/साख की आपूर्ति/के लिए कर रहे हैं।

यदि आप संदर्भ बनाने और कहीं और अटकने के लिए जाते हैं, तो कृपया यह बताएं कि आपने अभी तक क्या किया है और आप कहां चल रहे हैं।

6

बस the docs पढ़ें:

यह अपवाद फेंक दिया जाता है, जब कोई प्रारंभिक संदर्भ कार्यान्वयन बनाया जा सकता है। InitialContext क्लास के दस्तावेज़ में वर्णित प्रारंभिक संदर्भ कार्यान्वयन का नीति चुना गया है।

यह अपवाद InitialContext, न केवल जब InitialContext निर्माण किया है के साथ किसी भी बातचीत के दौरान फेंक दिया जा सकता है। उदाहरण के लिए, प्रारंभिक संदर्भ का कार्यान्वयन केवल संदर्भ को पुनर्प्राप्त कर सकता है जब वास्तविक विधियों पर इसका आह्वान किया जाता है। पर कोई निर्भरता नहीं होनी चाहिए जब प्रारंभिक संदर्भ का अस्तित्व निर्धारित है।

लेकिन इस InitialContext

+0

@ ओरेकल: 'InitialContext' एक बहुत मूर्ख, अर्थहीन नाम है। यह कुछ भी कहने वाले शब्दों का संयोजन नहीं है _initial_ और _context_, जिसका उपयोग हर जगह और सब कुछ के लिए किया जा सकता है। इसके अलावा उपरोक्त अनुच्छेद _InitialContext_ शब्द को समझाने के लिए _context_ 8 (आठ) बार शब्द का उपयोग करता है। एक बेहतर नाम 'JavaNamingAndDirectoryInitialContext' या कम से कम 'नामकरण और डायरेक्टरी प्रारंभिक कॉन्टेक्स्ट' होगा। या बेहतर नामकरण पर पुनर्विचार करें और नाम दें जो कुछ मतलब है। बेशक, जेएनडीआई थोड़ा सार है, लेकिन _InitialContext_ वास्तव में एक बुरा विकल्प है जो मुझे लगता है। – aliopi

+1

सहमत हुए। लेकिन आपको शायद ओरेकल में उस आलोचना को संबोधित करना चाहिए। आप यहां संदेशवाहक को शूटिंग कर रहे हैं –

27

इसका मतलब है कि कोई प्रारंभिक संदर्भ :)

लेकिन गंभीरता से लोग, JNDI (javax.naming) है कि वहाँ कुछ निर्देशिका या प्रदाता से वस्तुओं या संसाधनों को देख के बारे में सभी है। कुछ देखने के लिए, आपको देखने के लिए कहीं और चाहिए (यह InitialContext है)। NoInitialContextException का अर्थ है "मैं जॉन स्मिथ के लिए टेलीफोन नंबर ढूंढना चाहता हूं, लेकिन मेरे पास देखने के लिए कोई फोनबुक नहीं है"।

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

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

+4

मुझे फोनबुक समानता पसंद आया। विवरण के बारे में व्यक्तिगत रूप से अभी भी उलझन में है लेकिन आपके उत्तर ने मुझे वैचारिक अवलोकन दिया है। – user2316667

-1

बेहद गैर-तकनीकी शर्तों में, इसका मतलब यह हो सकता है कि आप "ejb:" या "jdbc:" या यूआरआई की शुरुआत में कुछ ऐसा करना भूल गए हैं, जिसे आप कनेक्ट करने का प्रयास कर रहे हैं।

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