2010-03-26 25 views
17

मैं निम्नलिखित वातावरण की स्थापना की है:मैं एक वेब कंटेनर के बाहर से एक जेएनडीआई डेटासोर्स कैसे देखूं?

  • जावा 1.5
  • सूर्य अनुप्रयोग सर्वर 8.2
  • ओरेकल 10 XE
  • Struts 2
  • हाइबरनेट

मुझे इसमें रुचि है यह जानने के लिए कि मैं जावा क्लाइंट (यानी वेब एप्लिकेशन के बाहर) के लिए कोड कैसे लिख सकता हूं जो जेएनडीआई डेटासोर्स पी को संदर्भित कर सकता है आवेदन सर्वर द्वारा rovided।

सूर्य अनुप्रयोग सर्वर के बंदरगाह सभी अपने डिफ़ॉल्ट पर हैं। सर्वर कॉन्फ़िगरेशन में जेडीबीसी/xxxx नामक एक जेएनडीआई डेटासोर्स है, लेकिन मैंने देखा है कि वेब एप्लिकेशन के लिए हाइबरनेट कॉन्फ़िगरेशन जावा: comp/env/jdbc/xxxx नाम का उपयोग करता है।

उदाहरण मैंने देखा है में से अधिकांश अब तक की तरह

Context ctx = new InitialContext(); 
ctx.lookup("jdbc/xxxx"); 

कोड शामिल लेकिन ऐसा लगता है मैं या तो गलत JNDI नाम का उपयोग कर रहा हूँ, या मैं एक jndi.properties या अन्य विन्यास फाइल विन्यस्त करने की जरूरत एक श्रोता को सही ढंग से इंगित करने के लिए? मेरे पास सूर्य अनुप्रयोग सर्वर से appserv-rt.jar है जिसमें इसके अंदर एक jndi.properties है, लेकिन यह मदद नहीं प्रतीत होता है। आप कंटेनर के कुछ हर दिन सामान्य जावा अनुप्रयोग चल रहा है बाहर बात कर रहे हैं Accessing Datasource from Outside A Web Container (through JNDI)

उत्तर

16

मैं इस सटीक समस्या पर फंस गया। मैंने एक छोटा ट्यूटोरियल लिखा था। असल में आपको डेटासोर्स ऑब्जेक्ट्स का अपना कार्यान्वयन बनाना होगा और उन्हें अपने कस्टम प्रारंभिक संदर्भ में जोड़ना होगा।वहाँ स्रोत उदाहरण यहां हैं:

Running Beans Locally that use Application Server Data Sources

+0

ब्लॉग पोस्ट बेहद उपयोगी था। धन्यवाद! –

1

:

वहाँ एक समान प्रश्न यहाँ है, लेकिन यह किसी भी कोड नहीं देता/iBatis JNDI डेटा स्रोत स्वचालित रूप से प्राप्त करने के लिए संदर्भित करता है , तो आप भाग्य से बाहर हैं। प्रभावी रूप से आप आप जावा ईई "स्टैंडअलोन" एप्लिकेशन लिख सकते हैं, अपने आप कॉन्फ़िगर कनेक्शन पूल के साथ अपने स्वयं JNDI कार्यान्वयन कॉन्फ़िगर करने के लिए, आदि

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

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

Here सूर्य अनुप्रयोग सर्वर 8.2 है, जो एक J2EE 1.4 कंटेनर है के लिए कुछ ट्यूटोरियल प्रलेखन है।

यदि यह संभव है तो मैं दृढ़ता से ग्लासफ़िश v2.1 को अपग्रेड करने का सुझाव दूंगा, बस एक और अधिक आधुनिक, बेहतर सर्वर के आसपास जो आपके ऐप्स को ठीक से तैनात करना चाहिए, क्योंकि यह 8.2 का वंशज है। लेकिन आप क्लाइंट में कनेक्शन विवरण कॉन्फ़िगर करना होगा और पुन: उपयोग नहीं कर सकते हैं -

+0

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

0

क्या आप चाहते हैं एक Application Client

वैकल्पिक रूप से आप जो बनाने के लिए आसान हो सकता है अपने स्टैंडअलोन ग्राहक से एक सादे JDBC कनेक्शन स्थापित कर सकता है आपके आवेदन सर्वर से सेटिंग्स।

+0

हाय, प्रतिक्रिया के लिए धन्यवाद। एप्लिकेशन क्लाइंट दिलचस्प है, लेकिन यह मेरी जरूरतों के लिए थोड़ा बहुत भारी है। डेटाबेस कनेक्शन प्राप्त करने के लिए एक बिंदु के रूप में स्थिरता बनाए रखने के लिए वेब-सर्वर में परिभाषित कनेक्शन का पुन: उपयोग करना था। – masotime

0

यह हो सकता है आप के लिए थोड़ी देर हो चुकी है, लेकिन मैं सही उद्देश्य तुम उल्लेख के लिए कई वर्षों के लिए Simple-JNDI library इस्तेमाल किया है। मुझे यकीन नहीं है कि इसमें आपके पास आवश्यक सभी विकल्प हैं लेकिन यह मेरी कमांड लाइन उपयोगिताओं के लिए पर्याप्त है।

1

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

type=javax.sql.DataSource 
driver=com.sybase.jdbc3.jdbc.SybDriver 
pool=myDataSource 
url=jdbc:sybase:Tds:servername:5000 
user=user 
password=password 

अपने आवेदन में

Context ctx = new InitialContext(); 
DataSource ds = (DataSource) ctx.lookup("path/to/your/connectionPool"); 

मैं इस उद्देश्य के लिए सरल-JNDI इस्तेमाल किया दिए गए हैं:

एक कनेक्शन पूल आप इस तरह एक फ़ाइल बनाने के लिए प्राप्त करने के लिए वर्षों से अब के लिए। लेकिन यह अब सक्रिय विकास में नहीं है। क्योंकि मुझे साझा संदर्भों (विशेष रूप से डेटा स्रोतों का उपयोग करके) के बारे में कुछ समस्याएं मिलीं, इसलिए मैंने मूल परियोजना को शाखा बनाने और कुछ नई सुविधाओं को जोड़ने का फैसला किया। अब एक 0.13.0 है। आप https://github.com/h-thurow/Simple-JNDI पर इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं।