Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Transakční komponenty, které mají být ve fondu, mají zvláštní požadavky.
Ruční nábor prostředků
Objekty s možností sdružování, které se účastní transakcí, musí spravované prostředky manuálně zapojit. Pokud objekt spravuje prostředky pro klienty, neexistuje způsob, jak by správce prostředků mohl automaticky vstoupit do transakce, když je objekt aktivován v daném kontextu.
Samotný objekt musí zpracovat logiku zjišťování transakce, vypnutí automatického zařazení správce prostředků a ruční zařazení všech prostředků, které obsahuje. Postup je specifický pro správce prostředků, který používáte. Pokud potřebujete provést ruční zařazení, projděte si dokumentaci správce prostředků.
Jak je popsáno níže, objekty mohou být sdružovány v souvislosti s transakcí během aktivní transakce a mohou být aktivovány s transakční souvislostí, pokud je voláno klientem souvisejícím s touto transakcí. Před zařazením prostředků byste měli nejprve zkontrolovat soulad transakcí. Pokud byl objekt převzat z fondu specifického pro danou transakci, již v této transakci vykonal práci a zapojil své prostředky.
Vypnutí automatického zařazení
Automatické zařazení by mělo být po získání prostředku vypnuto, obvykle v konstruktoru objektu. To znamená, že zakážete automatické zařazení a pak se připojíte.
Zakázání automatického zařazení může někdy být jemným postupem, zejména v případě vrstvených poskytovatelů přístupu k datům. Automatické zařazení je někdy spojeno se sdružováním připojení, podobně jako u ODBC, a někdy ne, podobně jako u OLE DB. Možná budete muset zajistit, aby automatické zařazení bylo vypnuté na několika úrovních poskytovatelů.
Implementace IObjectControl
Objekty s možností sdružování, které se účastní transakcí, musí monitorovat aktuální stav prostředků, které uchovávají. Pokud objekt zjistí, že je v nereusovatelném stavu , například pokud je připojení špatné, měl by vrátit hodnotu False pro IObjectControl::CanBePooled. To bude mít vliv jak zahození instance objektu, tak zrušení aktuální transakce.
Fondy Transaction-Specific
Fond objektů je obecně homogenní a jakýkoliv objekt z fondu, který se aktuálně nepoužívá, je vhodné vrátit kterémukoliv klientovi. Jedinou výjimkou tohoto pravidla je v případě transakčních objektů, pro které je fond objektů optimalizován. Když klient, který požaduje objekt, má přidruženou transakci, COM+ prohledá fond dostupných objektů a vyhledá takový, který je již s touto transakcí spojen. Pokud se najde objekt s transakční vazbou, vrátí se klientovi; v opačném případě se vrátí objekt z obecného fondu.
Tímto způsobem jsou udržovány speciální podfondy obsahující objekty s vazbou na konkrétní transakci. Když je transakce potvrzena nebo zrušena, tyto objekty se vrátí do obecného fondu bez spřažení transakcí a jsou připraveny k použití jakýmkoli klientem.
Z tohoto důvodu, když vaše komponenta ručně založí své spravované prostředky do transakce, měl by nejprve zkontrolovat, zda jsou již zařazeny. Pokud ano, není nutné se připojit.
Související témata
-
zlepšení výkonu pomocí sdružování objektů