Agrupación de objetos transaccionales

Los componentes transaccionales que se van a agrupar tienen requisitos especiales.

Inscripción manual de recursos

Los objetos agrupables que participan en transacciones deben inscribir manualmente los recursos administrados. Si un objeto contiene recursos administrados entre clientes, no habrá forma de que el administrador de recursos se inscriba automáticamente en una transacción cuando el objeto se active en un contexto determinado.

El propio objeto debe controlar la lógica de detectar la transacción, desactivar la inscripción automática del administrador de recursos y inscribir manualmente los recursos que contiene. Los pasos para hacerlo son específicos del administrador de recursos que está usando. Si necesita realizar la inscripción manual, consulte la documentación del administrador de recursos.

Como se describe a continuación, los objetos se pueden agrupar con afinidad de transacción mientras una transacción está activa y se pueden activar con afinidad de transacción si un cliente asociado a esa transacción llama a ellos. Antes de inscribir recursos, primero debe comprobar la afinidad de transacción. Si el objeto se ha tomado del grupo específico de esa transacción, ya ha realizado el trabajo en esa transacción y ha inscrito sus recursos.

Desactivar la inscripción automática

La inscripción automática debe desactivarse después de adquirir el recurso, normalmente en el constructor del objeto. Es decir, deshabilita la inscripción automática y, a continuación, se conecta.

La deshabilitación de la inscripción automática a veces puede ser un procedimiento sutil, especialmente en el caso de proveedores de acceso a datos en capas. La inscripción automática a veces se combina con la agrupación de conexiones, como con ODBC y, a veces, no, como con OLE DB. Es posible que tenga que asegurarse de que la inscripción automática está desactivada en varios niveles de proveedores.

Implementación de IObjectControl

Los objetos agrupables que participan en las transacciones deben supervisar el estado actual de los recursos que contienen. Si el objeto detecta que está en un estado no reutilizable (por ejemplo, si una conexión es incorrecta), debe devolver False para IObjectControl::CanBePooled. Esto tendrá el efecto de descartar la instancia del objeto y de acabar con la transacción actual.

grupos de Transaction-Specific

Por lo general, un grupo de objetos es homogéneo y cualquier objeto agrupado que no esté en uso actualmente es bueno volver a cualquier cliente. La única excepción a esta regla es en el caso de los objetos transaccionales para los que se optimiza la agrupación de objetos. Cuando el cliente que solicita un objeto tiene una transacción asociada, COM+ examinará el grupo para ver un objeto disponible que ya está asociado a esa transacción. Si se encuentra un objeto con afinidad de transacción, se devuelve al cliente; de lo contrario, se devuelve un objeto del grupo general.

De esta manera, se mantienen subgrupos especiales que contienen objetos con afinidad para una transacción determinada. Cuando la transacción se confirma o anula, estos objetos se devuelven al grupo general sin afinidad de transacción, listos para ser utilizados por cualquier cliente.

Por este motivo, cuando el componente inscribe manualmente sus recursos administrados en una transacción, primero debe comprobar si ya están inscritos. Si es así, no es necesario inscribirse.

Cadenas del constructor de objetos COM+

Controlar la duración y el estado de los objetos

Funcionamiento de la agrupación de objetos

Mejora del rendimiento con la agrupación de objetos

Requisitos para objetos agrupables