2012-08-06 18 views
5

मैं कुछ सरल प्रतीत करने की कोशिश कर रहा हूं: डेटाबेस कनेक्शन का एक छोटा पूल सेट करें ताकि एक सर्वलेट (केवल एक) प्रति सेकंड 1 कनेक्शन पर मेरा सर्वर नहीं बना सके।जेट्टी mysql डेटाबेस कनेक्शन पूलिंग

Ubuntu 10.04 पर, नवीनतम अपग्रेड/अपडेट के साथ, मैं Eclipse Jetty 8.1.5.v20120716 का उपयोग कर रहा हूं। मैं MySQL 5.1 सर्वर से कनेक्ट करने का प्रयास कर रहा हूं।

मेरे सर्वलेट gcm कहा जाता है, ${jetty}/contexts में ऐसा है, तो मैं इस gcm.xml फ़ाइल है:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <New id="jdbc/myds" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/myds</Arg> 
    <Arg> 
     <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> 
     <Set name="Url">jdbc:mysql://localhost:3306/chat</Set> 
     <Set name="User">root</Set> 
     <Set name="Password">sillyness</Set> 
     </New> 
    </Arg> 
    </New> 
    <Set name="contextPath">/</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/gcm</Set> 
    <Set name="extractWAR">true</Set> 
</Configure> 

जब मैं java -jar start.jar -port=8080 साथ जेट्टी शुरू करते हैं, सब कुछ ठीक शुरू होता है जब तक मैं अपने सर्वलेट से डेटाबेस हिट करने के लिए प्रयास करें। अनुरोध के कोड से निपटने हिस्सा इस तरह दिखता है:

public static List<String> getDevices() 
    throws javax.naming.NamingException, java.sql.SQLException { 
    synchronized (regIds) { 
     InitialContext ctx = new InitialContext(); 
     DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/myds"); 
     Connection conn = null; 
     Statement stmt = null; 

     try { 
      conn = ds.getConnection(); 

      stmt = conn.createStatement(); 
      ResultSet rs = stmt.executeQuery("select * from chatdevice"); 

     //blah,blah,blah... 

त्रुटि मैं मिलता है:

javax.naming.NameNotFoundException; remaining name 'jdbc/myds' 
     at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:500) 
     at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:531) 
     at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:531) 
     at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:546) 
     at org.eclipse.jetty.jndi.java.javaRootURLContext.lookup(javaRootURLContext.java:112) 
     at javax.naming.InitialContext.lookup(InitialContext.java:409) 
     at com.google.android.gcm.demo.server.Datastore.getDevices(Datastore.java:98) 

कैसे जेट्टी डेटाबेस कोड को खोजने के लिए प्राप्त करने के लिए?

उत्तर

0

इस जोड़ने का प्रयास करें web.xml को

<resource-ref> 
    <res-ref-name>jdbc/myds</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
+0

हाय सुमित, उत्तर के लिए धन्यवाद, लेकिन अगर मैंने इसे 'web.xml' नामक फ़ाइल में रखा है, या मेरी gcm.xml फ़ाइल में कहीं भी, मुझे बताया गया है "नोड लक्ष्य तक पहुंचने में असमर्थ: प्रारंभ", और " अज्ञात कॉन्फ़िगरेशन प्रकार: में संसाधन-रेफरी " –

+0

मैं उल्लेख करना भूल गया: अगर मैंने उस बिंदु पर अपना सर्वलेट मारा, तो मुझे अभी भी एक ही त्रुटि NameNotFoundException मिलती है। –

5

मेरे मामले में, मैं घाट मेलिंग सूची (https://dev.eclipse.org/mailman/listinfo/jetty-users) के पास गया मेरे सवाल पूछने के लिए।

एक बहुत ही स्मार्ट व्यक्ति (! हाय जनवरी) में लिखा था और इस तरह से उत्तर दिया:

वहाँ घाट में एक ही परिणाम प्राप्त करने के लिए आम तौर पर कई अलग अलग तरीके हैं, ताकि शायद तुम क्यों अलग अलग तरीकों से देखा है है दस्तावेज। आम तौर पर होने विकल्पों एक अच्छी बात

मामले में कोई भ्रम की स्थिति है, इस निश्चित पृष्ठ है: http://wiki.eclipse.org/Jetty/Feature/JNDI अगर कोई ऐसा कार्य लापता है, तो हमें बताएं ताकि हम पेज अद्यतन कर सकते हैं हमें बताएं।

आपका मामला थोड़ा सामान्य है कि आप जावा-शैली सुविधाओं का उपयोग कर रहे हैं, लेकिन बिना web.xml। यह कुछ नहीं है मुझे पहले सामना करना पड़ा है, लेकिन ऐसा लगता है कि मुझे दस्तावेज़ में कुछ जोड़ना चाहिए।

मैं सिफारिश करेंगे (ऊपर पेज करता है) है कि आप एक वेब-INF/घाट-env.xml फ़ाइल में किसी भी JNDI परिभाषाओं रख दिया और नहीं संदर्भ xml फ़ाइल। यदि आप ऐसा करते हैं, तो आप प्रभावी ढंग से कर सकते हैं कि web.xml तत्व जावा में आपके डेटा स्रोत को बाध्य करेगा और आपके संसाधन को परिभाषित करके comp/env नेमस्पेस को जावा में बाध्य करेगा: comp/env एक बार में जाएं (ध्यान दें कि यह एक संदर्भ xml फ़ाइल में नहीं काम करते हैं, यह होना चाहिए होगा घाट-env.xml):

तो वेब-INF/घाट-env में निम्न कार्य करें।xml:

<New id="jdbc/myds" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/myds</Arg> 
    <Arg> 
    <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> 
     <Set name="Url">jdbc:mysql://localhost:3306/chat</Set> 
     <Set name="User">root</Set> 
     <Set name="Password">sillyness</Set> 
    </New> 
    </Arg> 
    <Call name="bindToENC"> 
    <Arg>jdbc/myds</Arg> 
    </Call> 
</New> 

bindToENC बाँध करने के लिए कॉल जो भी नाम आप जावा के लिए प्रत्यय के रूप में देखने के लिए चाहते हैं: कंप्यूटर अनुप्रयोग/env। उदाहरण के लिए यदि आप जावा को देखना चाहते हैं: comp/env/my/foo तो bindToENC तर्क "my/foo" होगा।

- जन बार्टेल www.webtide.com - जेटी & धूमकेतु विशेषज्ञों से डेवलपर सलाह, सेवाएं और समर्थन। _______________________________________________ घाट उपयोगकर्ताओं मेलिंग सूची [email protected] https://dev.eclipse.org/mailman/listinfo/jetty-users

अब, यह काफी पर्याप्त (मैं एक घाट नौसिखिया हूँ) नहीं था। वेब-आईएनएफ को मेरे सर्वलेट के लिए युद्ध फ़ाइल के अंदर वेब-आईएनएफ था ... इसलिए मैंने युद्ध फ़ाइल की सामग्री को एक निर्देशिका में निकाला, और फिर मैं आसानी से जेटी-एनवी.एक्सएमएल फ़ाइल को वेब में डाल सकता था -आईएनएफ निर्देशिका।

यह महत्वपूर्ण भी था:

ठीक है, मैं वहाँ एक छोटे से घाट ज्ञान ग्रहण किया, और सोचा कि आप जानते होंगे कि क्या मैं पोस्ट केवल आप के लिए की आवश्यकता होगी क्या से एक टुकड़ा था एक पूर्ण jetty-env.xml फ़ाइल।

घाट-env.xml फ़ाइल के लिए विकी पृष्ठ यहां है: के रूप में टुकड़ा मैं पोस्ट के आसपास है कि पृष्ठ पर दिखाया http://wiki.eclipse.org/Jetty/Reference/jetty-env.xml

तो मूल तत्व लपेट और आप अच्छा होना चाहिए।

अब/वह/डेटाबेस कनेक्शन का प्रयास करने के लिए मिला है। तब मुझे connection refused from 127.0.0.1 त्रुटियां /var/log/auth.log में मिल रही थीं।

इसके लिए बाहर निकलता है कि मैंने इनकार किया था, और यकीन है कि किसी ने वहां ALL: 127.0.0.1 रखा था ... जिसका मतलब है कि मेरी स्थानीय मशीन से कनेक्शन अस्वीकार कर दिए गए थे।

एक बार यह विवरण तय हो जाने के बाद, सर्वलेट अंततः मेरे सर्वर पर MySQL तक पहुंच सकता है।

संबंधित मुद्दे