मैं माइस्क्लुएल 5.1.30 के साथ एक साथ हाइबरनेट का उपयोग करता हूं।डेडलॉक्स से बचने के लिए हाइबरनेट के लिए आवश्यक सी 3 पी 0 सेटिंग्स क्या हैं
- c3p0-0.0.1.2.jar
- mysql-कनेक्टर-जावा-5.0.3-bin.jar
- hibernate3.jar:
मैं अगले पुस्तकालय हैं
मैं विन्यास के लिए एक hibernate.cfg.xml का उपयोग करें:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/fooDatatbase</property>
<property name="connection.username">foo</property>
<property name="connection.password">foo123</property>
<!-- Use the C3P0 connection pool provider -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_periods">3000</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<mapping resource="databaselayer/mail/Mail.hbm.xml"/>
<mapping resource="databaselayer/courses/Course.hbm.xml"/>
<mapping resource="databaselayer/price/Price.hbm.xml"/>
<mapping resource="databaselayer/contact/Contact.hbm.xml"/>
<mapping resource="databaselayer/artists/Musician.hbm.xml"/>
<mapping resource="databaselayer/concerts/Concert.hbm.xml"/>
<mapping resource="databaselayer/welcome/Welcome.hbm.xml"/>
<mapping resource="databaselayer/information/Information.hbm.xml"/>
</session-factory>
</hibernate-configuration>
हाइबरनेट किताब के साथ जावा हठ में, c3p0 कॉन्फ़िगरेशन विकल्प समझाए गए हैं:
- hibernate.c3p0.min_size यह JDBC कनेक्शन की न्यूनतम संख्या है कि C3P0 बिल्कुल तैयार रहता है समय
- hibernate.c3p0.max_size यह पूल में कनेक्शन की अधिकतम संख्या है। यदि यह संख्या समाप्त हो गई है तो रनटाइम पर एक अपवाद फेंक दिया जाता है।
- hibernate.c3p0.timeout आप टाइमआउट अवधि निर्दिष्ट करते हैं (इस मामले में, 300 सेकंड) जिसके बाद पूल से निष्क्रिय कनेक्शन हटा दिया जाता है)।
- hibernate.c3p0.max_statements कैश किए जाने वाले बयानों की अधिकतम संख्या। हाइबरनेट के साथ सर्वश्रेष्ठ प्रदर्शन के लिए तैयार बयानों की कैशिंग आवश्यक है।
- hibernate.c3p0.idle_test_periods यह सेकंड में iddle समय से पहले एक कनेक्शन स्वचालित रूप से मान्य है है।
मैं जावा 1.5.0_09 और बिल्ला 6.0 का उपयोग करें। मेरे पास टॉमकैट में तैनात तीन अनुप्रयोग हैं। उनमें से प्रत्येक एक ऊपर कॉन्फ़िगरेशन फ़ाइल के साथ हाइबरनेट का उपयोग करता है जो ऊपर दिखाया गया है (केवल उपयोगकर्ता नाम, डाटाबेसनाम, पासवर्ड और मैपिंग परिवर्तन को पुनर्स्थापित करता है)।
दुर्भाग्य से उपर्युक्त सेटिंग्स के साथ, कुछ घंटों के बाद मुझे कुछ बुरा डेडलॉक त्रुटियां मिलती है जो टोमकैट को मारने का अंत करती है।
Jan 22, 2009 3:29:07 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com[email protected]2437d -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
Jan 22, 2009 3:29:07 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com[email protected]1dc5cb7 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
Jan 22, 2009 3:29:07 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com[email protected]9cd2ef -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
Jan 22, 2009 3:29:07 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com[email protected]4af355 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
Jan 22, 2009 3:29:07 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com[email protected]1275fcb -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
Jan 22, 2009 3:29:35 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
ऐसा लगता है कि कई लोगों को पहले से ही एक त्रुटि मिली है। मैं वैकल्पिक हल करने के लिए यहाँ http://forum.hibernate.org/viewtopic.php?p=2386237 वर्णित का पालन करने की कोशिश कर अपनी सेटिंग बदली: नई सेटिंग के साथ
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.min_size">0</property>
<property name="hibernate.c3p0.max_size">48</property>
<property name="hibernate.c3p0.timeout">0</property>
<property name="hibernate.c3p0.max_statements">0</property>
, मैं गतिरोध नहीं मिलता है, लेकिन मैं मिलता है:
WARNING: SQL Error: 0, SQLState: 08S01
Jan 24, 2009 5:53:37 AM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.io.EOFException
STACKTRACE:
java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
किसी को भी जानता है कि मैं क्या कर रहा हूँ गलत, और मैं c3p0 सही तरीके से कैसे सेटअप कर सकता हूं?
स्पष्ट रूप से, आपको अपनी संयम बोल्ट को हटाने की आवश्यकता है। –
मुझे लगता है कि प्रत्येक एप्लिकेशन को अपना स्वयं का एप्लिकेशन पूल मिलता है क्योंकि मेरे पास तीन hibernate.cfg.xml फ़ाइलें हैं जैसे एप्लिकेशन के वेब-आईएनएफ/कक्षा फ़ोल्डर में पोस्ट की गई। –
क्या उनके पास एक ही जेएनडीआई नाम है? यदि ऐसा है, तो वे उसी पूल से कनेक्शन देखने के लिए टोमकैट से पूछ रहे हैं। प्रत्येक परियोजना के लिए आपको एक अलग पूल रखने के लिए अलग जेएनडीआई नाम की आवश्यकता है। आपको टॉमकैट एडमिन टूल में 3 जेएनडीआई पूल देखना चाहिए। अगर मैं सही हूं, तो आप केवल एक ही देखेंगे। – duffymo