2009-04-11 2 views
2

私はこの問題をしばらく取り組んできましたが、解決策は見当たりません。誰も私を助けることができると思う。Spring:トランザクションマネージャが設定されていません

私はHibernateTransactionManagerを設定しました。しかし、ログファイルに次のメッセージが表示されます。

DEBUG [http-8080-1] AnnotationTransactionAttributeSource.getTransactionAttribute(107)|トランザクション方法[cashIn]属性の[PROPAGATION_REQUIRED、ISOLATION_DEFAULT、-nl.forestfields.picnic.domain.model.exception.IllegalCostException]

DEBUG [HTTP-8080から1] AnnotationTransactionAspect.createTransactionIfNecessary(267)を追加|トランザクションマネージャが設定されていないためにトランザクションジョインポイントをスキップする[nl.forestfields.picnic.view.controller.ShoppingListController.cashIn]

また、例外の場合、トランザクションはロールバックされません。

ここに私の設定があります:

ピクニック-servlet.xml:

<beans> 

    <context:component-scan base-package="picnic" /> 
    <context:annotation-config /> 

    <tx:annotation-driven /> 
    . 
    . 
    . 

ピクニック・コンテキスト-db.xml:

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

    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
     </props> 
    </property> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"> 
     <value>${hibernate.connection.driver_class}</value> 
    </property> 
    <property name="url"> 
     <value>${hibernate.connection.url}</value> 
    </property> 
    <property name="username"> 
     <value>${hibernate.connection.username}</value> 
    </property> 
    <property name="password"> 
     <value>${hibernate.connection.password}</value> 
    </property> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

いるはずのコードがトランザクション内で実行する:

@Transactional(rollbackFor=IllegalCostException.class) 
public ModelAndView cashIn(@RequestParam final Long id) throws IllegalCostException, llegalOrderStateException, IllegalShoppingListStateException { 

    final ShoppingList shoppingList = shoppingListRepository.getById(id); 
    shoppingList.cashIn(); 
    shoppingListRepository.add(shoppingList); 

    return new ModelAndView(...); 
} 

誰でも問題を見ることができますか?

乾杯、 Jippe

答えて

5

<tx:annotation-driven /> 
     to 
<tx:annotation-driven transaction-manager="transactionManager" /> 

が、ここで、他の問題は見つかりませんでした変更してみてください。

+0

2.5年後...あなたの答えは私の問題を解決しました。申し訳ありませんがあなたの答えを正解として受け入れることはできませんが、少なくともあなたは私から+1があります。 – Paul

2

また、ロールバックはのチェックされていない例外に対してのみ発生します。あなたがチェック例外のためにロールバックする場合は、@Transactional注釈でそれを宣言する必要があります :

@Transactional(rollbackFor = { IllegalCostException.class, llegalOrderStateException.class }) 
public ModelAndView cashIn(@RequestParam final Long id) throws IllegalCostException, llegalOrderStateException, IllegalShoppingListStateException { 

    final ShoppingList shoppingList = shoppingListRepository.getById(id); 
    shoppingList.cashIn(); 
    shoppingListRepository.add(shoppingList); 

    return new ModelAndView(...); 
} 
0

あなたは二つの異なるBean定義ファイルを持っていると言います。これらは2つの異なるアプリケーションコンテキストを表しているのでしょうか?

春のドキュメントはこれではっきりしませんが、それ自体が同じコンテキスト内にある場合は、 "transactionManager" Beanだけを自動検索します。 transactionManagerが親コンテキスト内にある場合、トランザクションマネージャはそれを見つけることができません。

jerrish氏によると、要素のtransaction-manager属性を明示的に指定するだけです。注釈駆動型/ >

to 

< TX:注釈駆動型トランザクション・マネージャ= "のTransactionManager"/>

ができませんでした

0

`< TXを変更してみてくださいここで他の問題を見つける。

春-ドキュメンテーションが言うので、これは、解決することはできません。

あなたがワイヤーにしたい PlatformTransactionManagerのBean名場合 タグのtransaction-manager属性を省略することができますinには という名前のtransactionManagerがあります。 Using @Transactional

何か他のものがprolemを解決するための...

1

を変更している必要があり、あなたが宣言する必要があります。ピクニック・コンテキスト-db.xml

<tx:annotation-driven /> 

とではないピクニックサーブレットxxx

lrdblck

関連する問題