/ / कैसे अजीब c3p0 त्रुटियों - जावा, हाइबरनेट, tomcat, tomcat7, c3p0 प्राप्त किए बिना tomcat 7 पर एक हाइबरनेट- c3p0 परियोजना को फिर से तैनात करने के लिए

कैसे अजीब c3p0 त्रुटियों - जावा, हाइबरनेट, tomcat, tomcat7, c3p0 प्राप्त किए बिना टेंक 7 पर एक हाइबरनेट- c3p0 परियोजना को फिर से तैनात करें

अगर इस परियोजना को टेरैट 7 पर नेटबीन्स के माध्यम से फिर से तैनात किया गया है, तो मुझे गलतियां मिलती हैं

java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Exception in thread "Timer-5" java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$AsyncTestIdleResourceTask
at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 5 more

आज हमें एक और विचित्र त्रुटि हुई जब हमने टेंकैट 7 पर परियोजना को फिर से तैनात करने की कोशिश की

[5:07:02 PM] Nitin - Webscraper/Tester,Java/PHP developer: java.lang.NoClassDefFoundError: com/mchange/v2/lang/VersionUtils
com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:104)
com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:531)
com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78)
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700)
org.hibernate.loader.Loader.doQuery(Loader.java:801)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
org.hibernate.loader.Loader.doList(Loader.java:2542)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
org.hibernate.loader.Loader.list(Loader.java:2271)

हमें काफी समय से इस तरह की अजीब त्रुटियाँ हो रही हैं। जब हम डीबग करने का प्रयास करते हैं, तो हम पहले से मौजूद कक्षाएं पाते हैं।

मैं क्या सोच सकता हूं कि c3p0 कनेक्शन-पूलिंग थ्रेड्स झूल रहे हैं, जो या तो फिर से तैनाती पर ठीक से नष्ट नहीं हुए हैं, या कुछ सक्रिय-कनेक्शन निष्पादित या कुछ समान हो सकते हैं।

क्या ऐसी परियोजना को फिर से तैनात करने के बारे में कोई सर्वोत्तम प्रथा है जो हाइबरनेट और c3p0 का उपयोग करता है? क्या कोई कोड है जिस पर मुझे लिखना है contextDestroyed c3p0 धागे के उचित समापन के लिए?

उत्तर:

जवाब के लिए 2 № 1

मुझे भी इसी समस्या का सामना करना पड़ रहा था और मैं अपने टॉमकैट कंसोल में नीचे की चेतावनी देख सकता था

जुलाई 30, 2014 3:20:16 PM org.apache.catalina।लोडर चेतावनी: वेब एप्लिकेशन [/ rmlcrm] ने C3P0PooledConnectionPoolManager [पहचानToken-> 1hge50p9311d8syohfjimz | 19ddf1db] -HelperThread- # 0] को रोकने के लिए एक थ्रेड शुरू किया है। इस बात की संभावना है कि इससे स्मृति रिसाव पैदा होगा। धागे के ढेर का पता लगाने: java.lang.Object.wait (मूल विधि) com.mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run (ThreadPoolAsynchronousRunner.java:635)

मैं इसका हल जानने के लिए बहुत पढ़ रहा था और पोस्ट के पार आया सीतनिद्रा में होना: OutOfMemoryError: PermGen space

निकोलस हेमले द्वारा पोस्ट में टिप्पणी में से एकएक कस्टम ServletContextListener को जोड़ने का सुझाव दिया गया है और स्पष्ट रूप से C3P0 कनेक्शन को श्रोता के संदर्भ में Destroyed () विधि से बंद कर दिया गया है जिसे तब लागू किया जाएगा, जब एप्लिकेशन अन-तैनात है।

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

आप पढ़ना भी चाह सकते हैं हाइबरनेट: सत्र फैक्ट्री को बंद करने से c3p0 कनेक्शन पूल बंद नहीं होता है


जवाब के लिए 2 № 2

कुछ विचार:

1) यदि आपने अपना हाइबरनेट एप्लिकेशन सेट किया हैअपने वेब-ऐप के जीवन-चक्र का मानचित्रण करने के लिए जीवनचक्र आवेदन करने के लिए रीसायकल, अक्सर अर्थ एक contextDestroyed तरीका। हाइबरनेट-बोल में, यह सत्र पूल है जो कनेक्शन पूल को लपेटता है; सुनिश्चित करें कि आपका एप्लिकेशन SessionFactory करीब है () एड जब आपका ऐप गर्म redeploy पर बंद हो जाता है, तो एक समरूपता होनी चाहिए: या तो में contextInitialized या पहले अनुरोध पर आलसी होकर, आपका सत्रावधान आरंभ किया जाना चाहिए। इसे एप्लिकेशन शटडाउन पर नष्ट कर दिया जाना चाहिए।

2) c3p0 का नवीनतम (अभी भी पूर्व-रिलीज़) संस्करणC3p0 थ्रेड्स और समय-समय पर समाप्त हो चुके वेब-ऐप ClassLoaders से प्राप्त वस्तुओं के बीच संदूषण की संभावना को कम करने के लिए कुछ सेटिंग्स डिज़ाइन की गई हैं, खासकर अगर c3p0 एक गैर-वेब ऐप विशिष्ट ClassLoader द्वारा लोड किया गया है (उदाहरण के लिए अगर c3p0 lib $ CATALINA_HOME / lib के बजाय में रहता है एक वेबपर् लिब डाइरेक्टरी)। यदि आप एक प्रीलेरेज [अब नवीनतम है] में अपग्रेड करने के लिए तैयार हैं c3p0-0.9.5-pre5], फिर निम्न नई कॉन्फ़िगरेशन सेटिंग्स आज़माएँ:

 c3p0.privilegeSpawnedThreads=true
c3p0.contextClassLoaderSource=library

उम्मीद है की यह मदद करेगा!