यदि संभव हो तो उदाहरण के साथ, आप जेएनडीआई के उपयोग को कैसे महसूस कर सकते हैं?
यदि संभव हो तो उदाहरण के साथ, आप जेएनडीआई के उपयोग को कैसे महसूस कर सकते हैं?
जवाबों:
JNDI जावा नामकरण और निर्देशिका इंटरफ़ेस है। इसका उपयोग एप्लिकेशन डेवलपर और एप्लिकेशन के फ़िक्र करने वाले की चिंताओं को अलग करने के लिए किया जाता है । जब आप एक एप्लिकेशन लिख रहे होते हैं जो एक डेटाबेस पर निर्भर करता है, तो आपको उस डेटाबेस से जुड़ने के लिए उपयोगकर्ता नाम या पासवर्ड के बारे में चिंता करने की आवश्यकता नहीं होनी चाहिए। JNDI डेवलपर को एक डेटाबेस को नाम देने की अनुमति देता है, और उस नाम को डेटाबेस के वास्तविक उदाहरण में मैप करने के लिए तैनाती करने वाले पर भरोसा करता है।
उदाहरण के लिए, यदि आप एक जावा ईई कंटेनर में चलने वाले कोड लिख रहे हैं, तो आप इसे JNDI नाम "डेटाबेस" के साथ डेटा स्रोत को पकड़ने के लिए लिख सकते हैं:
DataSource dataSource = null;
try
{
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("Database");
}
catch (NamingException e)
{
// Couldn't find the data source: give up
}
नोट डेटाबेस चालक, या उपयोगकर्ता नाम, या पासवर्ड के बारे में यहाँ कुछ भी नहीं है। यह कंटेनर के अंदर कॉन्फ़िगर किया गया है।
JNDI डेटाबेस (JDBC) तक सीमित नहीं है; सभी प्रकार की सेवाओं को नाम दिया जा सकता है। अधिक जानकारी के लिए, आपको ओरेकल के ट्यूटोरियल की जांच करनी चाहिए ।
JNDI कॉन्फ़िगरेशन जानकारी को व्यवस्थित करने और सेवाओं के उपयोग के माध्यम से सेवाओं को खोजने और सुनने के लिए एक बहुत ही शक्तिशाली तंत्र है EventContext
। JNDI में आप किसी भी ऑब्जेक्ट को देख सकते हैं और सुन सकते हैं (सिर्फ DataSource
s नहीं ), यह मानते हुए कि आपका JNDI सेवा प्रदाता इसका समर्थन करता है।
बेशक, एकमात्र मुद्दा वास्तव में जेएनडीआई सेवा प्रदाता है; इसके बारे में महान बात यह है कि यह आश्चर्यजनक रूप से अपने स्वयं के रोल करना आसान है। सब के बाद आप किसी भी जावा उदाहरण को XML
JavaBeans का उपयोग करके सांकेतिक शब्दों में बदलना कर सकते हैं : XMLEncoder
और XMLDecoder
आपको एक एप्लिकेशन सर्वर के भीतर चलने पर भरोसा करने की आवश्यकता नहीं है!
तो इस विन्यास फाइल होने में क्या अंतर है? ठीक है, यह बहुत साफ हो सकता है क्योंकि आपके सभी एप्लिकेशन एक ही स्थान से अपना कॉन्फ़िगरेशन प्राप्त कर सकते हैं । यदि उन्हें कॉन्फ़िगरेशन जानकारी (जैसे डेटाबेस स्थान) साझा करने की आवश्यकता है, तो इसे जेएनडीआई में एक बार परिभाषित किया जा सकता है । मान लीजिए कि आप डेटाबेस सर्वर को स्थानांतरित कर चुके हैं: आपको उस स्थान के साथ gazillion config फ़ाइलों को याद रखने की आवश्यकता नहीं है। आप सिर्फ एक ही स्थान पर जाएं: जेएनडीआई।
जेएनडीआई एक एपीआई है जिसका उपयोग निर्देशिका और नामकरण सेवाओं तक पहुंच के लिए किया जाता है (अर्थात ऐसे साधन जिनके नाम वस्तुओं से जुड़े हैं)। किसी वस्तु के साथ एक नाम के जुड़ाव को एक बंधन कहा जाता है।
नामकरण सेवा का एक मूल उदाहरण DNS है जो आईपी पते के लिए मशीन के नाम को मैप करता है।
JNDI का उपयोग करते हुए, अनुप्रयोग किसी भी प्रकार की जावा वस्तुओं को नामित और संग्रहीत कर सकते हैं।
जावा के संदर्भ में इसका उपयोग कॉन्फ़िगरेशन फ़ाइलों में किया जा सकता है जहां आप हार्ड-कोड वातावरण विशिष्ट चर नहीं चाहते हैं।
वसंत उदाहरण:
स्प्रिंग संदर्भ फ़ाइल
<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl">
<property name="protocol">
<jee:jndi-lookup jndi-name="java:comp/env/protocol" />
</property>
<property name="endpoint">
<jee:jndi-lookup jndi-name="java:comp/env/endpoint" />
</property>
<property name="requestPath">
<jee:jndi-lookup jndi-name="java:comp/env/requestPath" />
</property>
टॉमकैट संदर्भ फ़ाइल
<Environment name="protocol" type="java.lang.String" value="https://"/>
<Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/>
<Environment name="requestPath" type="java.lang.String" value="/path/to/service"/>
JNDI एक संसाधन निर्माण के सरलीकरण की अनुमति देता है सिर्फ एक नाम में । तो, यह सुविधा / सुरक्षा / आदि के लिए 1 में कई विवरण समूह है । (उर्फ अमूर्त परत)
एहसास करने के लिए: एक संपत्ति सूची स्थापित करें जो कि जेन्डी संदर्भ इंटरफ़ेस में पूर्वनिर्धारित क्षेत्रों से मेल खाती है। (ये गुण jndi निष्पादन के लिए सेटिंग्स निर्दिष्ट करते हैं; लेकिन * खोज नाम नहीं)
Properties props = new Properties();
//field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial
//field Context.PROVIDER_URL => property name java.naming.provider.url
props.load(new FileInputStream("*properties file*")); //prop file in this case
Context ctx = new InitialContext(props);
Object o = ctx.lookup("*name of resource*");
आदर्श रूप से, आपके संगठन में LDAP निर्देशिका, DNS इत्यादि को बनाए रखने के लिए एक विशेष फ़ंक्शन मौजूद होगा (इसलिए एकीकृत एकल मैपिंग सेट सेवाएँ सभी, विसंगतियों को कम करती हैं)
JNDI सेवा प्रदाताओं की सूची: https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/conpret-c_jndi_JNDI_Service_Providers_.htm