Resource Manager létrehozása

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:

  1. 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.

  2. 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.

  3. Á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.

  4. 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.

  5. Á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.

  6. 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.

  7. 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.

  8. 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ő.

  9. 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.

  10. Ü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.

  11. 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

  12. 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.