Sobes.tech
Middle

Ինչ է @Transactional նշումը Java-ի համատեքստում?

sobes.tech AI

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

@Transactional նշումը Java- ում օգտագործվում է հայտարարական տրանսակցիաների կառավարման համար: Այն թույլ է տալիս սահմանել տրանսակցիաների սահմանները, նշելով, թե որ մեթոդները պետք է կատարվեն մեկ տրանսակցիայի շրջանակում:

Հիմնական аспектներ:

  • Ինտեգրացիա: Ամենից հաճախ օգտագործվում է Spring Framework-ով, EJB-ով կամ այլ ֆրեյմվորկներով, որոնք տրամադրում են տրանսակցիաների կառավարման հնարավորություններ:
  • Պրոքսիավորում: Ֆրեյմվորկը ստեղծում է պրոքսի օբյեկտ, որը շրջապատում է նպատակային օբյեկտը նշված մեթոդներով: Նախքան նշված մեթոդի կանչը, պրոքսը սկսում է տրանսակցիան, իսկ նրա կատարման ավարտին՝ հաստատում կամ հետ է մղում այն՝ կախված արդյունքից (առկա է արտահայտություն):
  • Ատրիբուտներ: Տարբեր ատրիբուտներ կան տրանսակցիայի վարքագիծը կարգավորելու համար, օրինակ՝
    • propagation: որոշում է, թե ինչպես պետք է վարվել տրանսակցիոն մեթոդը մյուս տրանսակցիոն կոնտեքստից կանչելիս: Օրինակ՝ REQUIRED, REQUIRES_NEW, SUPPORTS, NOT_SUPPORTED, NEVER, MANDATORY:
    • isolation: որոշում է, թե ինչ մակարդակի է պետք լինել տրանսակցիայի համար: Օրինակ՝ READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE:
    • readOnly: նշում է, որ տրանսակցիան կատարվում է միայն տվյալների ընթերցման համար, ինչը երբեմն կարող է օպտիմալիզացնել կատարողականությունը:
    • timeout: սահմանում է սպասման ժամանակը տրանսակցիայի համար:
    • rollbackFor և noRollbackFor: նշում են, թե որ արտահայտությունների դեպքում պետք է հետ մղել կամ չհետ մղել տրանսակցիան:

Օրինակ օգտագործում:

// Օրինակ Spring-ում
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    // Այս մեթոդը կիրականացվի տրանսակցիայի շրջանակում
    @Transactional
    public void createUser() {
        // Օգտագործողի ստեղծման և տվյալների բազայում պահպանումը
        // Եթե արտահայտվի RuntimeException, Spring-ը հետ կվերացնի տրանսակցիան
    }

    // Այս մեթոդը կիրականացվի տրանսակցիայի շրջանակում որոշակի կարգավորումներով
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public User findUserById(Long id) {
        // Օգտագործողի որոնում
        return null; // Օրինակ
    }
}

@Transactional-ը պարզեցնում է տրանսակցիաների կառավարմանը, թույլ տալով ծրագրավորողին կենտրոնանալ բիզնես-լոգիկայի վրա, այլ ոչ թե ցածր մակարդակի API-ների վրա՝ ինչպիսիք են JTA կամ JDBC Connection։