Web.xml में संसाधन-रेफ किसके लिए उपयोग किया जाता है?


112

मैं सोच रहा हूँ कि आप <resource-ref>अपनी web.xmlफ़ाइल में एक तत्व को कब / क्यों परिभाषित करेंगे ?

मैंने सोचा होगा कि यह JNDI का उपयोग करके आपके वेब / ऐप सर्वर में परिभाषित किया जाएगा और फिर अपने जावा कोड में JNDI संदर्भ देखें?

संसाधन-रेफ परिभाषा मुझे थोड़ी बेमानी लगती है और मैं सोच भी नहीं सकता कि यह कब उपयोगी हो सकता है। उदाहरण:

<resource-ref>
  <description>Primary database</description>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
</resource-ref>

जवाबों:


156

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

<resource-ref>अप्रत्यक्ष की एक और परत का परिचय देता है: आप उस नाम को निर्दिष्ट करते हैं जिसे आप web.xml में उपयोग करना चाहते हैं , और, कंटेनर के आधार पर, कंटेनर-विशिष्ट कॉन्फ़िगरेशन फ़ाइल में एक बंधन प्रदान करते हैं ।

तो यहाँ क्या होता है : मान लीजिए कि आप java:comp/env/jdbc/primaryDBनाम देखना चाहते हैं । कंटेनर पाता है कि web.xml के लिए एक <resource-ref>तत्व है jdbc/primaryDB, इसलिए यह कंटेनर-विशिष्ट कॉन्फ़िगरेशन में दिखेगा, जिसमें निम्न के समान कुछ शामिल हैं:

<resource-ref>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>

अंत में, यह नाम के तहत पंजीकृत वस्तु लौटाता है jdbc/PrimaryDBInTheContainer

विचार में संसाधनों को निर्दिष्ट है कि है web.xml को अलग करने का लाभ दिया है डेवलपर से भूमिका deployer भूमिका। दूसरे शब्दों में, एक डेवलपर के रूप में, आपको यह जानने की ज़रूरत नहीं है कि आपके आवश्यक संसाधनों को वास्तव में उत्पादन में क्या कहा जाता है, और आवेदन को तैनात करने वाले व्यक्ति के रूप में, आपके पास वास्तविक संसाधनों के लिए नक्शे में नामों की एक अच्छी सूची होगी।


6
IMHO, यह भूमिकाओं को अलग करने से परे है। यह विचार है कि आप यह नहीं मान सकते हैं कि एक jndi नाम एक सर्वर पर उपलब्ध है, इसलिए आपको अपने आवेदन में उपयोग किए जाने वाले नाम को "वास्तविक" JNDI नाम के रूप में मैप करने की आवश्यकता है।
पास्कल थिवेंट

3
यह प्राथमिक होना चाहिए, क्योंकि मैं इसे Google के साथ नहीं पा सकता हूं, लेकिन अगर मैं "java: comp / env / jdbc / PrimaryDB" देखना चाहता हूं, तो Res-Ref-name "jdbc / PrimaryDB" क्यों है?
Torben

4
जो मैं जानता हूं, उसके लिए "jndi-name" तत्व मानक web.xml का हिस्सा नहीं है, बल्कि विशिष्ट विक्रेताओं की तैनाती के विवरणों का वर्णन करता है।
रेमन चियारा

2
@RaviParekh, उन्होंने "कंटेनर-विशिष्ट कॉन्फ़िगरेशन" का उल्लेख किया है, यह jboss-web.xml या weblogic.xml या किसी अन्य विक्रेता विशिष्ट परिनियोजन वर्णनकर्ता फ़ाइल
abhihello123

1
क्या हम इसे बकरी से संबंधित कर सकते हैं? मेरा मतलब है कि dataource संदर्भ में परिभाषित किया गया है। tomcat में reference.xml और web.xml में संसाधन-रेफरी
Atul
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.