1

Tomcat の下に Web アプリケーションがあり、Hibernate 4X、Spring 4X、およびトランザクション マネージャー (現在 1 つの MySQL リソース) として HibernateTransactionManager と統合されています。

構成配布の一部として、MySQL 以外の形式で構成を保存するキャッシュ マネージャーとしてInfinispanと統合する必要があります。つまり、Hibernate の第 2 レベルのキャッシュ統合ではありません!

Infinispan を Spring と統合することができましたが、MySql トランザクションと Infinispanが同じ @Transactional にある必要があるため、大きな問題に直面しています。

Spring JTA と、Atomikos (例) をグローバル トランザクション マネージャーとして統合する方法について読みましたが、エンティティ全体を組み合わせて連携できるかどうか、およびどのように連携できるかはわかりません :(

Infinispan がこの JTA 実装を認識し、 MySql と Infinispan を 1 つのグローバル トランザクションとして処理するように、Atomikos Spring JTA を使用するオプションがあるかどうかを知る必要があります。(2PC)

ありがとう!

4

1 に答える 1

1

最初に、Spring + Hibernate + JTA を一緒に構成することをお勧めします。ここにとてもいいチュートリアルがあります。すべてを正しく構成した場合、あるタイプの Bean が 1 つあるはずですTransactionManager。上記のチュートリアルでは、このブロック内で構成されています。

@Bean(initMethod = "init", destroyMethod = "close")
public TransactionManager transactionManager() throws Throwable {
  UserTransactionManager userTransactionManager = new UserTransactionManager();
  userTransactionManager.setForceShutdown(false);
  return userTransactionManager;
}

これで、このトランザクション マネージャーを使用するように Infinispan を構成できます。これを実現する最も簡単な方法は、独自のTransactionManagerLookupを実装することです。これにより、上で作成したトランザクション マネージャーが返されます。

最後に、次のようにトランザクション キャッシュを作成する必要があります。

<local-cache name="transactional">
    <transaction mode="FULL_XA"/>
</local-cache>

その後、すべてが同じトランザクション マネージャーで機能し、Spring は単一の@Transactionalアノテーション内ですべてを処理する必要があります。

于 2015-01-19T15:13:41.490 に答える