Différences entre la propagation require_new et nestede dans les transactions Spring

Je ne comprends pas la différence de comportement entre les stratégies de propagation PROPAGATION_REQUIRES_NEW et PROPAGATION_NESTED . Il me semble que dans les deux cas, le processus actuel est annulé, mais pas la transaction entière. Des indices?

Voir ce lien: PROPAGATION_NESTED versus PROPAGATION_REQUIRES_NEW? Juergen Hoeller l’explique très bien

PROPAGATION_REQUIRES_NEW lance une nouvelle transaction “interne” indépendante pour l’étendue donnée. Cette transaction sera validée ou annulée complètement indépendamment de la transaction externe, ayant sa propre étendue d’isolation, son propre ensemble de verrous, etc. La transaction externe sera suspendue au début de la transaction interne et reprendra une fois que la transaction interne aura terminé. …

PROPAGATION_NESTED lance en revanche une transaction “nestede”, qui est une véritable sous-transaction de l’existante. Ce qui va arriver est qu’un sharepoint sauvegarde sera pris au début de la transaction nestede. Si la transaction nestede échoue, nous reviendrons à ce sharepoint sauvegarde. La transaction nestede fait partie de la transaction externe, elle ne sera donc validée qu’à la fin de la transaction externe. …

PROPAGATION_REQUIRES_NEW: utilise une transaction complètement indépendante pour chaque étendue de transaction affectée. Dans ce cas, les transactions physiques sous-jacentes sont différentes et peuvent donc être validées ou annulées indépendamment, avec une transaction externe non affectée par l’état d’annulation d’une transaction interne.

PROPAGATION_NESTED: utilise une seule transaction physique avec plusieurs points d’enregistrement sur lesquels il peut revenir. Ces annulations partielles permettent à une scope de transaction interne de déclencher une annulation pour son étendue, la transaction externe pouvant poursuivre la transaction physique malgré la restauration de certaines opérations. Ce paramètre est généralement associé à des points de sauvegarde JDBC. Par conséquent, il ne fonctionne qu’avec les transactions de ressources JDBC.

vérifier la documentation du spring

S’il vous plaît trouver la différence

 1.) Use of NESTED Transaction 

Exécuter dans une transaction nestede si une transaction en cours existe, se comporter comme PROPAGATION_REQUIRED. Transaction nestede prend en charge par spring

2.) Utilisation de la transaction OBLIGATOIRE Soutenez une transaction en cours, créez-en une nouvelle s’il n’en existe pas. . Cela signifie pour le domaine bancaire comme retirer, déposer, mettre à jour la transaction

3.) Utilisation de la transaction REQUIRES_NEW Créez une nouvelle transaction et suspendez la transaction en cours s’il en existe une.