JNDI क्या है? इसका मूल उपयोग क्या है? इसका उपयोग कब किया जाता है?


284
  • JNDI क्या है ?

  • इसका मूल उपयोग क्या है?

  • इसका उपयोग कब किया जाता है?


1
परिभाषा और उपयोग के मामलों के लिए व्यक्तिगत ब्लॉग पोस्ट देखें: tshikatshikaaa.blogspot.com/2013/01/…
Jérôme Verstrynge

जवाबों:


241

JNDI क्या है?

यह जावा नामकरण और निर्देशिका इंटरफ़ेस के लिए है

इसका मूल उपयोग क्या है?

JNDI ने वितरित अनुप्रयोगों को एक सार, संसाधन-स्वतंत्र तरीके से सेवाओं को देखने की अनुमति दी है।

इसका उपयोग कब किया जाता है?

जावा ईई एप्लिकेशन सर्वर पर डेटाबेस कनेक्शन पूल स्थापित करने के लिए सबसे आम उपयोग मामला है। उस सर्वर पर तैनात किसी भी एप्लिकेशन को उन कनेक्शनों तक पहुंच प्राप्त हो सकती है, जिन्हें उन्हें कनेक्शन के java:comp/env/FooBarPoolबारे में विवरण जानने के बिना जेएनडीआई नाम का उपयोग करने की आवश्यकता होती है ।

इसके कई फायदे हैं:

  1. यदि आपके पास परिनियोजन अनुक्रम है जहाँ ऐप्स devl->int->test->prodवातावरण से चलते हैं, तो आप प्रत्येक वातावरण में समान JNDI नाम का उपयोग कर सकते हैं और उपयोग किए जा रहे वास्तविक डेटाबेस को छिपा सकते हैं। जैसे ही वे वातावरण में प्रवास करते हैं, अनुप्रयोगों को बदलना नहीं पड़ता है।
  2. आप उन लोगों की संख्या को कम कर सकते हैं, जिन्हें किसी प्रोडक्शन डेटाबेस तक पहुँचने के लिए क्रेडेंशियल्स को जानना आवश्यक है। यदि आप JNDI का उपयोग करते हैं तो केवल जावा EE ऐप सर्वर को जानना होगा।

9
तो यह मूल रूप से आपके jdbc कनेक्शन जानकारी के साथ एक गुण फ़ाइल होने के लिए एक सुरक्षित विकल्प है?
ग्रिंच

4
@ ग्रेंच: अनिवार्य रूप से हाँ। यह सुरक्षित है, और अधिक मानकीकृत है, इस प्रकार तैनाती को आसान बनाता है (यह अनुमान लगाने की कोई आवश्यकता नहीं है कि गुण फ़ाइल का नाम क्या होना चाहिए आदि)।
सालेस्के

तब पर्यावरण चर और JNDI का उपयोग करने में क्या अंतर है? क्या यह समान अवधारणा है?
स्काईवेट्स

100

JNDI क्या है?

जावा नामकरण और निर्देशिका इंटरफ़ेस टीएम (जेएनडीआई) एक एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) है जो जावा टीएम प्रोग्रामिंग भाषा का उपयोग करके लिखे गए अनुप्रयोगों को नामकरण और निर्देशिका कार्यक्षमता प्रदान करता है । इसे किसी विशिष्ट निर्देशिका सेवा कार्यान्वयन से स्वतंत्र माना जाता है। इस प्रकार विभिन्न प्रकार की निर्देशिकाएं (नई, उभरती, और पहले से ही तैनात) को सामान्य तरीके से एक्सेस किया जा सकता है।

इसका मूल उपयोग क्या है?

इसका अधिकांश भाग उपरोक्त उत्तर में दिया गया है, लेकिन मैं यहां वास्तुकला प्रदान करना चाहूंगा ताकि ऊपर अधिक समझ में आए।

यहां छवि विवरण दर्ज करें

JNDI का उपयोग करने के लिए, आपके पास JNDI कक्षाएं और एक या अधिक सेवा प्रदाता होना चाहिए। जावा 2 एसडीके, v1.3 में निम्नलिखित नामकरण / निर्देशिका सेवाओं के लिए तीन सेवा प्रदाता शामिल हैं:

  1. लाइटवेट डायरेक्ट्री एक्सेस प्रोटोकॉल (LDAP)
  2. कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर (CORBA) कॉमन ऑब्जेक्ट सर्विसेज (COS) नाम सेवा
  3. जावा रिमोट मेथड इन्वोकेशन (RMI) रजिस्ट्री

इसलिए मूल रूप से आप ऑब्जेक्ट बनाते हैं और उन्हें निर्देशिका सेवाओं पर पंजीकृत करते हैं जिसे आप बाद में लुकअप कर सकते हैं और ऑपरेशन को निष्पादित कर सकते हैं।


30

आम तौर पर आंतरिक / बाहरी संसाधनों के उदाहरण प्राप्त करने में सक्षम होने के लिए आम तौर पर जेएनडीआई के संदर्भ में जेएनडीआई एक इंटरफेस है

  javax.sql.DataSource, 
  javax.jms.Connection-Factory,
  javax.jms.QueueConnectionFactory,
  javax.jms.TopicConnectionFactory,
  javax.mail.Session, java.net.URL,
  javax.resource.cci.ConnectionFactory,

या JCA संसाधन एडाप्टर द्वारा परिभाषित कोई अन्य प्रकार। यह उपयोग करने में सक्षम होने के लिए एक वाक्यविन्यास प्रदान करता है चाहे वे आंतरिक या बाहरी हों। इस उदाहरण में (COMP / env का अर्थ है जहां घटक / वातावरण, बहुत सारे अन्य वाक्यविन्यास हैं):

jndiContext.lookup("java:comp/env/persistence/customerDB");

1
यह तस्वीर का केवल एक हिस्सा है। JNDI आपको जावा ऑब्जेक्ट्स देखने देता है - वे डेटा स्रोत जैसे संसाधन हो सकते हैं, या कुछ और, java.lang.Stringकॉन्फ़िगरेशन जानकारी के लिए भी सादा ।
सालेस्के

3
@ साल्सके मेरा सुझाव है कि आप अपना जवाब दें।
सीएसएस

14

जेएनडीआई अवलोकन

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

JNDI को किसी विशिष्ट नामकरण या निर्देशिका सेवा कार्यान्वयन से स्वतंत्र भी परिभाषित किया गया है। यह एक आम एपीआई का उपयोग करके अनुप्रयोगों को विभिन्न, संभवतः कई, नामकरण और निर्देशिका सेवाओं तक पहुंचने में सक्षम बनाता है। विभिन्न नामकरण और निर्देशिका सेवा प्रदाताओं को इस सामान्य एपीआई के पीछे मूल रूप से प्लग किया जा सकता है। यह जावा प्रौद्योगिकी-आधारित अनुप्रयोगों को कई मौजूदा नामकरण और निर्देशिका सेवाओं, जैसे LDAP, NDS, DNS और NIS (YP) में जानकारी का लाभ उठाने के लिए सक्षम बनाता है, साथ ही साथ विरासत सॉफ्टवेयर और प्रणालियों के साथ सह-अस्तित्व के लिए अनुप्रयोगों को सक्षम करता है।

JNDI को एक उपकरण के रूप में उपयोग करते हुए, आप नए शक्तिशाली और पोर्टेबल अनुप्रयोगों का निर्माण कर सकते हैं, जो न केवल जावा के ऑब्जेक्ट मॉडल का लाभ उठाते हैं, बल्कि वे उस वातावरण के साथ अच्छी तरह से एकीकृत होते हैं जिसमें वे तैनात होते हैं।

संदर्भ


9

JNDI क्या है?

JNDI का अर्थ जावा नामकरण और निर्देशिका इंटरफ़ेस है। यह J2EE के साथ मानक है।

इसका मूल उपयोग क्या है?

इस एपीआई के साथ, आप कई प्रकार के डेटा तक पहुंच सकते हैं, जैसे ऑब्जेक्ट, डिवाइस, नामकरण और निर्देशिका सेवाओं की फाइलें, जैसे। इसका उपयोग दूरस्थ वस्तुओं को खोजने के लिए EJB द्वारा किया जाता है। JNDI को DNS, NDS, LDAP, CORBA और RMI जैसी मौजूदा सेवाओं तक पहुँचने के लिए एक सामान्य इंटरफ़ेस प्रदान करने के लिए डिज़ाइन किया गया है।

इसका उपयोग कब किया जाता है?

आप नामकरण अद्यतन करने के लिए JNDI का उपयोग कर सकते हैं, नामस्थान को अद्यतन करने के लिए पढ़ने के संचालन और संचालन सहित। निम्नलिखित संचालन यहां वर्णित हैं


7

एक नामकरण सेवा वस्तुओं के साथ नामों को जोड़ती है और उनके दिए गए नामों के आधार पर वस्तुओं को ढूंढती है। (आरएमआई रजिस्ट्री नामकरण सेवा का एक अच्छा उदाहरण है।) JNDI कई मौजूदा नामकरण सेवाओं जैसे LDAP, DNS को एक सामान्य इंटरफ़ेस प्रदान करता है।

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


3

मैं बस उत्सुक हूं कि आधिकारिक डॉक्स को इतना नजरअंदाज क्यों किया जाता है जो विवरणों को सावधानीपूर्वक पहले से ही विस्तृत करते हैं।

लेकिन अगर आप मामलों को समझना चाहते हैं, तो कृपया डफिमो के उत्तर को देखें ।

जावा नामकरण और निर्देशिका इंटरफ़ेस टीएम (जेएनडीआई) एक एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) है जो जावा टीएम प्रोग्रामिंग भाषा का उपयोग करके लिखे गए अनुप्रयोगों को नामकरण और निर्देशिका कार्यक्षमता प्रदान करता है । इसे किसी विशिष्ट निर्देशिका सेवा कार्यान्वयन से स्वतंत्र माना जाता है। इस प्रकार विभिन्न प्रकार की निर्देशिकाएं - नई, उभरती, और पहले से ही तैनात की गई - एक सामान्य तरीके से एक्सेस की जा सकती हैं।

और इसकी वास्तुकला

यहां छवि विवरण दर्ज करें

और आम तौर पर आप इसका उपयोग कैसे करते हैं


5
I am just curious why the official docs are so ignored which elaborate the details meticulously alreadyशायद इसलिए कि वे पर्याप्त तरीके से नहीं समझाते कि नियमित लोग समझ सकें?
स्काईवेट्स

1

मैं एक उदाहरण का उपयोग करके बताऊंगा कि JNDI का उपयोग कैसे किया जा सकता है डेटाबेस के उपयोगकर्ता नाम और पासवर्ड जानने वाले किसी भी एप्लिकेशन डेवलपर के बिना डेटाबेस को कॉन्फ़िगर करने के लिए।

1) हमने JBoss सर्वर के स्टैंडअलोन- full.xml में डेटा स्रोत को कॉन्फ़िगर किया है । इसके अतिरिक्त, हम पूल विवरण भी कॉन्फ़िगर कर सकते हैं।

 <datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
                <connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
                <driver-class>oracle.jdbc.OracleDriver</driver-class>
                <driver>oracle</driver>
                <security>
                    <user-name>usname</user-name>
                    <password>pass</password>
                    </security>
                    <security>

 <security-domain>encryptedSecurityDomain</security-domain>
                    </security>

                <validation>
                    <validate-on-match>false</validate-on-match>
                    <background-validation>false</background-validation>
                    <background-validation-millis>1</background-validation-millis>
                </validation>
                <statement>
                    <prepared-statement-cache-size>0</prepared-statement-cache-size>
                    <share-prepared-statements>false</share-prepared-statements>
                    <pool>
                        <min-pool-size>5</min-pool-size>
                        <max-pool-size>10</max-pool-size>
                    </pool>
                </statement>
            </datasource>

यहां छवि विवरण दर्ज करें

अब, यह jndi-name और इससे संबंधित डेटा स्रोत ऑब्जेक्ट हमारे application.application के लिए उपलब्ध होगा।

2) हम इस डेटा स्रोत ऑब्जेक्ट को JndiDataSourceLookup क्लास का उपयोग करके पुनः प्राप्त कर सकते हैं।

यहां छवि विवरण दर्ज करें

जब हम jndi-name प्रदान करते हैं, तो स्प्रिंग डेटासोर्स बीन को तुरंत बदल देगा।

अब, हम अपने वातावरण या आवश्यकता के अनुसार पूल का आकार, उपयोगकर्ता नाम या पासवर्ड बदल सकते हैं, लेकिन यह एप्लिकेशन को प्रभावित नहीं करेगा।

नोट : एन्क्रिप्टेड सिक्योरिटीडोमैन, हमें इसे JBoss सर्वर में अलग से कॉन्फ़िगर करने की आवश्यकता है

<security-domain name="encryptedSecurityDomain" cache-type="default">
                    <authentication>
                        <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
                            <module-option name="username" value="<usernamefordb>"/>
                            <module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
                        </login-module>
                    </authentication>
                </security-domain>

यह उपयोग के मामलों में से एक है। आशा है कि यह स्पष्ट करता है।


0

मुझे सबसे अच्छा स्पष्टीकरण यहाँ दिया गया है

जेएनडीआई क्या है

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

इसे बहुत सरलता से कहें तो यह वेब पर संसाधनों का प्रतिनिधित्व करने वाली स्ट्रिंग कुंजी और ऑब्जेक्ट मानों के साथ हैशमैप की तरह है।

क्या मुद्दे जेएनडीआई हल करता है

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

यदि किसी संसाधन को किसी अन्य सर्वर पर, किसी अन्य IP पते के साथ स्थानांतरित किया गया है, उदाहरण के लिए, इस संसाधन का उपयोग करने वाले सभी एप्लिकेशन को इस नई जानकारी के साथ अद्यतन करना होगा। JNDI के साथ, यह आवश्यक नहीं है। केवल संबंधित संसाधन बाइंडिंग को अद्यतन करना होगा। अनुप्रयोग अभी भी इसे अपने नाम से एक्सेस कर सकते हैं और स्थानांतरण पारदर्शी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.