2012-01-19 65 views
2

私は、次のSpring Frameworkのエラーメッセージを取得しています:SpringFramework UnexpectedRollbackExceptionが表示されるのはなぜですか?

Invocation of getLogoForGlobalConext() in class $Proxy44 threw exception 
org.springframework.transaction.UnexpectedRollbackException: 
Transaction rolled back because it has been marked as rollback-only 
at template/includes/macros.vm line 1651, column 43 

私はmacros.vmを開き、ライン1651を見上げると、それは次のようになります。

#set ($globalLogo = $spaceManager.getLogoForGlobalContext()); 

私の研究から$Proxy44が実際にあるように見えます$spaceManager変数(またはDefaultSpaceManager.javaのインスタンス)。

このメッセージは、WebアプリケーションがWebサーバー/データベースのどこかに座っている画像/添付ファイルをダウンロードしようとするとランダムに表示されます。

attachmentmanagerはSpringのトランザクション管理によって管理され、画像/添付ファイルがダウンロードされる場合は、次のトランザクション属性が使用されます。

1)伝播を - 添付ファイルマネージャのすべてのメソッドのために

2)伝播し、読み取り専用 - 「get」で始まる添付ファイルマネージャのすべてのメソッド。

属性がここで定義されています:http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html

私は考えています何が私が(のような無限大に設定します)取引にタイムアウトを設定する必要があります。

あなたのアドバイスはありがとうございます。あなたの答えが何らかの形で役立つなら、私はポイントを報酬を与えます!

答えて

2

データベースへの書き込みを実行していたgetterメソッドの1つが判明しました。具体的には、数分ごとに情報をキャッシュに更新していました。このアップデートが発生したときにUnexpectedRollbackExceptionがスローされました。このトランザクションは、前述のトランザクション属性で定義されている「読み取り専用」であるため、ゲッター操作中に更新を実行することはできません。

ゲッターメソッドを変更してキャッシュの更新を行わないようにし、期限が切れてもキャッシュを使い、エラーが消え去るようにしました。

これは他の人に役立つことを願っています。

関連する問題