0

UserDaoImpl、ForumDaoImplなどのAbstractDaoパターンの実装で任意のSpring/JPAエンティティを編集できるwicketを使用した汎用CRUDアプリを開発しています。

私の改札ページで:@SpringBeanを使用して、使用するものを特定する必要がありPlatformTransactionManagerます。

@SpringBean(name="transactionManagerUser")
private PlatformTransactionManager transactionManagerUser;
private TransactionTemplate txTemplate;

public CrudPage(final PageParameters pps , final AbstractDao<T> dao)
{
  super(pps);
  txTemplate= new TransactionTemplate(transactionManagerUser);
}

transactionManagerUser問題は、これらのDAOが、などのさまざまなトランザクションマネージャーを使用していることtransactionManagerForumです。

これらのtxManagerの名前をコードにハードコーディングすることはできません。プログラムでdaoのtxManagerを取得する必要があります。それを達成する方法は?

どうもありがとう !

- - - - 更新しました - - - -

さて、私はPlatformTransactionManagerCRUDページに渡すことでこの問題を解決しました(そしてtransactionTemplate = new TransactionTemplate(platformTransactionManager)txTemplate'を生成するために使用し、それはうまく機能します。問題を直接解決するわけではありませんが、とにかく、それは機能します。

4

1 に答える 1

3

また、なぜトランザクション ロジックをコードに入れる必要があると思いますか? Spring はアスペクトを使用してトランザクションを宣言的に管理するため、その必要はありません。必要だと思うなら、それは間違っています。

トランザクションは DAO の管轄であってはなりません。複数の DAO が 1 つのトランザクションに参加している可能性があるため、複数のサービスがトランザクションを所有および管理します。

なぜ複数のトランザクション マネージャーが必要なのだろうか。複数のデータベースがある場合は、それぞれに XA ドライバーを使用し、1 つのトランザクション マネージャーを使用して 2 フェーズ コミットを処理する必要があります。

于 2010-12-18T18:32:08.787 に答える