/ / c3p0 पूलिंग काम नहीं कर रही है (हाइबरनेट और एक डेटा स्रोत के साथ, tomcat पर) - जावा, हाइबरनेट, टॉमकैट, c3p0, पूलिंग

c3p0 पूलिंग काम नहीं कर रहा है (हाइबरनेट और डेटासेट्स के साथ, टोमकैट पर) - जावा, हाइबरनेट, टोमकैट, सी 3 पी 0, पूलिंग

हमारे पास एक जावा वेब एप्लिकेशन है जो कि टॉमकैट 6 पर चल रहा है, जो दृढ़ता के लिए जार कह रहा है। यह जार tomcat lib फ़ोल्डर में स्थित है, और एक tomcat डेटा स्रोत का उपयोग करता है:

<Resource name="jdbc/mydatasource"
auth="Container"
type="javax.sql.DataSource"
username="USER"
password="PASSWORD"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://HOST:5432/DATABASE"/>

जार एक जावा प्रोजेक्ट का बाइनरी है, जो ORM के लिए हाइबरनेट 3.5.6-फाइनल का उपयोग करता है। हाइबरनेट कॉन्फ़िगरेशन निम्न है:

    <property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.connection.datasource">java:jdbc/mydatasource</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

सबसे पहले, हमने हाइबरनेट- c3p0 बंडल को एप्लिकेशन में शामिल नहीं किया, इसलिए c3p0 सेटिंग्स का उपयोग नहीं किया गया था। और पूरा एप्लिकेशन इस तरह ठीक काम करता है।

हमने एक बेहतर पूलिंग प्रबंधन को सक्षम करने के लिए हाइबरनेट-सी 3 पी 0 बंडल को जोड़ा। तो यह बंडल अब ज़ार में दृढ़ता के लिए एम्बेडेड है।

लेकिन अब हमारे पास यह त्रुटि है (यह प्रत्येक स्टार्टअप के बाद प्रकट होता है, जब वेब प्लिपिकेशन दृढ़ता से डेटा पुनः प्राप्त करने की कोशिश करता है):

[टास्क-थ्रेड के लिए com.mchange.v2.async।थ्रेडपर्त्सएसिंक्रोनस रनर @ eafa5f] 13 : 46: 22 WARN - BasicResourcePool $ AcquireTask: () com.mchange.v2.resourcepool.Basi cResourcePool $ AcquireTask @ b321c1 - अधिग्रहण का प्रयास विफल रहा !!! क्लीयरिंग पेंडि एनजी प्राप्त करता है। एक आवश्यक नए संसाधन प्राप्त करने की कोशिश करते हुए, हम सफल होने में विफल रहे अनुमति प्राप्त प्रयासों (30) की अधिकतम संख्या से अधिक है। अंतिम अधिग्रहण tion प्रयास अपवाद: java.lang.NullPointerException sun.jdbc.odbc.JdbcOdbcDriver.getProtocol (JdbcOdbcDriver.java:507) पर sun.jdbc.odbc.JdbcOdbcDriver.ognURL (JdbcOdbcDriver.java:476) पर sun.jdbc.odbc.JdbcOdbcDriver.acpretURL (JdbcOdbcDriver.java:307) पर java.sql.DriverManager.getDriver (DriverManager.java:253) पर com.mchange.v2.c3p0.riverManagerDataSource.driver (DriverManagerDataS पर ource.java:224) com.mchange.v2.c3p0.riverManagerDataSource.getConnection (DriverManag) erDataSource.java:120) com.mchange.v2.c3p0.rapperConnectionPoolDataSource.getPooled.onpi पर पर (WrapperConnectionPoolDataSource.java:143) com.mchange.v2.c3p0.rapperConnectionPoolDataSource.getPooled.onpi पर पर (WrapperConnectionPoolDataSource.java:132) com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnectionRe पर sourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:137) com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResource) Pool.java:1014) com.mchange.v2.resourcepool.BasicResourcePool.access पर $ 800 (BasicResourc) ePool.java:32) com.mchange.v2.resourcepool.BasicResourcePool $ AcquireTask.run (बेसिक) sourcePool.java:1810) com.mchange.v2.async.TreadreadPerTaskAsynchronousRunner $ TaskThread.run (T hreadPerTaskAsynchronousRunner.java:255)

यह गलत लगता है क्योंकि डेटा स्रोत में परिभाषित पोस्टग्रेजल ड्राइवर के बजाय ओजडबेक ड्राइवर का उपयोग किया जाता है।

क्या आप जानते हैं कि यह त्रुटि क्या दिखाई दे सकती है, और इसे कैसे हल किया जाए?

मैंने हाइबरनेट कॉन्फ़िगरेशन में अलग-अलग चीजों की कोशिश की, जो मैंने स्टैकओवरफ्लो और विभिन्न मंचों में पाया, जो समस्या का समाधान नहीं करते हैं:

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="driverClass">org.postgresql.Driver</property>
<property name="hibernate.c3p0.driverClass">org.postgresql.Driver</property>

मुझे सटीक होना चाहिए कि हमारे पास केवल नियंत्रण के लिए इस्तेमाल किया जाने वाला जार और टॉमकट इंस्टॉलेशन है। हम वेब एप्लिकेशन को संशोधित नहीं कर सकते हैं जो जार कह रहा है।

उत्तर:

उत्तर № 1 के लिए 1

हो सकता है कि आपका ऐप किसी टॉमकैट पर नहीं जा रहा होकॉन्फ़िगर किया गया डेटा स्रोत बिल्कुल हाइबरनेट के माध्यम से काम कर रहा है? क्या आपने संसाधन XML (जो कि c3p0 DataSource के लिए वैसे भी काफी सही नहीं है) को छोड़ देने की कोशिश की है, और सिर्फ c3p0 के लिए हाइबरनेट कॉन्फ़िगर कर रहा है?

<!-- add these -->
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://HOST:5432/DATABASE</property>
<property name="hibernate.connection.username">USER</property>
<property name="hibernate.connection.password">PASSWORD</property>

<!-- same as before -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

<!-- REMOVE THIS! -->
<!-- <property name="hibernate.connection.datasource">java:jdbc/mydatasource</property> -->