Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az erőforrás-kezelők kezelik az egyes tranzakciók adatait, és naplózják a tranzakció műveleteit. Ha egy tranzakciófeldolgozó rendszer (TPS) több erőforrás-kezelővel rendelkezik, minden erőforrás-kezelő részt vehet az egyes tranzakciók véglegesítési, visszaállítási és helyreállítási műveleteiben.
Minden erőforrás-kezelőnek exportálnia kell egy felületet, amellyel a tranzakciós ügyfelek hozzáférhetnek az erőforrás-kezelő által fenntartott adatbázishoz vagy más erőforráshoz.
A kernel módú erőforrás-kezelőnek általában a következő feladatokat kell elvégeznie a felsorolt sorrendben:
Hozzon létre egy naplóstreamet.
Az erőforrás-kezelők használhatják a Common Log File System (CLFS) vagy más naplózási képességeket a naplóstreamek karbantartásához. A ClfsCreateLogFile hívása létrehoz egy CLFS-naplóstreamet. Az erőforrás-kezelőnek a naplóstream használatával kell rögzítenie a tranzakciók véglegesítéséhez, visszaállításához vagy helyreállításához szükséges adatokat. A KTM emellett a naplóstream használatával rögzíti az esetleges belső állapotváltozásokat, amelyek a tranzakciók helyreállításához szükségesek lehetnek.
Hozzon létre egy tranzakciókezelő objektumot.
A ZwCreateTransactionManager hívása létrehoz egy tranzakciókezelő objektumot, és összekapcsolja az erőforrás-kezelőt egy további CLFS-naplóstreammel, amelyet az erőforrás-kezelő határoz meg.
Állítsa helyre a tranzakciókezelő állapotát.
A ZwRecoverTransactionManager hívása beolvassa a tranzakciókezelő objektum naplóstreamjét (amelyet a KTM tart fenn), és megállapítja, hogy a TPS le lett-e állítva az összes tranzakció befejezése előtt (például azért, mert a rendszer összeomlott). A KTM visszaállítja a belső állapotát a naplóadatfolyam információi alapján.
Hozzon létre egy Resource Manager-objektumot.
A ZwCreateResourceManager hívása létrehoz egy Resource Manager-objektumot, és társítja azt a korábban létrehozott tranzakciókezelő objektummal.
Állítsa helyre az erőforrás-kezelő állapotát.
A ZwRecoverResourceManager hívása miatt a KTM az erőforrás-kezelőnek TRANSACTION_NOTIFY_RECOVER értesítéseket küld azokról a tranzakciókról, amelyek a legutóbbi leálláskor voltak folyamatban. További információ arról, hogy az erőforrás-kezelőnek hogyan kell válaszolnia ezekre az értesítésekre: Recovery Operations kezelése.
Tranzakciók fogadása ügyfelektől.
Az ügyfél általában létrehoz egy tranzakcióobjektumot, és az erőforrás-kezelő ügyfélfelületén adja át a tranzakcióobjektum GUID azonosítóját az erőforrás-kezelőnek. Előfordulhat például, hogy az erőforrás-kezelő olyan CreateDataObject rutint biztosít, amely hasonló a TPS-összetevők ismertetése témakör által leírthoz.
Minden tranzakcióba be kell jelentkezni.
A ZwOpenTransaction hívása megnyitja a tranzakcióobjektum leíróját, majd a ZwCreateEnlistment hívása létrehoz egy regisztrációt a tranzakcióhoz. A beléptetés lehetővé teszi, hogy az erőforrás-kezelő adott tranzakcióértesítéseket kapjon.
Tranzakcióértesítések fogadásának engedélyezése.
Az erőforrás-kezelő meghívhatja a ZwGetNotificationResourceManagert az értesítések szinkron beszerzéséhez, vagy meghívhatja a TmEnableCallbackst egy ResourceManagerNotification visszahívási rutin regisztrálásához, amelyet a KTM hív meg, amikor egy értesítés elérhető.
A szolgáltatás erőforrás-hozzáférési kérelmeit ügyfelek küldik el, de a változtatásokat nem véglegesítik.
Miután az ügyfél létrehozott egy tranzakciós objektumot, általában meghívja az erőforrás-kezelő felületét, hogy hozzáférjen az erőforrás-kezelő erőforrásához. Előfordulhat például, hogy egy adatbázis erőforrás-kezelője olvasási és írási kéréseket kap az adatbázishoz.
Az erőforrás-kezelőnek rögzítenie kell az olvasási és írási műveletek eredményeit egy CLFS-naplóstreamben vagy más naplózási képességben, amíg értesítést nem kap arról, hogy a tranzakció műveletei véglegesítve, visszaállítva vagy helyreállítva lesznek.
Ügyfélműveletek véglegesítése vagy visszaállítása.
Végül az erőforrás-kezelő értesítést kap az ügyfél által végrehajtott műveletek véglegesítésének vagy visszaállításának megkezdéséről. Válaszul az erőforrás-kezelőnek vagy állandóvá kell tennie az ügyfélműveleteket, vagy el kell vetnie őket. A véglegesítési és visszaállítási értesítések kezeléséről további információt a Tranzakciós műveletek kezelése című témakörben talál.
Időnként előfordulhat, hogy egy erőforrás-kezelőnek meg kell próbálnia kikényszerítenie a KTM-et, hogy gyorsan adjon meg véglegesítési vagy visszaállítási értesítést, talán azért, mert az erőforrás-kezelő megállapította, hogy az eszköz váratlanul el lett távolítva. Ilyen esetben az erőforrás-kezelő meghívhatja a TmRequestOutcomeEnlistment parancsot.
Zárja be a beléptetési objektum fogópontját.
Miután az erőforrás-kezelő befejezte a tranzakció feldolgozását, meg kell hívnia a ZwClose-t a beléptetési objektum leírójának bezárásához
Zárja be az erőforrás-kezelő objektumleíróját és a tranzakciókezelő objektumleíróját.
Mielőtt az erőforrás-kezelő eltávolítana, meg kell hívnia a ZwClose-t az erőforrás-kezelő objektum leírójának és a tranzakciókezelő objektum leírójának bezárásához.
Az 1–5. lépést az erőforrás-kezelő inicializálási kódjában kell végrehajtani. Ha például az erőforrás-kezelő kernel módú illesztőprogram, az inicializálási kód az illesztőprogram DriverEntry-rutinja .
A 6–11. lépést általában olyan kódban hajtják végre, amely válaszol a tranzakciós ügyfelektől érkező kérésekre.
A 12. lépést el kell végezni az erőforrás-kezelő végleges törlési kódjában, például egy kernel módú illesztőprogram eltávolítási rutinjában.
Read-Only-beléptetés létrehozása
A csak olvasható résztvevő egy olyan résztvevő, amely nem kap értesítéseket a KTM-től. Az erőforrás-kezelő a ZwReadOnlyEnlistment meghívásával írásvédetté teheti a regisztrációt. Ez a hívás miatt a KTM nem küld értesítéseket az erőforrás-kezelőnek.
Miután az erőforrás-kezelő meghívta a ZwCreateEnlistment nevet, bármikor meghívhatja a ZwReadOnlyEnlistment parancsot, egészen a ZwPrepareComplete meghívásának időpontjáig.
Két oka lehet annak, hogy az erőforrás-kezelő meghívja a ZwReadOnlyEnlistment parancsot.
Az erőforrás-kezelő részt vett egy tranzakcióban, és egy bizonyos ponton, mielőtt TRANSACTION_NOTIFY_COMMIT értesítést kap, az erőforrás-kezelő megállapítja, hogy már nem kell részt vennie a tranzakció véglegesítési műveletében.
Ha például az erőforrás-kezelő kap egy TRANSACTION_NOTIFY_PREPARE értesítést, megállapíthatja, hogy a tranzakció egyik művelete sem módosította az erőforrás-kezelő adatbázisát. Az erőforrás-kezelő a ZwPrepareComplete helyett a ZwReadOnlyEnlistment meghívásával távolíthatja el magát a tranzakcióból.
Az erőforrás-kezelő soha nem vesz részt semmilyen tranzakció véglegesítési műveletében.
Az erőforrás-kezelő például figyelheti az ügyfél által küldött adatokat, anélkül, hogy módosítaná a tárolt adatbázist. Ebben az esetben az erőforrás-kezelő közvetlenül a ZwCreateEnlistment meghívása után hívhatja meg a ZwReadOnlyEnlistment-t. Emellett dönthet úgy is, hogy egy ilyen erőforrás-kezelőt volatilissé tesz a jelen témakör következő szakaszában leírtak szerint.
Miután egy erőforrás-kezelő meghívta a ZwReadOnlyEnlistment függvényt, meghívhatja a ZwClose függvényt is a beléptetési leíró bezárásához.
Volatile-Resource Manager létrehozása
A volatilis erőforrás-kezelő olyan erőforrás-kezelő, amely nem tart fenn tartós adatokat. Létrehozhat például egy illékony erőforrás-kezelőt az ügyfél által küldött adatok figyeléséhez, ha az erőforrás-kezelő nem módosít egy tartósan tárolt adatbázist. A volatilis erőforrás-kezelők általában nem naplóznak tranzakciós tevékenységet, ezért nem tudnak helyreállítási vagy visszaállítási műveleteket végrehajtani.
A ZwCreateResourceManager meghívásakor a változóerőforrás-kezelőnek be kell állítania a RESOURCE_MANAGER_VOLATILE jelzőt. Ha ez a jelző be van állítva, a KTM nem naplózza az erőforrás-kezelő adatait a társított tranzakciókezelő objektum naplóstreamjében.
Az erőforrás-kezelő beállíthat egy TRANSACTION_MANAGER_VOLATILE jelzőt is, amikor meghívja a ZwCreateTransactionManagert. Ha ez a jelző be van állítva, a KTM nem hoz létre naplóstreamet a tranzakciókezelő objektumhoz. Emellett a tranzakciókezelő objektumhoz csatlakoztatott további erőforrás-kezelőknek is változékonynak kell lenniük, és be kell állítaniuk a RESOURCE_MANAGER_VOLATILE jelzőt.
Resource Manager hozzáadása meglévő TPS-hez
Ha további erőforrás-kezelőt kell hozzáadnia egy meglévő TPS-hez, két lehetősége van:
Az új erőforrás-kezelő meghívja a ZwCreateTransactionManagert , hogy hozza létre a saját tranzakciókezelő objektumát.
Ezt a lehetőséget akkor használja, ha az erőforrás-kezelő nem kommunikál a TPS más erőforrás-kezelőivel.
Az új erőforrás-kezelő meghívja a ZwOpenTransactionManagert egy meglévő tranzakciókezelő objektumhoz való csatlakozáshoz.
Ezt a lehetőséget akkor használja, ha az erőforrás-kezelőnek kommunikálnia kell a TPS más erőforrás-kezelőivel. A ZwCreateTransactionManagert hívó erőforrás-kezelőnek meg kell osztania a tranzakciókezelő objektum GUID-, naplóstream- vagy objektumnevét, hogy más erőforrás-kezelők meghívhassák a ZwOpenTransactionManagert. Ezek a többi erőforrás-kezelő meghívhatja a ZwQueryInformationTransactionManagert , hogy további információkat szerezzen be a tranzakciókezelő objektumról.
Miután hozzáadta az erőforrás-kezelőt a TPS-hez, az erőforrás-kezelőt ismerő ügyfelek meghívhatják az erőforrás-kezelő ügyfélfelületét.