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.
GO TO FULL VERSION