PROPAGATION_REQUIRED attribut de transaction au printemps?
Dans la première étude de cas donnée à http://www.vermatech.com/code/SpringTransactionExamples.html,
programme appelant les deux méthodes à savoir
testModel.deleteAllCountries();
testModel.initializeCountries();
où initializeCountries throws exception d'exécution. Pour les deux méthodes de transaction définition de l'attribut est PROPAGATION_REQUIRED. Encore une transaction dans des deleteAllCountries
la méthode de validation, mais la transaction en vertu de initializeCountries sont annulées(selon les journaux de données dans la même étude de cas).
Comme par PROPAGATION_REQUIRED définition est qu'elle l'Appui d'une opération courante; en créer un nouveau si aucune n'existe. Donc ma question ici est la transaction en vertu de initializeCountries méthode
devrait soutenir l'opération en vertu de deleteAllCountries méthode. Je veux dire à la fois la méthode doit être traitée comme une seule transaction. Selon ma compréhension complète de la transaction doit être validée ou annulée? Vous ne savez pas comment venir journaux sont à traiter séparément.
OriginalL'auteur M Sach | 2011-08-10
Vous devez vous connecter pour publier un commentaire.
"De Propagation nécessaire" est défini comme
Dans votre cas, au-dessus de la deleteAllCountries méthode s'exécute dans une transaction et s'engage. Il n'y a pas de transaction en cours lorsque initializeCountries est appelé, de sorte qu'il s'exécute dans une seconde opération, et roulant en arrière n'a aucun effet sur les modifications apportées par la première méthode.
Propagation s'applique à imbriqués les appels de méthode, de ne pas les successives. Si vous regardez la documentation:
ensuite, vous pouvez voir l'ensemble de ce qui est intérieur et extérieur, aucun ne mentionne les appels successifs. Dans votre cas, l'appel à deleteAllCountries est ultrapériphériques méthode, donc quand il se termine avec succès, puis le Printemps s'engage immédiatement la transaction. Ensuite, votre appel à initializeCountries doit être exécutée dans une transaction distincte, où il est le plus éloigné de la méthode.
Votre hypothèse semble être que le Printemps va tenir la transaction ouverte après la première méthode se termine, mais ce n'est pas la façon dont il fonctionne. Afin d'obtenir l'effet que vous souhaitez, vous pouvez créer une autre méthode sur testModel qui encapsule les appels à deleteAllCountries et initializeCountries, faites que la méthode transactionnelle et de lui donner l'attribut PROPAGATION_REQUIRED. De cette façon, un retour en arrière de la seconde méthode sera la cause de la première méthode de changements pour être restaurées trop, parce que l'emballage de la méthode est de les regrouper ensemble. Sinon, rien ne dit Printemps, ces choses devraient être partie de la même transaction.
Dans ci statement1 qui est extérieur et qui est intérieure de la transaction. Dans Statemt2:- dont l'un est même transaction physique ici
le point est que ni l'une est extérieure ou intérieure, ce n'est pas le cas.
En fait nathan je suis en train d'essayer de comprendre le sens de la déclaration "Toutefois, dans le cas où un intérieur étendue de la transaction jeux de la restauration-seul marqueur, à l'extérieur de la transaction n'a pas décidé sur la restauration lui-même, et donc la restauration (silencieusement déclenchée par l'intérieur étendue de la transaction) est inattendu. Un correspondant UnexpectedRollbackException est levée à ce point." Désolé, mais pouvez-vous m'aider à comprendre avec quelques brèves exemple avec lequel on est, intérieure et extérieure conditions de l'opération? Merci d'avance
Dans ma proposition de fixer la méthode wrapper est externe, les méthodes existantes sont intérieures. mais nous allons voir ce que les autres réponses, peut être que quelqu'un peut l'expliquer mieux que moi. il y a quelques très solide experts qui devrait voir le.
OriginalL'auteur Nathan Hughes