Tranzakciók konfigurálása
A tranzakcióattribútum egy deklaratív tulajdonság, amely automatikusan kezeli az összetevő fejlesztőjének tranzakcióit. Az attribútum beállításával szükségtelenné teszi explicit tranzakcióvezérlők használatát az összetevőben.
A COM+ az összetevő tranzakcióattribútumával határozza meg az egyes aktivált objektumokhoz szükséges tranzakcióvédelem típusát. A követelménytől függően az objektumok megoszthatják a hívó tranzakcióját, új tranzakciót igényelhetnek, vagy tranzakcióvédelem nélkül működhetnek.
A COM+ a következő tranzakcióattribútum-értékeket biztosítja:
-
letiltva
-
Ezt az attribútumértéket általában csak akkor érdemes beállítani, ha biztos benne, hogy az összetevő soha nem fér hozzá erőforrás-kezelőhöz. A tranzakcióattribútum letiltásakor a COM+ figyelmen kívül hagyja az összetevő tranzakciós követelményeit az objektum környezetelhelyezésének meghatározásakor. Ennek eredményeképpen az objektum megoszthatja a hívó környezetét (és tranzakcióját). COM-összetevő COM+-ba való migrálásakor le kell tiltania a tranzakció attribútumát, hogy a nem konfigurált COM-összetevővel megegyező tranzakciós viselkedést tartson fenn.
Jegyzet
A nem konfigurált összetevők olyan COM-összetevő, amely nincs telepítve COM+ alkalmazásban.
-
nem támogatott
-
Az attribútumérték beállításakor a COM+ biztosítja, hogy az összetevőből létrehozott objektumok soha ne vegyenek részt tranzakcióban, függetlenül a hívó tranzakciós állapotától. Ennek az értéknek a deklarálásával biztosíthatja, hogy egy objektum ne szavazzon a hívó tranzakciójára, és ne kezdjen saját tranzakciót. A nem támogatott az összes összetevő alapértelmezett értéke.
-
támogatott
-
Az attribútumérték beállításakor a COM+ biztosítja, hogy az összetevőből létrehozott objektumok részt vegyenek egy tranzakcióban, ha van ilyen. Ezt az értéket akkor deklarálhatja, ha azt szeretné, hogy egy objektum saját tranzakció megkövetelése nélkül osztozzon a hívó tranzakciójában.
-
Kötelező
-
Az attribútumérték beállításakor a COM+ biztosítja, hogy az összetevőből létrehozott objektumok tranzakciósak. Amikor a COM+ aktivál egy objektumot a Kötelező beállítással, megvizsgálja a hívó tranzakciós állapotát. Ha a hívó rendelkezik tranzakcióval, az új objektum szerepel az aktuális tranzakcióban. Ellenkező esetben a COM+ elindít egy tranzakciót, így az új objektum lesz a tranzakció gyökere. Ez az erőforrás-tevékenységeket végző összetevők előnyben részesített beállítása, mivel ez segít a tranzakciók védelmében.
-
újat igényel
-
Az attribútumérték beállításakor a COM+ biztosítja, hogy az összetevőből létrehozott objektumoknak a hívó tranzakciós állapotától függetlenül részt kell vennie egy új tranzakcióban a tranzakció gyökereként. A COM+ automatikusan elindít egy új tranzakciót, amely eltér a hívó tranzakciójától.
Jegyzet
A COM+ nem támogatja a beágyazott tranzakciókat. Amikor egy tranzakciós objektum meghív egy újként megjelölt másik összetevőt, a COM+ létrehoz egy független tranzakciós határt az újonnan aktivált objektumhoz. A második tranzakció csak akkor befolyásolhatja az első tranzakciót, ha az első tranzakció kifejezetten megjegyzi a második tranzakció eredményeit, és módosítja a szavazatát ezen eredmények alapján.
Tranzakcióattribútum-függőségek
Az alábbi táblázat az egyes COM+ tranzakcióattribútum-értékek jellemzőit mutatja be, beleértve az érték tranzakciós jellemzőkre gyakorolt hatását is. A COM+ kényszeríti a JIT aktiválást és a szinkronizálást az összes tranzakciós összetevőre.
Attribútum értéke | Új tranzakció | Ügyfél tranzakciója | Tranzakciógyökér | JIT-aktiválás | Szinkronizálás |
---|---|---|---|---|---|
Fogyatékos |
Soha |
Talán |
Soha |
Szabadon választható |
Szabadon választható |
Nem támogatott |
Soha |
Soha |
Soha |
Szabadon választható |
Szabadon választható |
Támogatott |
Soha |
Ha az ügyfél tranzakcióval rendelkezik |
Soha |
Szükséges |
Szükséges |
Szükséges |
Talán |
Ha az ügyfél tranzakcióval rendelkezik |
Ha az ügyfél nem rendelkezik tranzakcióval |
Szükséges |
Szükséges |
Újat igényel |
Mindig |
Soha |
Mindig |
Szükséges |
Szükséges |
Tranzakcióhatárok
A tranzakcióknak van kezdete, vége, és pontosan egyszer fordulnak elő. A végrehajtás során egy tranzakció meghívhat egy erőforrást, például egy adatbázist vagy egy üzenetsort egy vagy több feladat végrehajtásához. Minden erőforrás a tranzakcióhatárán belül található. A tranzakcióhatáron belüli összes erőforrás, amely több folyamat- és számítógéphatárra is kiterjedhet, egyetlen tranzakcióval rendelkezik. Fontos a konzisztenciának a folyamat és a számítógép határai közötti kezelése.
A COM+ biztosítja a konzisztenciát azáltal, hogy automatikusan kezeli a tranzakcióhatárokat az egyes összetevőkhöz beállított tranzakcióattribútum értéke alapján. A COM+ tranzakció automatikusan áramlik azokhoz az objektumokhoz, amelyeket a tranzakcióban való részvételre utasítottak, és megkerüli azokat az objektumokat, amelyeket a tranzakción kívüli végrehajtásra utasítottak. A COM+ nem támogatja a beágyazott tranzakciókat. Ehelyett a COM+ tranzakciók különállóak és rövid élettartamúak.
A tranzakcióhatár első objektuma a tranzakcióra különleges, és a tranzakció főobjektumának nevezik. A tranzakcióban csak egy gyökérobjektum lehet. A gyökérobjektum alatti tranzakciós hierarchia összes többi objektumát belső objektumnak nevezzük.
Leképezési tranzakciók
Az egyik módja annak, hogy egy objektum szerepeljen a megfelelő tranzakciós határok között, ha megtervezi a tranzakciókat, mielőtt elkezdené írni az összetevőket. A tranzakciók leképezésével meghatározhatja a legjobb beállítást az egyes írott összetevőkhöz. Minél biztosabb az összetevők használatáról, annál könnyebb kiválasztani a megfelelő tranzakcióattribútum-értéket.
Futtatáskor a COM+ megvizsgálja a tranzakció attribútumát annak megállapításához, hogy egy objektum legyen-e egy új tranzakció gyökere, egy meglévő tranzakcióban kell-e létrehozni, vagy nem tranzakciós objektumként kell-e létrehozni.
Az alábbi ábrán egy lehetséges tranzakcióleképezés látható. Az ábrán az ügyfél létrehozza az 1. objektumot, amelyhez tranzakció szükséges. Mivel nincs tranzakció, a COM+ létrehozza az 1. tranzakciót, és az 1. objektumot gyökérobjektumként helyezi el benne. Az 1. objektum létrehozza a 2. objektumot, amely támogatja a tranzakciókat, ezért az 1. tranzakcióba kerül. A 2. objektum létrehozza a 3. objektumot, amely nem támogatja a tranzakciókat, ezért minden tranzakción kívül kerül. A 2. objektum létrehozza a 4. objektumot is, amely tranzakciót igényel, ezért az 1. tranzakcióban lesz elhelyezve. A 3. objektum létrehozza az 5. objektumot, amely támogatja a tranzakciókat. Mivel azonban az 5. objektumot olyan objektum hozza létre, amely nem létezik egy tranzakción belül, az is az összes tranzakción kívülre kerül. A 4. objektum létrehozza a 6. objektumot, amely új tranzakciót igényel, ezért a COM+ létrehozza a 2. tranzakciót, és a 6. objektumot gyökérobjektumként helyezi el benne. A 6. objektum létrehozza a 7. objektumot, amely támogatja a tranzakciókat, ezért a 2. tranzakcióba kerül.
Az előző ábrán két lehetséges problématerület látható. Először is a munka nagy része két különböző tranzakció között oszlik meg. Ha az 1. tranzakció meghiúsul, miután a 4. objektum létrehozta a 6. objektumot, a 2. tranzakciót az 1. tranzakció eredménye nem befolyásolja. Ha ez az eredmény nem szándékos, akkor érdemes lehet mindkét tranzakció műveleteit egyetlen tranzakcióba hajtani, amelyet a 6. objektum tranzakcióattribútumának Kötelezőre történő módosításával érhet el.
A leképezési ábrán az is látható, hogy a 3. és az 5. objektum nem tranzakciós jellegű, és az 1. és a 2. tranzakció hatókörén kívül fut. Ha az 5. objektum frissíti az állandó adatokat, érdemes lehet újragondolni annak nem tranzakciós állapotát. Az 5. objektum egy tranzakción belül helyezhető el, ha a tranzakció attribútumát Kötelezőre módosítja.