JavaRush /Kurslar /All lectures for UZ purposes /Tranzaksiyalarni boshqarish

Tranzaksiyalarni boshqarish

All lectures for UZ purposes
Daraja, Dars
Mavjud

Tranzaksiyalarni to'liq qo'llab-quvvatlash Spring Framework'dan foydalanish uchun eng jiddiy sabablarning biridir. Spring Framework tranzaksiyalarni boshqarish uchun bir xil abstraktsiyani taqdim etadi, bu quyidagi afzalliklarni ta'minlaydi:

  • Turli tranzaksiya API-lari uchun bir xil dasturlash modeli, masalan, Java Transaction API (JTA), JDBC, Hibernate va Java Persistence API (JPA).

  • Deklarativ tranzaksiyalarni boshqarishni qo'llab-quvvatlash.

  • Murakkab tranzaksiya API-lari o'rniga tranzaksiyalarni dasturiy boshqarish uchun soddalashtirilgan API-interfeys.

  • Springning ma'lumotlarga kirish abstraktsiyalari bilan a'lo darajada integratsiya.

Spring Framework tranzaksiyalarni qo'llab-quvvatlash modelining afzalliklari

An'anaviy ravishda Java EE ishlab chiqaruvchilar tranzaksiyalarni boshqarish uchun global yoki lokal tranzaksiyalarni tanlashgan, bu ikki variantning har biri jiddiy cheklovlarga ega. Global va lokal tranzaksiyalar quyidagi bo'limlarda ko'rib chiqiladi, shundan so'ng Spring Framework'dagi tranzaksiyalarni boshqarish vositalari global va lokal tranzaksiya modellari cheklovlarini qanday bartaraf etishini tasvirlaymiz.

Global tranzaksiyalar

Global tranzaksiyalar bir nechta tranzaksiya resurslari bilan ishlashga imkon beradi, odatda relyatsion ma'lumotlar bazalari va xabarlar navbatlari. Dastur serveri global tranzaksiyalarni JTA orqali boshqaradi, bu esa hajmli API-interfeys (bir qismi shikoyat modeli tufayli). Bundan tashqari, JTA'dan UserTransaction odatda JNDI'dan olinishi kerak, bu esa JTA'dan foydalanish uchun JNDI'ni ham ishlatishni talab qiladi. Global tranzaksiyalarni ishlatish dastur kodining potentsial qayta ishlatilishini cheklaydi, chunki JTA odatda faqat dastur serveri muhitida mavjud.

Oldin global tranzaksiyalardan foydalanishning afzal usuli konteyner boshqaruvida bo'lgan EJB tranzaksiyalaridan foydalangan holda edi (Container Managed Transaction/CMT). EJB'dan CMT deklarativ tranzaksiyalarni boshqarish shaklidir (dasturiy boshqaruv o'rniga). EJB'dan CMT tranzaksiya bilan bog'liq bo'lgan JNDI qidiruviga bo'lgan ehtiyojni yo'q qiladi, ammo EJB'dan foydalanishning o'zi JNDI'dan foydalanishni talab qiladi. Bu tranzaksiyalarni boshqarish uchun Java-kod yozish ehtiyojini asosan yo'q qiladi, ammo to'liq emas. Asosiy kamchilik shundaki, CMT JTA va dastur serveri muhitiga bog'langan. Shuningdek, agar siz EJB sinflarida (yoki kamida EJB tranzaksiya fasadida) biznes mantiqingizni amalga oshirishga qaror qilsangiz, u mavjud bo'ladi. Umuman olganda, EJB kamchiliklari shunchalik sezilarliki, bu foydalanishni jozibador qilmaydi, ayniqsa deklarativ tranzaksiyalarni boshqarish uchun yetarli muqobillar bilan solishtirganda.

Lokal tranzaksiyalar

Lokal tranzaksiyalar resursga bog'liq, masalan, JDBC ulanishi bilan bog'liq tranzaksiya holatida. Lokal tranzaksiyalar foydalanishda osonroq bo'lishi mumkin, ammo sezilarli kamchilikka ega: Ular bir nechta tranzaksiya resurslari bilan ishlay olmaydi. Masalan, JDBC ulanishidan foydalanib tranzaksiyalarni boshqaradigan kod JTA'dagi global tranzaksiyada bajarilishi mumkin emas. Dastur serveri tranzaksiyalarni boshqarishda ishtirok etmagani uchun, u bir nechta resurslar bilan to'g'ri ishlashni ta'minlay olmaydi. (E'tibor bering, aksariyat dasturlar bitta tranzaksiya resursidan foydalanadi.) Yana bir kamchilik shundaki, lokal tranzaksiyalar dasturlash modeliga agressiv tarzda ta'sir qiladi.

Spring Framework'da bir xil dasturlash modeli

Spring global va lokal tranzaksiyalar kamchiliklarini bartaraf etadi. Bu dastur ishlab chiquvchilariga har qanday muhitda bir xil dasturlash modelidan foydalanishga imkon beradi. Siz o'zingizning kodingizni bir marta yozasiz va u o'z navbatida turli muhitlarda turli tranzaksiyalarni boshqarish strategiyalaridan foydalanishi mumkin. Spring Framework deklarativ va dasturiy tranzaksiyalarni boshqarishni ta'minlaydi. Foydalanuvchilarning ko'pchiligi deklarativ tranzaksiyalarni boshqarishni afzal ko'radi, biz ham ko'plab holatlarda shuni tavsiya qilamiz.

Dasturiy tranzaksiyalarni boshqarishda ishlab chiquvchilar Spring Framework'dan tranzaksiya abstraksiyasiga duch keladilar, bu har qanday asosiy tranzaksiya infrastrukturasi bilan ishlay oladi. Afzal ko'riladigan deklarativ modelda ishlab chiquvchilar tranzaksiyalarni boshqarish bilan bog'liq kodni oz yozadilar yoki umuman yozmaydilar va shuning uchun Spring Framework yoki boshqa tranzaksiya API-interfeysiga bog'liq emas.

Tranzaksiyalarni boshqarish uchun dastur serveri kerakmi?

Spring Framework tranzaksiyalarni boshqarishni qo'llab-quvvatlab, Java-dasturlar uchun dastur serverining majburiy mavjudligi haqidagi an'anaviy qoidalarni o'zgartiradi.

Xususan, agar gap faqat EJB sinflari orqali deklarativ tranzaksiyalar haqida ketsa, dastur serveri talab qilinmaydi. Aslida, hatto sizning dastur serveringiz to'liq funktsional JTA vositalariga ega bo'lsa ham, Spring Framework deklarativ tranzaksiyalar CMT'dan ko'proq funksional va ishlab chiqaruvchan dasturlash modelini ta'minlaydi, deb o'ylashingiz mumkin.

Odatda, dastur serverining JTA imkoniyatlari faqat dasturga bir nechta resurslar bo'yicha tranzaksiyalarni qayta ishlash talab etilganda kerak bo'ladi, bu esa ko'pgina dasturlar uchun majburiy talablardan biri emas. Yuqori darajadagi ko'plab dasturlar buning o'rniga bitta yaxshi kengaytiriladigan ma'lumotlar bazasidan foydalanadilar (masalan, Oracle RAC). Mustaqil tranzaksiya menejerlari (masalan, Atomikos Transactions va JOTM) boshqa bir variantdir. Albatta, Java Message Service (JMS) va Java EE Connector Architecture (JCA) kabi dastur serverining boshqa vositalari talab qilinishi mumkin.

Spring Framework dasturini to'liq dastur serveriga kengaytirish vaqtini tanlash imkonini beradi. CMT EJB yoki JTA'dan foydalanishning yagona muqobil variantlari lokal tranzaksiyalar bilan (masalan, JDBC ulanishlarida) kod yozish va bu kodni konteyner tomonidan boshqariladigan global tranzaksiyalar doirasida bajarilishi kerak bo'lsa, kodni sezilarli darajada qayta yozishga to'g'ri keladi. Spring Framework'da faqat ba'zi bin ta'riflarini konfiguratsiya faylida o'zgartirish kerak (kodni emas).

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION