/ / माइग्रेट हाइबरनेट C3P0 पूल को प्रबंधित करने के लिए प्रबंधित करें

स्प्रिंग प्रबंधित करने के लिए Hibernate प्रबंधित C3P0 पूल माइग्रेट करें - जावा, वसंत, हाइबरनेट, लेनदेन, c3p0

मैं अपने आवेदन का उपयोग करता हूं कि वसंत (yfying) हूँकनेक्शन पूल के लिए हाइबरनेट + C3P0। मैं विशिष्ट कारणों के लिए एक प्रबंधित हाइबरनेट संदर्भ का उपयोग कर रहा हूं। मैं सत्र हैंडलिंग के लिए एक उपयोगिता वर्ग "हाइबरनेट यूटिल" का उपयोग कर रहा हूं। वसंत के पहले प्रवास के लिए मैं एक ApplicationContext बना रहा हूं और HibernateUtil में एक सेशनफैक्टरी बीन को प्राप्त करके उस कोड की जगह ले रहा हूं जो SessionFactory बनाने के लिए इस्तेमाल किया गया था। जब मैं स्प्रिंग में अपने पुराने हाइबरनेट.cfg.xml से पूरी तरह से एक सत्र कारखाना बीन बनाता हूं, तो यह सब कुछ अपेक्षित है:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="configLocation" value="classpath:config/hibernate.cfg.xml"></property>

</bean>

hibernate.cfg.xml

<hibernate-configuration>

<session-factory>

<property name="connection.username">user</property>
<property name="connection.url">jdbc:mysql://localhost:3306/mydb?zeroDateTimeBehavior=convertToNull</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="connection.password">pass</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.max_fetch_depth">3</property>
<property name="hibernate.current_session_context_class">org.hibernate.context.ManagedSessionContext</property>
<property name="hibernate.transaction.auto_close_session">false</property>


<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.show_sql">true</property>
<property name="query.substitutions">true 1, false 0, yes "Y", no "N"</property>

<!-- configuration pool via c3p0-->

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

<property name="hibernate.c3p0.acquire_increment">3</property>
<property name="hibernate.c3p0.idle_test_period">120</property> <!-- seconds -->
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.timeout">1800</property>

<!-- mapping files -->
.......

यदि मैं कनेक्शन पूल को बाहरी करता हूं (मैं भी सभी कनेक्शन सेटिंग्स को hibernate.cfg.xml से हटा देता हूं), तो मेरा लेनदेन ठीक से काम नहीं करता है।

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driver}"/>
<property name="jdbcUrl" value="${db.url}"/>
<property name="user" value="${db.user}"/>
<property name="password" value="${db.pass}"/>

</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="configLocation" value="classpath:config/hibernate.cfg.xml"></property>

</bean>

मैंने हाइबरनेट को निर्दिष्ट करने की कोशिश की है।factory_class और हाइबरनेट गुणों को स्प्रिंग बीन कॉन्फ़िगरेशन में ले जाने के बजाय hibernate.cfg.xml का उपयोग करने के लिए सभी को कोई फायदा नहीं हुआ। मैं अभी तक पूरी तरह से स्प्रिंग लेन-देन प्रबंधन पर स्विच नहीं कर सकता।

उत्तर:

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

Imho आपको स्प्रिंग को सब कुछ स्थानांतरित करने का प्रयास करना चाहिए। मेरे अनुभव में जब इसे मिलाया जाता है तो बहुत सारी समस्याएं होती हैं। क्या कोई विशेष कारण है कि आप अभी तक एक स्प्रिंग प्रबंधित लेनदेन प्रबंधन का उपयोग नहीं कर सकते हैं:

<!-- Transaction Management -->
<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

आपके विवरण से यह काफी भिन्न हैपता लगाएँ कि वास्तव में समस्या कहाँ है, यह लेनदेन के साथ है या सेशन के साथ है? जब आप हाइबरनेटप्रॉपर्टीज़ के बाहर डेटा स्रोत का उपयोग कर रहे हैं, तो एक और बिंदु आपके सत्रावरोधी समस्याओं का कारण हो सकता है, वह है कि कनेक्शनप्राइडर कार्यान्वयन हाइबरनेट का उपयोग बदल रहा है। यदि आप निर्दिष्ट करें dataSource हाइबरनेट का उपयोग करेगा DataSourceConnectionProvider(http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/connection/DatasourceConnectionProvider.html) हाइबरनेट कॉन्फ़िगरेशन में डेटा स्रोत सेट करते समय हाइबरनेट उपयोग करेगा DriverManagerConnectionProvider (http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/connection/DriverManagerConnectionProvider.html) इन दोनों के बीच का अंतर आपकी समस्याओं का कारण हो सकता है।