Sobes.tech
Junior — Middle

Ինչպե՞ս է վարվում համակարգը, եթե տրանզակցիոն նշված մեթոդի ներսում կանչվում է ևս մեկ տրանզակցիոն նշված մեթոդ։

sobes.tech AI

Պատասխան AI-ից

Java-յում, երբ օգտագործվում են գործարքներ (օրինակ, @Transactional նշանով Spring-ում), եթե ներսում կանչվի մյուս նշված որպես գործարքային մեթոդ, ապա վարքագիծը կախված է պրոքսի տեսակից և գործարքների կարգավորումներից:

Անհատական, եթե կանչը կատարվում է նույն դասի ներսում (մեթոդի ներքին կանչ), պրոքսին չի բռնում այդ կանչը, և նոր գործարք չի ստեղծվում — օգտագործվում է ընթացիկ գործարքը (եթե կա):

Եթե կանչը կատարվում է դուրս (պրոքսի միջոցով), ապա՝

  • REQUIRED propagation տեսակի դեպքում (նույնպես որպես ստանդարտ), ներսում գործարք չի ստեղծվում, օգտագործվում է գոյություն ունեցողը:
  • REQUIRES_NEW propagation-ով, ստեղծվում է նոր գործարք, ժամանակավորապես դադարեցնելով ընթացիկը:

Այսպիսով, երբ կանչվում է գործարքային մեթոդը մյուս գործարքային մեթոդից նույն դասում, սովորաբար օգտագործվում է նույն գործարքը, և ներքին նշումը չի ստեղծում նոր գործարք:

Եթե ցանկանում եք, որ ներքին մեթոդը աշխատի առանձին գործարքում, կանչը պետք է կատարվի պրոքսի միջոցով (օրինակ, այլ բինով կամ ինքն-միջնորդությամբ):