2010-07-26 9 views

Répondre

1

Vous voulez dire de différentes sources de données?

Bien sûr, vous pouvez. C'est ce que JTA est pour.

Assurez-vous que le pilote des sources de données impliquées est XA-awared.


Édité J'ai obtenu ce que vous voulez dire.

L'application que j'ai développée a une telle fonctionnalité. Supposons que vous ayez un contrôle de flux de base ou une structure de gestionnaire pour votre routine de traitement des demandes, vous pouvez toujours démarrer une nouvelle transaction uniquement pour la partie de traitement des erreurs, valider cette nouvelle transaction et restaurer l'originale.

Avec Spring + déclarative contrôle des transactions que vous devez avoir une transaction déclarée autour de la routine de traitement d'erreur, avec une politique de propagation REQUIRES_NEW

+0

salut Adrian ... si ma source de données n'est pas XA-awared .. alors il y aura un problème. –

+0

Eh bien oui ... à moins que vous n'ayez un autre moyen d'effectuer une validation en deux phases dans les sources de données «enrôlées» pour une transaction. –

+0

je veux dire .. supposons que j'utilise hibernate et source de données en tant que fournisseur de connexion .. mais pour un cas je dois annuler l'exécution complète .. mais je veux insérer dans une table avec le temps .. et quelques détails ... i pensé à utiliser la connexion de la source de données et utiliser le processus simple à insérer dans la table en utilisant PreparedStatement ... y aura-t-il un problème de connexion .. –

0

Basé sur le commentaire que vous voulez, effectivement, une transaction autonome pour enregistrer un échec, vous pouvez soit utiliser une deuxième connexion de votre source de données et valider que, en annulant l'échec initial (qui ne nécessite pas de XA, le libellé de votre question suggère que vous voulez valider les deux connexions simultanément); ou si vous pouvez utiliser un autonomous transaction réel pour gérer la connexion à l'intérieur de votre connexion d'origine avant de revenir en arrière. Ceci est probablement plus simple et plus propre, en particulier si votre échec provient réellement d'un appel de paquetage car il peut être traité au moment où l'échec se produit plutôt que d'avoir à vous soucier du client. Dans les grandes lignes:

PROCEDURE log_failure(...) 
IS 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    insert ... 
    commit; 
END log_failure;