2016-07-05 4 views
0

infinispanのシングルトンインスタンスを取得でき、インスタンスレベル(キャッシュレベルではない)からXAリソースを取得し、進行中のJTAトランザクションに参加する方法がありますか。インスタンスレベルでJta infinispan

ConfigurationBuilder builder = new ConfigurationBuilder(); 
        builder.transaction().transactionMode(TransactionMode.TRANSACTIONAL); 
        builder.jmxStatistics().enable(); 
        //builder.jmxStatistics() 
        // Construct a local cache manager using the configuration we have defined 
        DefaultCacheManager cacheManager = new DefaultCacheManager(builder.build()); 

これはjtaで自動的に想定されていますか?

または私が使用する必要がない、

GenericTransactionLookup.init() ...!? 誰かがInfinispanでそれを理解するのを助けてください...!

答えて

2

キャッシュを作成しても、トランザクションマネージャには何も登録されません。オフトピックの場合、コードではキャッシュマネージャのみが作成され、デフォルトのキャッシュはgetCache()を呼び出したときにのみ開始され、構成内の他のキャッシュでも同じことが行われます。

トランザクション処理キャッシュは、キャッシュ操作を呼び出すたびに新しいXAResourceインスタンスを登録し、実行中のJTAトランザクションを検出します。 TransactionManagerGenericTransactionManagerLookup経由)が検出され、実行中のトランザクションがない場合は、最初にJTAトランザクションを作成し、その操作を実行し、JTAトランザクションをコミットします。

InfinispanからXAResourceを取得して、JTAトランザクションを手動で登録することはできません。あなたはcache.getAdvancedCache().getXAResource()XAResourceを得ることができますが、のみは回復のためにそれを使用できます。

+0

これは、一度設定すると、キャッシュにするか、トランザクションに含めないかを決めることができません.TTWはトランザクションに参加しているかどうかをチェックする方法...! – peaceUser

+0

文書によると、それはjtaトランザクションを検出します。本当に私はinfinispan側からそのログを特定することはできません。いつかキャッシュはjtaがnull jtaを取得していることを特定しません。 – peaceUser

+0

既存のトランザクションにキャッシュを登録するのを避けることができますが、その後に 'TransactionManager.suspend()'と 'TM.resume()'を後で呼び出さなければなりません。 –

関連する問題