2016-07-05 1 views
0

Existe-t-il un moyen, que je puisse obtenir l'instance singleton d'infinispan, et donc obtenir la ressource XA au niveau de l'instance, (pas au niveau du cache), et m'enrôler dans la transaction JTA en cours. Essayé ci-dessus, ce qui est supposé avec dans le jta, automatiquement? !!infinispan avec Jta au niveau de l'instance

ou dois-je utiliser,

GenericTransactionLookup.init() ...!? Quelqu'un s'il vous plaît aidez-moi à le comprendre dans Infinispan ...!

Répondre

2

La création d'un cache n'enregistre rien avec le gestionnaire de transactions. Hors sujet, votre code crée uniquement le gestionnaire de cache, le cache par défaut ne démarre que lorsque vous appelez getCache(), et il en va de même pour les autres caches de la configuration.

Un cache transactionnel enregistre une nouvelle instance XAResource chaque fois que vous appelez une opération de cache et qu'il détecte une transaction JTA en cours d'exécution. S'il a détecté un TransactionManager (via GenericTransactionManagerLookup) mais qu'il n'y a pas de transaction en cours d'exécution, il crée d'abord une transaction JTA, exécute l'opération et valide la transaction JTA. (Avec une exception pour les opérations de lecture.)

Vous ne pouvez pas obtenir un XAResource d'Infinispan pour s'enrôler manuellement avec la transaction JTA. Vous pouvez obtenir un XAResource avec cache.getAdvancedCache().getXAResource(), mais vous pouvez seulement l'utiliser pour la récupération.

+0

Ce qui signifie que je ne peux pas décider quel cache doit être, ou ne doit pas être en transaction, une fois configuré. BTW comment vérifier s'il a participé à la transaction ou non ...!? – peaceUser

+0

Selon le document, il dit, il détecte la transaction jta .. vraiment je ne peux pas identifier les journaux pour cela à partir du côté infinispan. Parfois, le cache n'identifie pas le jta obtenant un jta nul .. !! – peaceUser

+0

Vous pouvez éviter d'enrôler le cache dans une transaction existante, mais vous devez alors appeler 'TransactionManager.suspend()' avant et 'TM.resume()' après. –