Funcionamiento de la agrupación de objetos

Al configurar un componente que se va a agrupar, COM+ mantendrá las instancias de él en un grupo, listos para activarse para cualquier cliente que solicite el componente. Las solicitudes de creación de objetos se controlarán a través del administrador del grupo.

Los grupos se configuran y mantienen por componente. Un grupo consta de objetos homogéneos que comparten el mismo CLSID. La única excepción es para los objetos transaccionales, para los que se mantienen los subgrupos que contienen objetos que tienen afinidad de transacción mientras una transacción está pendiente.

Cuando se inicia la aplicación, el grupo se rellenará hasta el nivel mínimo que haya especificado administrativamente, siempre que la creación de objetos se realice correctamente. A medida que entran las solicitudes de cliente para el componente, se satisfacen en primer lugar desde el grupo. Si no hay ningún objeto agrupado disponible y el grupo aún no está en su nivel máximo especificado, se crea y activa un nuevo objeto para el cliente.

Cuando el grupo alcanza su nivel máximo, las solicitudes de cliente se ponen en cola y recibirán el primer objeto disponible del grupo. El número de objetos, incluidos activados y desactivados, nunca superará el valor máximo del grupo. Las solicitudes de creación de objetos agotarán el tiempo de espera después de un período especificado administrativamente para que pueda controlar cuánto tiempo esperarán los clientes para la creación de objetos. Tras un error de tiempo de espera, el cliente recuperará el error E_TIMEOUT de CoCreateInstance.

Siempre que sea posible, COM+ intentará reutilizar un objeto después de que un cliente lo suelte, hasta que el grupo alcance su nivel máximo. El objeto es responsable de supervisar su estado para determinar si se puede reutilizar y debe devolver un valor adecuado para IObjectControl::CanBePooled.

Cuando se crea un objeto agrupado, se agrega en un objeto mayor que administrará la duración del objeto. El objeto externo llama a métodos en IObjectControl en los momentos adecuados del ciclo de vida del objeto, como se indica a continuación:

  • Se llama al método Activate cada vez que se devuelve el objeto a un cliente, activado en un contexto específico.
  • Se llama al método Deactivate cada vez que el cliente libera un objeto o, en el caso de un objeto activado por JIT, cuando se desactiva.
  • Se llama al método CanBePooled cada vez que se va a devolver un objeto al grupo general. Si el objeto detecta que algún recurso reutilizable está en un estado incorrecto, debe devolver FALSE para este método y el administrador del grupo descartará el objeto.

Un objeto no necesita necesariamente implementar IObjectControl. Si no es así, las instancias siempre se reutilizarán hasta que se alcance el nivel máximo del grupo.

Para obtener más información sobre cómo configurar los componentes que se van a agrupar, consulte Configuración de un componente para agrupar.

Cadenas del constructor de objetos COM+

Controlar la duración y el estado de los objetos

Mejora del rendimiento con la agrupación de objetos

Agrupación de objetos transaccionales

Requisitos para objetos agrupables