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.
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
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
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. –