Controlar la duración y el estado de los objetos
Un objeto agrupado puede participar en cómo COM+ administra su actividad en el grupo mediante la implementación de IObjectControl. Cuando se crea un objeto agrupado, se agrega a un objeto mayor que administrará el objeto llamando a los métodos siguientes en IObjectControl en puntos regulares del ciclo de vida del objeto:
- Activate: se llama cada vez que el objeto se devuelve a un cliente, activado en un contexto específico.
- Desactivar: se llama cada vez que el cliente libera un objeto o, en el caso de un objeto activado por JIT, cuando se desactiva.
- CanBePooled: se llama cada vez que se devuelve un objeto al grupo general.
La implementación de IObjectControl es opcional, excepto para los objetos transaccionales, que siempre deben implementar CanBePooled para supervisar el estado de los recursos que contienen. Sin embargo, es aconsejable implementar IObjectControl en la mayoría de los casos porque proporciona una manera eficaz de administrar el comportamiento de un objeto agrupado, como se describe a continuación.
Realizar la inicialización de Context-Specific
Con Activate, puede inicializar el objeto en el contexto en el que se activa para un cliente determinado. Por ejemplo, para determinar si el objeto tiene afinidad de transacción (es posible que sus recursos ya estén inscritos), es posible que obtenga el identificador de transacción asociado al contexto.
Normalmente, usaría Activatepara realizar la inicialización coherente en todos los métodos expuestos por el objeto, tratándolo como la parte específica del contexto del constructor del objeto.
Limpieza de cualquier estado de cliente
Con Deactivate, puede deshacerse de cualquier estado específico del cliente que pueda existir para que el objeto vuelva al grupo en un estado completamente genérico y, a continuación, puede ser utilizado por cualquier cliente sin poner en peligro la seguridad o el aislamiento.
Controlar la reutilización del objeto
Con CanBePooled, puede supervisar el estado interno del objeto e informar sobre si es adecuado para su reutilización. Si CanBePooled devuelve True y no se ha alcanzado el máximo del grupo, el objeto se vuelve a colocar en el grupo general. Si CanBePooled devuelve False, el objeto se descarta. En el caso de los componentes transaccionales, la devolución de False acabará con la transacción actual.
Normalmente, mantendría algún miembro de datos global para el objeto y, si detecta que una conexión es incorrecta o un recurso de algún tipo que se encuentra en un estado incorrecto, establézcalo para reflejar la situación actual y devolverla a través de CanBePooled.
Si un objeto no implementa CanBePooled, las instancias se seguirán reutilizando hasta que se alcance el nivel máximo del grupo.
Temas relacionados