2012-02-09 21 views
8

मैं टॉमकैट के साथ mysql डेटाबेस में कनेक्शन पूलिंग सेट अप करने का प्रयास कर रहा हूं। मेरे सरल एप्लिकेशन अपाचे में प्रॉजेक्ट कहा जाता है मेरी Projekt.xml में,/conf/कैटालिना/स्थानीय होस्ट मैं अपने ऐप केटॉमकैट और जेडीबीसी कनेक्शन पूलिंग

<Context docBase="Projekt.war" path="/Projekt"> 
    <Resource name="jdbc/mysqldb" 
     auth="Container" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
     type="javax.sql.DataSource" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/Music" 
     username="andrzej" 
     password="qazxsw" 
     maxActive="20" 
     maxIdle="30" 
     maxWait="5" 
    /> 
</Context> 

web.xml है

<servlet> 
    <servlet-name>HelloServlet</servlet-name> 
    <servlet-class>org.jtp.HelloServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>HelloServlet</servlet-name> 
    <url-pattern>/Hai</url-pattern> 
</servlet-mapping> 

<resource-ref>  
     <description>DB Connection</description>  
     <res-ref-name>jdbc/mysqldb</res-ref-name>  
     <res-type>javax.sql.DataSource</res-type>  
     <res-auth>Container</res-auth>  
</resource-ref> 

और मेरे अपाचे/lib फ़ोल्डर में मैं

mysql-connector-java-5.1.18-bin.jar 

है, लेकिन जब मैं इस कोड को निष्पादित करें:

Context initContext = new InitialContext(); 
dataSource = (DataSource)initContext.lookup("java:comp/env/jdbc/mysqldb"); 
System.out.println(dataSource.getConnection().createStatement(). 
      execute("select * from Users")); 

मैं अपवाद

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 

मैं अब हैरान हूँ, कुछ स्थानों मैंने पढ़ा है कि यह बिल्ला/lib में ड्राइवर रखने नहीं की वजह से हो सकता है, लेकिन मैं इसे लेकर और यह काम करता है, क्योंकि जब मैं ड्राइवर का परीक्षण में मैन्युअल कनेक्शन के साथ यह काम किया।

मेरी सेटअप के लिए मैं पालन करने के लिए कोशिश कर रहा था http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

संपादित करें: अंत हो गया यह काम कर रहा है, यह लग रहा था कि मैं, फ़ाइलें इसलिए जब पार्स करने वह अन्य विशेषताओं ओवरराइड में से एक में कुछ छोड़ दिया संदर्भ टैग था तो यह अंत में मेरी सारी गलती है।

उत्तर

10

ऐसा लगता है आप याद कर रहे हैं की तरह Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI देखने इस तरह से किया जाना चाहिए: http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html से

// Obtain our environment naming context 
Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env"); 

// Look up our data source 
DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); 

// Allocate and use a connection from the pool 
Connection conn = ds.getConnection(); 

प्रलेखन।

+0

फिर भी वही त्रुटि, मैंने पहले इस निर्माण का उपयोग किया था, लेकिन कहीं मुझे मैंने उद्धृत किया है, वैसे भी वे दोनों एक ही त्रुटि लौटते हैं। – Andna

+0

लगता है कि इस आदमी की तरह एक ही समस्या थी और उसने एक समाधान पोस्ट किया है http://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/ – drobson

+0

अभी भी कुछ भी नहीं, मैं इस फ़ोल्डर में लिख सकता हूं, मैंने अपने वेबपैप में contex.xml भी बनाया है, फिर भी वही त्रुटि है। – Andna

13

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

विकल्प जावा कोड को टॉमकैट के जेडीबीसी कनेक्शन पूलिंग को कॉन्फ़िगर करने के लिए उपयोग कर रहा है। सादा ओल 'जावा टॉमकैट 7 प्रलेखन पृष्ठ, The Tomcat JDBC Connection Pool अनुभाग में उदाहरण कोड देखें।

मूल रूप से, आप:

  1. आपकी सेटिंग रखने की एक PoolProperties वस्तु इन्स्तांत (डेटाबेस, डाटाबेस उपयोगकर्ता नाम, डाटाबेस पासवर्ड के लिए यूआरएल, और इस तरह)।
  2. उपरोक्त चरण # 1 से PoolProperties ऑब्जेक्ट को पार करते समय एक टोमकैट DataSource ऑब्जेक्ट को तत्काल करें।

आसान peasy।इस तरह ...

PoolProperties p = new PoolProperties(); 
p.setUrl(jdbc:postgresql://localhost:5432/" + "my_database_name"); 
p.setDriverClassName("org.postgresql.Driver"); 
p.setUsername("someUserName"); 
p.setPassword("somePassword"); 
… 
DataSource datasource = new org.apache.tomcat.jdbc.pool.DataSource(p); 
datasource.setPoolProperties(p); 

डेटा स्रोत का उपयोग करने के लिए ...

Connection conn = null; 
try { 
    conn = datasource.getConnection(); 
    … 

डेटास्रोत उदाहरण संग्रहित किया जा सकता:

  • अपने सर्वलेट पर एक सदस्य क्षेत्र के रूप में।
  • एक अन्य उत्तर की टिप्पणियों में उल्लिखित सिंगलटन के रूप में।
  • ServletContext पर एक "विशेषता" जैसा कि an Answer of mine पर वर्णित है और के रूप में प्रश्न How to get and set a global object in Java servlet context पर विचार-विमर्श किया के रूप में प्रयोग Object के लिए अंतर्निहित String की मैपिंग,।
+0

यह कमाल है। धन्यवाद। –

+0

यह वही है जो 3 दिनों से अधिक खोज रहा है ....! :) साझा करने के लिए धन्यवाद ....! – Saedawke

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