2011-09-21 11 views
9

春の休止トランザクションの問題で数日間過ごしました。私はJAXWS +春+休止状態と簡単なWebサービスを作成し、それが正常に動作しますが、私が呼ぶとき、トランザクションの豆スプリングを使用したWeb Methodeのは、次のエラー投げた:私は、トランザクションが開始されているように思わSpring/Hibernate例外: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に、このWebアプリケーションを展開しました。 この問題を解決するのを手伝ってください。

乾杯

+0

あなたのbean /メソッドに@Transactionalアノテーションが付いているだけですか?同じ豆は、春の文脈で呼び出され、管理されますか? –

+0

はい私のbeanは@Transactionalでannotedされ、Springによって管理されます。 – juliusdev

答えて

25

いいえ問題が見つかりました。私は休止状態の設定からこの行を削除しました。 Springはトランザクションを管理し、セッションが休止状態のスレッドを保持している必要はありません。

<!-- Bind the getCurrentSession() method to the thread. --> 
<property name="current_session_context_class">thread</property> 
関連する問題