C3P0 को सर्वोत्तम तरीके से लागू करने के लिए इस उत्तर को जांचें
C3P0 :
एंटरप्राइज़ एप्लिकेशन के लिए, C3P0 सबसे अच्छा तरीका है। C3P0 JDDI-bindable DataSources के साथ पारंपरिक (DriverManager- आधारित) JDBC ड्राइवरों को बढ़ाने के लिए एक आसान-से-उपयोग की जाने वाली लाइब्रेरी है, जिसमें कनेक्शन और स्टेटमेंट पूलिंग को लागू करने वाले डेटा स्रोत शामिल हैं, जैसा कि jdbc3 कल्पना और jdbc2 std एक्सटेंशन द्वारा वर्णित है। C3P0 ने डीबी डिस्कनेक्ट और फिर से शुरू होने पर पारदर्शी पुनर्संरचना को भी मजबूती से संभाला जबकि डीबीसीपी ने कभी भी कनेक्शन को पुनर्प्राप्त नहीं किया यदि लिंक को इसके नीचे से निकाला गया था।
यही कारण है कि c3p0 और अन्य कनेक्शन पूल ने भी स्टेटमेंट कैश तैयार किया है- यह एप्लिकेशन कोड को इस सब से निपटने से बचने की अनुमति देता है। बयानों को आमतौर पर कुछ सीमित LRU पूल में रखा जाता है, इसलिए सामान्य कथन एक रेडीस्टेमेंट उदाहरण का पुन: उपयोग करते हैं।
इससे भी बुरी बात यह है कि DBCP उस एप्लिकेशन को कनेक्शन ऑब्जेक्ट लौटा रहा था जिसके लिए अंतर्निहित परिवहन टूट गया था। C3p0 के लिए एक सामान्य उपयोग मामला अपाचे टोमाकट के साथ शामिल मानक DBCP कनेक्शन पूलिंग को बदलना है। अक्सर बार, एक प्रोग्रामर एक ऐसी स्थिति में चलेगा जहां कनेक्शन सही ढंग से DBCP कनेक्शन पूल में पुनर्नवीनीकरण नहीं किए जाते हैं और c3p0 इस मामले में एक मूल्यवान प्रतिस्थापन है।
वर्तमान अपडेट में C3P0 में कुछ शानदार विशेषताएं हैं। उन लोगों को दिया जाता है:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
यहां, अधिकतम और न्यूनतम पूल कनेक्शन की सीमा को परिभाषित करते हैं, जिसका अर्थ है कि यह आवेदन कितना न्यूनतम और अधिकतम कनेक्शन लेगा। MaxIdleTime()
परिभाषित जब यह निष्क्रिय कनेक्शन जारी करेगा।
DBCP :
यह दृष्टिकोण भी अच्छा है, लेकिन कनेक्शन टाइमआउट और कनेक्शन रिहा करने जैसी कुछ कमियां हैं। C3P0 अच्छा है जब हम उत्परिवर्तित परियोजनाओं का उपयोग कर रहे हैं। हमारी परियोजनाओं में हमने DBCP का उपयोग करके एक साथ कई थ्रेड एग्जीक्यूटिव्स का उपयोग किया, फिर यदि हम अधिक थ्रेड एग्जीक्यूटिव का उपयोग करते हैं, तो हमें कनेक्शन टाइमआउट मिला। इसलिए हम c3p0 कॉन्फ़िगरेशन के साथ गए। मैं DBCP की सिफारिश नहीं करता, विशेष रूप से यह पूल से बाहर कनेक्शन फेंकने की कमी है जब DB चला जाता है, DB वापस आने पर फिर से कनेक्ट करने में असमर्थता और DB में गतिशील रूप से कनेक्शन ऑब्जेक्ट्स को वापस जोड़ने में असमर्थता (यह हमेशा के लिए लटका रहता है) एक पोस्ट JDBCconnect I / O सॉकेट पढ़ें)
धन्यवाद :)