0

私の Java EE (7) プロジェクトでは、Axon フレームワークを使用したいと考えています。Axon のパラメーターの 1 つReplayingClusterは aTransactionManagerですが、Axon は と のみをサポートNoTransactionManagerSpringTransactionManagerます。

しかし、私が JTA と間違えていなければ、トランザクションはEntityManager(私が に保存したJpaEventStore) のアプリケーション サーバーによって既に管理されています。

私の質問: を使用ReplayingClusterする場合NoTransactionManager、これは JTA が引き続きトランザクション機能を提供することを意味しますか?

4

1 に答える 1

3

イベントのリプレイには、数百万ではないにしても数千のイベントが含まれる場合があります。したがって、単一のトランザクションで単一のリプレイを管理することは、多くの場合現実的ではありません (イベント リスナーがトランザクションを必要とする変更を行うと仮定します)。

Axon はTransactionManagerduring replays を使用して、イベントのバッチが再生されるたびに変更をコミットします。このバッチのサイズは、commitThresholdパラメーターを使用して構成できます。

現在、JTA を使用した経験はありませんが、Bean メソッドが呼び出されるとトランザクションが自動的に作成され、そのメソッドが返されるとコミットされることを理解しています。つまり、リプレイをトリガーすると、単一のトランザクションで実行されます。

したがって、私のアドバイスは、独自の実装を に提供することReplayingClusterです。EJB サーバーでは、この実装は次のようになります。

class JtaTransactionManager implements TransactionManager<UserTransaction> {

    @Resource
    private SessionContext ctx;

    @Override
    public UserTransaction startTransaction() {
        UserTransaction utx = ctx.getUserTransaction();
        utx.begin();
        return utx;
    }

    @Override
    public void commitTransaction(UserTransaction utx) {
        utx.commit();
    }

    @Override
    public void rollbackTransaction(UserTransaction utx) {
        utx.rollback();
    }

}

次に、リプレイを開始する Bean にアノテーションを付けて、@TransactionManagement(BEAN)これらのトランザクションを自分で管理することをアプリケーションに通知できます (これは、他の場所でのトランザクション管理には影響しません)。

于 2016-09-22T11:08:16.093 に答える