2011-09-21 7 views
9

मैंने वसंत-हाइबरनेट-लेन-देन के मुद्दे पर कुछ दिन बिताए। मैं jaxws + वसंत + हाइबरनेट के साथ एक सरल वेब सेवा बनाने के लिए, यह ठीक काम करता है लेकिन जब मैं फोन एक वेब methode जो एक लेन-देन संबंधी सेम वसंत का उपयोग निम्न त्रुटि फेंक दिया:वसंत/हाइबरनेट अपवाद: createCriteria सक्रिय लेनदेन के बिना मान्य नहीं है

21 sept. 2011 14:29:29 com.sun.xml.ws.server.sei.EndpointMethodHandler invoke 
GRAVE: org.hibernate.HibernateException: createCriteria is not valid without active transaction 

मैं लगता लेन-देन शुरू कर दिया गया है ... लेकिन कुछ गलत हुआ।

[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Creating new transaction with name [com.cellfish.mediadb.ws.encoder.MediaDBFeeds.testTransaction]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; '' 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Opened new Session [[email protected]] for Hibernate transaction 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Preparing JDBC Connection of Hibernate Session [[email protected]] 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Exposing Hibernate transaction as JDBC transaction [jdbc:mysql://xxxxxxxx, MySQL-AB JDBC Driver] 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Found thread-bound Session [[email protected]] for Hibernate transaction 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Participating in existing transaction 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Participating transaction failed - marking existing transaction as rollback-only 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Setting Hibernate transaction on Session [[email protected]] rollback-only 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Initiating transaction rollback 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Rolling back Hibernate transaction on Session [[email protected]] 
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Closing Hibernate Session [[email protected]] after transaction 
21 sept. 2011 14:29:29 com.sun.xml.ws.server.sei.EndpointMethodHandler invoke 

यहाँ मेरी applicationContext:

<context:annotation-config/> 

    <!-- List of packages managed by Spring --> 
    <context:component-scan base-package="..." /> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql://xxxx"/> 
     <property name="username" value="xxx"/> 
     <property name="password" value="xxx"/> 
    </bean> 

    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="packagesToScan" value="xxxx"/> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

और hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <!-- a SessionFactory instance listed as /jndi/name --> 
    <session-factory> 

     <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> 
     <property name="show_sql">true</property> 
     <property name="hibernate.format_sql">true</property> 
     <property name="hibernate.connection.pool_size">1</property> 

     <property name="hibernate.jdbc.batch_size">20</property> 
     <!-- Bind the getCurrentSession() method to the thread. --> 
     <property name="current_session_context_class">thread</property> 
     <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</property> 
     <property name="hibernate.cache.use_second_level_cache">true</property> 
     <property name="hibernate.cache.use_query_cache">true</property> 

     <!-- Lucene Search --> 
     <property name="hibernate.search.default.directory_provider">org.hibernate.search.store.RAMDirectoryProvider</property> 

    </session-factory> 

मैं tomcat6 पर इस webapp को तैनात किया। मुझे उम्मीद है कि आप इस मुद्दे को हल करने में मेरी मदद कर सकते हैं।

चीयर्स

+0

बस यह सुनिश्चित करने के लिए - आपके बीन/विधि में @ ट्रांसेक्शनल एनोटेशन है? और एक ही बीन वसंत संदर्भ में बुलाया और प्रबंधित किया जाता है? –

+0

हां मेरा बीन @ ट्रान्सैक्शनल के साथ एनोट किया गया है और स्प्रिंग द्वारा प्रबंधित किया गया है। – juliusdev

उत्तर

25

ठीक है मुझे समस्या मिली! मैंने इस लाइन को हाइबरनेट कॉन्फ़िगरेशन से हटा दिया। वसंत लेनदेन का प्रबंधन करता है, और इसकी आवश्यकता नहीं है कि सत्र हाइबरनेट थ्रेड में हो रहा है।

<!-- Bind the getCurrentSession() method to the thread. --> 
<property name="current_session_context_class">thread</property> 
संबंधित मुद्दे