Delen via


Transactionele objecten groeperen

Transactionele onderdelen die moeten worden gegroepeerd, hebben speciale vereisten.

Resources handmatig inschakelen

Poolbare objecten die deelnemen aan transacties, moeten zich handmatig aanmelden voor beheerde bronnen. Als een object beheerde resources tussen clients houdt, is het niet mogelijk om de resourcemanager automatisch in een transactie te laten deelnemen wanneer het object wordt geactiveerd in een bepaalde context.

Het object zelf moet de logica afhandelen van het detecteren van de transactie, het uitschakelen van de automatische aanmelding van de resourcemanager en het handmatig registreren van de resources die het beheert. De stappen hiervoor zijn specifiek voor de resourcemanager die u gebruikt. Raadpleeg de documentatie voor uw resourcemanager als u handmatige registratie moet uitvoeren.

Zoals hieronder wordt beschreven, kunnen objecten worden gegroepeerd met transactieaffiniteit terwijl een transactie actief is en kan worden geactiveerd met transactieaffiniteit als deze wordt aangeroepen door een client die aan die transactie is gekoppeld. Voordat u middelen opgeeft, moet u eerst controleren op transactieaffiniteit. Als het object is meegenomen uit de pool die aan die transactie toebehoort, heeft het al werk gedaan in die transactie en heeft het zijn resources ingezet.

Automatische opname uitschakelen

Automatische registratie moet worden uitgeschakeld zodra de resource is verkregen, meestal in de constructor van het object. Dat wil gezegd, u schakelt automatische opname uit en maakt vervolgens verbinding.

Het uitschakelen van automatisch insluiten kan soms een subtiele procedure zijn, met name in het geval van gelaagde gegevenstoegangsproviders. Automatisch insluiten wordt soms gekoppeld aan verbindingspooling, zoals met ODBC, en soms niet, zoals bij OLE DB. Mogelijk moet u ervoor zorgen dat automatisch inschakelen is uitgeschakeld op verschillende niveaus van providers.

IObjectControl implementeren

Poolbare objecten die deelnemen aan transacties, moeten de huidige status van de resources bewaken die ze vasthouden. Als het object detecteert dat het zich in een niet-herbruikbare status bevindt, bijvoorbeeld als een verbinding slecht is, moet het Onwaar retourneren voor IObjectControl::CanBePooled. Dit heeft het effect van het verwijderen van het objectexemplaar en het laten mislukken van de huidige transactie.

Transaction-Specific zwembaden

Een objectenpool is doorgaans homogeen en elk poolobject dat momenteel niet in gebruik is, kan aan elke klant worden teruggegeven. De enige uitzondering op deze regel is in het geval van transactionele objecten waarvoor objectpooling is geoptimaliseerd. Wanneer de client die een object aanvraagt een gekoppelde transactie heeft, scant COM+ de groep op een beschikbaar object dat al aan die transactie is gekoppeld. Als een object met transactieaffiniteit wordt gevonden, wordt het geretourneerd naar de client; anders wordt een object uit de algemene pool geretourneerd.

Op deze manier worden speciale subpools onderhouden die objecten met affiniteit voor een bepaalde transactie bevatten. Wanneer de transactie wordt vastgelegd of geannuleerd, worden deze objecten teruggegeven aan de algemene pool zonder dat ze nog aan een transactie verbonden zijn, klaar voor gebruik door een klant.

Als uw onderdeel daarom handmatig beheerde resources in een transactie opneemt, moet eerst worden gecontroleerd of ze al zijn opgenomen. Zo ja, dan is het niet nodig om in te schakelen.

COM+ Object Constructor-tekenreeksen

objectlevensduur en -status beheren

hoe objectpooling werkt

Prestaties verbeteren met objectpooling

Vereisten voor poolbare objecten