2009-10-23 15 views
15

मैं जावा एसई ऐप में जेएनडीआई का उपयोग कर डेटासोर्स को कॉन्फ़िगर करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?कंटेनर से बाहर जेएनडीआई डेटा स्रोत

अब तक, मैं 2 परियोजनाओं का सामना करना पड़ा:

  1. Apache Naming। प्रोजेक्ट पेज में डेटा स्रोत को कॉन्फ़िगर करने के लिए एक विशिष्ट उदाहरण है, लेकिन ऐसा लगता है कि प्रोजेक्ट बहुत पुराना है और अब सक्रिय नहीं है।
  2. JBossNS। ऐसा लगता है कि LocalOnlyContextFactory का उपयोग कर स्थानीय-केवल जेएनडीआई को कॉन्फ़िगर करना आसान है, लेकिन मुझे डेटा स्रोत को वास्तव में कॉन्फ़िगर करने के तरीके पर कोई दस्तावेज़ नहीं मिला है।

यदि संभव हो, तो मैं डेटा स्रोत को जेटीए लेनदेन प्रबंधक (JOTM का उपयोग करके) भी कॉन्फ़िगर करना चाहता हूं।

उत्तर

10

आप इसके लिए जेएनडीआई का उपयोग क्यों कर रहे हैं? ऐसा नहीं है कि यदि आपके पास प्रदाता है तो यह एक खराब समाधान है लेकिन निर्भरता इंजेक्शन (आईओसी: Spring या Guice के माध्यम से) विकल्प हैं।

वसंत जेडीबीसी डेटा एक्सेस here वर्णित है। ,

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" /> 

एक परीक्षण वातावरण में आप:

<bean class="com.my.Persister"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

डेटा स्रोत एक JNDI-देखने का उपयोग कर परिभाषित किया जा सकता: बड़ी बात यह है कि आप अपने कोड में एक DataSource सुई वसंत का उपयोग कर सकते है डेटा स्रोत सीधे इंजेक्षन:

<bean id="dataSource" class="apache.db.PoolingDataSource"> 
    <!-- config goes here --> 
</bean> 
+0

मुझे इस पोस्ट में इसका उल्लेख करना चाहिए था। मैं एक घटक लिख रहा हूं जो एक वेब ऐप में चल रहा है, लेकिन मैं इसे सादे जावा एसई कमांड लाइन ऐप और जुनीट टेस्ट से भी आमंत्रित करने में सक्षम होना चाहता हूं। मेरा प्रारंभिक विचार यह था कि मुझे आवश्यक वातावरण (जेएनडीआई, डीबीसीपी, जेटीए) स्थापित करने में सक्षम होना चाहिए ताकि घटक कोड हमेशा इन पर भरोसा कर सके। मैं स्प्रिंग में एप्लिकेशन जैसे पूरे नए ढांचे को पेश करने में अनिच्छुक हूं, लेकिन यह एक विकल्प हो सकता है। क्या आप इस बात से संबंधित विशिष्ट वसंत दस्तावेज पृष्ठ हैं जो आप सुझाएंगे? – nikita

+0

मैंने एक लिंक प्रदान करने के लिए उत्तर संपादित किया है और कुछ संकेत क्या है। वसंत जेडीबीसी बहुत शक्तिशाली –

+0

विवरण के लिए धन्यवाद। मेरे पास उत्तर को उपयोगी के रूप में चिह्नित करने के लिए पर्याप्त अंक नहीं हैं: | – nikita

3

स्टैंड-अलोन JNDI के लिए एक बहुत उपयोग करने में आसान समाधान simple-jndi है। यह एक आकर्षण की तरह काम करता है जब तक आपको केवल एक ही JVM के भीतर इसकी आवश्यकता होती है, क्योंकि यह लाइब्रेरी नेटवर्क नेटवर्क नहीं है।

1

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

आप आसानी से डेटा-स्रोत या कनेक्शन पूल को परिभाषित करने के लिए सरल-जेएनडीआई का उपयोग कर सकते हैं और इसे जेएनडीआई संदर्भ में बाध्य कर सकते हैं।

एक जेएनडीआई परिभाषित करें।गुण अपने classpath में दायर:

type=javax.sql.DataSource 
driver=org.gjt.mm.mysql.Driver 
url=jdbc:mysql://localhost/testdb 
user=testuser 
password=testing 

अब आप इस तरह से अपने कोड के अंदर से अपने डेटा स्रोत का उपयोग कर सकते:

java.naming.factory.initial=org.osjava.sj.SimpleContextFactory 
org.osjava.sj.root=[absolute_or_relative_path_to_a_property_file] 

संपत्ति फ़ाइल की तरह लग रहा

InitialContext ctxt = new InitialContext(); 
    DataSource ds = (DataSource) ctxt.lookup("name_of_your_datasource"); 

अधिक जानकारी के लिए देखते हैं https://github.com/h-thurow/Simple-JNDI