java - मुझे टॉमकैट के कनेक्शन पूल के लिए जेडीबीसी ड्राइवर कहां रखना है?




tomcat jdbc (2)

जेडीबीसी ड्राइवर को उसी डेटालोडर को डेटा स्रोत फैक्ट्री के रूप में दिखाई देना होगा। डेटा स्रोत फैक्ट्री लाइब्रेरी को टॉमकैट के अपने /lib फ़ोल्डर में रखा गया है और इस प्रकार टोमकैट के "सामान्य" क्लासलोडर द्वारा लोड किया गया है।

आपकी समस्या बहुत अधिक लगता है कि आपने वेबएपी /WEB-INF/lib में जेडीबीसी ड्राइवर को गिरा दिया। वेबैप का /WEB-INF/lib "सामान्य" क्लासलोडर के लिए अदृश्य है। तो तकनीकी रूप से, आपको डेटा को दृश्यमान बनाने के लिए, /conf/catalina.properties को /conf/catalina.properties के अपने /lib फ़ोल्डर (या, कम से कम, कॉन्फ़िगर करने योग्य पथ में /conf/catalina.properties में /conf/catalina.properties सेटिंग द्वारा निर्दिष्ट) में /conf/catalina.properties स्रोत कारखाना

या, जैसा कि आपने प्रयास किया था, डेटा स्रोत फैक्ट्री को कॉपी करना /WEB-INF/lib में भी इसे ठीक कर देगा। वेबपैप /WEB-INF/lib का अर्थ है टोमकैट /lib फ़ोल्डर की तुलना में क्लासलोडिंग में उच्च प्राथमिकता। इसलिए यदि डेटा स्रोत फैक्ट्री /WEB-INF/lib में पाई जाती है, तो इसे वहां से लोड किया जाएगा। चूंकि जेडीबीसी चालक भी वहां है, यह देखा जाएगा। हालांकि यह आपकी ठोस समस्या का सही समाधान नहीं है, यह एक कामकाज है, इसलिए आपको यह नहीं करना चाहिए।

बिल्कुल सही दस्तावेज नहीं है जो विशेष रूप से इस मुद्दे पर लक्षित है। टॉमकैट क्लास लोडर हाउ-टू हालांकि टॉमकैट में क्लास लोडिंग पदानुक्रम को समझने में मदद करेगा।

यह भी देखें:

तो मैंने अपनी गलती का पता लगाया है, अब मैं बस कुछ अंतर्दृष्टि की तलाश कर रहा हूं कि वास्तव में क्या हो रहा है। मैं अपाचे टॉमकैट संस्करण 7.0.32 का उपयोग कर रहा हूं। मैं जेडीबीसी के लिए पूलिंग सेट अप करने के लिए इस ट्यूटोरियल का उपयोग कर रहा हूं। मेरे मेटा-आईएनएफ फ़ोल्डर में मैंने एक context.xml फ़ाइल बनाई और इसे वहां रखा।

<?xml version="1.0" encoding="UTF-8"?>

<Context>
    <Resource type="javax.sql.DataSource" name="jdbc/gmustudent"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/official"
        username="root" password="root"
        maxActive="100" maxIdle="20" minIdle="15" initialSize="15" maxWait="10000" />
</Context>

जब मैंने यह लिखा तो मुझे यह त्रुटि मिली

WARNING: Unexpected exception resolving reference
java.sql.SQLException: com.mysql.jdbc.Driver
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:631)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:485)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:539)
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:237)
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
    at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1061)
    at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:671)
    at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:270)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)
    ... 29 more
Oct 31, 2012 11:23:25 AM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: com.mysql.jdbc.Driver
Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8086"]
Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Oct 31, 2012 11:23:25 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 794 ms

यह त्रुटि तब होती है जब मेरे पास मेरी संदर्भ.xml फ़ाइल में यह कथन है। जब मैं इसे हटा देता हूं कोई त्रुटि नहीं।

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 

कारण यह सुनिश्चित करना है कि मेरे पास यह है क्योंकि अपाचे टॉमकैट ट्यूटोरियल में यह कहता है

factory is required, and the value should be org.apache.tomcat.jdbc.pool.DataSourceFactory

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


मुझे एक ही समस्या थी, आपका समाधान मेरे लिए काम नहीं करता था। मुझे 'mysql-connector-java-5.1.30-bin.jar' फ़ाइल को मेरे lib फ़ोल्डर में काम करने के लिए जोड़ना पड़ा, क्योंकि मैं उस ड्राइवर का उपयोग कर रहा था :) चीयर्स।







connection-pooling