Requisitos para objetos agrupables

Los objetos agrupables deben cumplir ciertos requisitos para permitir que varios clientes usen una única instancia de objeto.

Sin estado

Para mantener la seguridad, la coherencia y el aislamiento, los objetos agrupables no deben contener ningún estado específico del cliente del cliente al cliente. Puede administrar cualquier estado por cliente mediante IObjectControl, realizando la inicialización específica del contexto con IObjectControl::Activate y limpiando cualquier estado de cliente con IObjectControl::D eactivate. Para obtener más información, consulte Control de la duración y el estado de los objetos.

Sin afinidad de subproceso

Los objetos agrupables no se pueden enlazar a un subproceso determinado; de lo contrario, el rendimiento podría ser potencialmente desastroso. Por este motivo, los objetos agrupables no se pueden marcar para ejecutarse en el modelo de apartamento; deben ejecutarse en el apartamento multiproceso o en el apartamento neutro. Además, los objetos agrupables no deben usar el almacenamiento local del subproceso ni deben agregar el serializador sin subprocesos. Para obtener más información sobre los subprocesos en COM+, consulte Modelos de subprocesos com+.

Nota

Microsoft Visual Basic 6.0 y entornos de desarrollo anteriores solo pueden crear componentes de modelo de apartamento. Sin embargo, en Visual Basic .NET, los componentes se pueden agrupar.

 

Aggregatable

Los objetos agrupables deben admitir la agregación; es decir, deben admitir la creación invocando CoCreateInstance con un argumento pUnkOuter que no sea NULL. Cuando COM+ activa un objeto agrupado, crea un agregado para administrar la duración del objeto agrupado y llamar a métodos en IObjectControl. Para obtener más información sobre cómo escribir objetos aggregatables, vea Agregación.

Componentes transaccionales

Los objetos agrupables que participan en transacciones deben inscribir manualmente los recursos administrados. Aunque se agrupa, si el objeto contiene un recurso administrado, como una conexión de base de datos, 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. Por lo tanto, el propio objeto debe controlar la lógica de detección de la transacción, desactivar la inscripción automática del administrador de recursos y inscribir manualmente los recursos que contiene. Además, un objeto agrupado transaccional debe reflejar el estado actual de sus recursos en los valores de parámetro de IObjectControl::CanBePooled. Para obtener más información, consulte Agrupación de objetos transaccionales.

Implementar IObjectControl para administrar la duración del objeto

Los objetos agrupables deben implementar IObjectControl, aunque no es estrictamente necesario hacerlo. Sin embargo, los componentes transaccionales agrupados deben implementar IObjectControl. Estos componentes deben supervisar el estado de los recursos que contienen e indicar cuándo no se pueden reutilizar; cuando IObjectControl::CanBePooled devuelve false, se perderá una transacción. Para obtener más información, consulte Control de la duración y el estado de los objetos.

Restricciones de idioma

Los componentes desarrollados con Microsoft Visual Basic 6.0 y versiones anteriores no se pueden agrupar porque estos componentes serán subprocesos del modelo de apartamento. Sin embargo, en Visual Basic .NET, los componentes se pueden agrupar.

Componentes heredados

Siempre que no sean transaccionales y cumplan los requisitos anteriores adecuados, los componentes se pueden agrupar incluso si no se escribieron específicamente con la funcionalidad de agrupación en mente. No es necesario implementar IObjectControl; un componente que no lo hace simplemente no participará en la administración de su duración. Si no se implementa IObjectControl::CanBePooled , el objeto seguirá siendo reutilizado hasta que el grupo alcance el tamaño máximo.

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

Agrupación de objetos transaccionales