Agrupación de objetos transaccionales

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

Dar de alta manualmente los recursos

Los objetos agrupables que participan en transacciones deben dar de alta 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 dar de alta 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 puede activar con afinidad de transacción si lo llama un cliente asociado a esa transacción. Antes de dar de alta los 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 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, se deshabilita la inscripción automática y, a continuación, se conecta.

Deshabilitar la inscripción automática a veces puede ser un procedimiento sutil, especialmente en el caso de proveedores de acceso a datos superpuestas. La inscripción automática se acopla a veces 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 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 tanto la instancia de objeto como la condena de 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 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 de 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, listo para ser utilizado 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