როგორ იქცევა სისტემა, თუ ტრანზაქციური ნიშნით აღნიშნული მეთოდის შიგნით ასევე ტრანზაქციური ნიშნით აღნიშნული სხვა მეთოდი იძახება?
sobes.tech AI
პასუხი AI-სგან
Java-ში, როდესაც ტრანზაქციებს იყენებთ (მაგალითად, @Transactional ანოტაციით Spring-ში), თუ ტრანზაქციონალური მეთოდის შიგნით სხვა მეთოდი, რომელიც ასევე აღნიშნულია როგორც ტრანზაქციონალური, გამოიწვევს დამოკიდებულებას პროქსის ტიპისა და ტრანზაქციის პარამეტრების მიხედვით.
ჩვეულებრივ, თუ ეს მოწოდება ხდება ერთ კლასში (შიდა მეთოდის მოწოდება), პროქსი არ იჭერს ამ მოწოდებას და ახალი ტრანზაქცია არ იქმნება — გამოიყენება მიმდინარე ტრანზაქცია (თუ არსებობს).
თუ მოწოდება ხდება გარედან (პროქსის მეშვეობით), მაშინ:
REQUIREDpropagation ტიპით (ჩვეულებრივ), შიდა ტრანზაქცია არ იქმნება, გამოიყენება არსებული.REQUIRES_NEWpropagation-ით, იქმნება ახალი ტრანზაქცია, დროებით შეჩერებულია მიმდინარე.
ამგვარად, როდესაც ტრანზაქციონალური მეთოდი იძახება სხვა ტრანზაქციონალური მეთოდიდან ერთ კლასში, ჩვეულებრივ, გამოიყენება იგივე ტრანზაქცია, და შიდა ანოტაცია ახალი ტრანზაქციის შექმნას არ ახდენს.
თუ გსურთ, რომ შიდა მეთოდი შესრულდეს ცალკე ტრანზაქციაში, მოწოდება უნდა განხორციელდეს პროქსის მეშვეობით (მაგალითად, სხვა ბინით ან თვით-ინექციით).