2011-06-21 17 views
1

mybatis-3.0.1.4とmybatis-spring integration 1.0.1がFuse(OSGi)内にデプロイされています。私はSQLServer 2008の中で基本的なデータベースを作成しました。春に私はTransactionAwareDataSourceProxyデータソースとDataSourceTransactionManagerトランザクションマネージャを設定しました。トランザクションはロールバックされません

私は自分のバンドルを作成して、データベースにいくつかの行を挿入するヒューズ内に配置しました。私は構成されたデータソースとトランザクションマネージャを使用するようにバンドルに指示しました。ロジックを実行するメソッドは、次のようになります。

@Transactional(propagation=Propagation.REQUIRED) 
public void go(RecsCashContext context) throws ActionException { 

このメソッドが例外をスローすると、トリガーされる期待される動作を見てSpringに従うことができます。これは私にスプリングJtaTransactionManagerdoRollBack(..)につながります。

私はデータベースを見ると、以前の挿入がロールバックされていないので不安定な状態にあることを除いて、すべてが有望に見えます。

私はこの1つを失いました。私は情報をオンラインで見つけるのに苦労しています。何かご意見は?

答えて

1

Fuse(servicemix)は既に、org.apache.aries.transaction.manager_0.2.0.incubating [49]というバンドル内のOSGiサービスを介してトランザクションマネージャを公開しています。その結果、トランザクションマネージャサービスを調べていたときに、バンドル49によって公開されたサービスが最初に取得されました。

この

は明らかに私が興味を持ったトランザクションマネージャを指定することで解決した瞬間に、私は豆名propery使用して、これをやっている:このものの

<osgi:reference id="transactionManager" bean-name="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager" /> 

もフィルタを用いて行うことができるが、しかし、好ましくは、自分自身を提供するのではなく、既に公開されているトランザクションマネージャサービスを利用するだけです。

3

どのような例外がスローされますか?特定の例外がスローされたときに明示的にロールバックするようSpringに指示しない限り、処理は続行されます。デフォルトでは、チェックされていない例外(RuntimeExceptionなど)がスローされた場合にのみ、Springのトランザクション処理はロールバックされます。あなたのケースでは、あなたはActionExceptionが発生したときに発生するロールバックを期待している場合は、以下の変更を行う場合を除き、あなたは運の出ている:

@Transactional(rollbackFor={ActionException.class}) 
public void go(RecsCashContext context) throws ActionException { 

詳細は、特にセクション10.5.6.1で、hereであります@取引設定

+0

このシナリオでは、実際にトランザクション性をテストする目的でランタイム例外を強制しています。私が言及したように、私はSpringのソースをたどってロールバックが有効であることを確認することができます。 – AndyF

+0

あなたの永続性はすべてgo(...)メソッド内で処理されているのですか、あるいはいくつかの挿入が異なる伝播ルールを持つ別のメソッドで行われていますか? – Fil

+0

同じように...私の懸念は、おそらくmybatisがそれが伝播する各挿入に対して新しいトランザクションを作成していることです。なぜそれがこれを行うのか分かりますが。 – AndyF

関連する問題