2011-09-21 42 views
9

Tôi đã dành vài ngày trên một vấn đề giao dịch ngủ đông-ngủ đông. Tôi tạo một webservice đơn giản với jaxws + mùa xuân + ngủ đông, nó hoạt động tốt nhưng khi tôi gọi một tole web mà sử dụng một lò xo đậu giao dịch ném lỗi sau:Mùa xuân/Hibernate Ngoại lệ: createCriteria không hợp lệ mà không có giao dịch hoạt động

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 

tôi dường như các giao dịch đã được bắt đầu ... nhưng đã xảy ra lỗi.

[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 

Đây applicationContext của tôi:

<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> 

Và 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> 

tôi triển khai ứng dụng web này trên tomcat6. Tôi hy vọng bạn có thể giúp tôi giải quyết vấn đề đó.

Chúc mừng

+0

chỉ để chắc chắn - bean/phương pháp của bạn có chú thích @Transactional? Và cùng một loại đậu được gọi và quản lý trong bối cảnh mùa xuân? –

+0

có đậu của tôi được chú thích với @Transactional và được quản lý bởi Spring. – juliusdev

Trả lời

25

Ok tôi đã tìm được sự cố! Tôi đã xóa dòng này khỏi cấu hình ngủ đông. Mùa xuân quản lý giao dịch và không cần phiên làm việc đó trong chuỗi chủ đề ngủ đông.

<!-- Bind the getCurrentSession() method to the thread. --> 
<property name="current_session_context_class">thread</property> 
Các vấn đề liên quan