Conceptos del dispensador de recursos COM+

Los componentes de la aplicación usan el dispensador de recursos COM+ para acceder y administrar información de estado compartida y nodurable, como las conexiones entre componentes y un administrador de recursos determinado. En tiempo de ejecución, los grupos dinámicos de recursos, como las conexiones de base de datos, las conexiones de red, las conexiones a colas, subprocesos, objetos y bloques de memoria, están disponibles para el dispensador de recursos. El proceso de aplicación logra un alto rendimiento mediante un número mínimo de recursos usados con frecuencia. El dispensador de recursos también puede automatizar las transacciones y la recuperación. (Consulte Recuperación automática de recursos para obtener más información sobre esta característica).

Nota

Un recurso es cualquier cosa que cree un dispensador de recursos. Por ejemplo, una conexión a un administrador de recursos es un recurso común. Los recursos residen en la memoria del dispensador de recursos y nunca se copian en el administrador del dispensador. Un recurso solo lo conoce un identificador opaco (RESID) y puede o no ser capaz de realizar transacciones. Aunque los recursos administrados a menudo pueden ser conexiones a un componente que administra un estado duradero, las propias conexiones no son duraderas. Un dispensador de recursos suele usar un administrador de recursos relacionado para conservar el estado duradero.

 

Arquitectónicamente, el sistema de dispensador de recursos COM+ consta de dispensadores de recursos y un administrador de dispensadores. Los dispensadores de recursos son componentes proporcionados por el usuario que proporcionan a las aplicaciones interfaces sencillas para recursos compartidos. El administrador del dispensador es un componente proporcionado por COM+ que coordina las actividades de los distintos dispensadores de recursos.

Un dispensador de recursos es un componente de biblioteca de vínculos dinámicos (DLL) que proporciona al menos dos interfaces. El primero, IDispenserDriver, proporciona al administrador de dispensadores información básica sobre cómo crear, destruir e inscribir los recursos que administra. El segundo se expone a las aplicaciones y puede ser una interfaz COM o un conjunto de interfaces o puede ser una interfaz de programación de aplicaciones (API) a la que un componente está vinculado a través de una biblioteca de importación. Una aplicación puede llamar a cualquier dispensador de recursos, que a su vez puede ofrecer cualquier API a la aplicación. Si el dispensador de recursos es un componente de Automation, se puede acceder desde Microsoft Visual Basic. Se crea una instancia de un dispensador de recursos cuando un componente de aplicación hace referencia a él.

El administrador de dispensadores proporcionado por COM+ realiza un seguimiento de los dispensadores de recursos y las coordenadas entre ellos. Implementa dos interfaces: IDispenserManager e IHolder. Los dispensadores de recursos se registran a sí mismos mediante la interfaz IDispenserManager . A continuación, el administrador del dispensador les da un puntero a un IHolder que usan para notificar al administrador del dispensador de sus actividades.

Un dispensador de recursos transaccionales debe inscribirse en una transacción del Coordinador de transacciones distribuidas (DTC). Esto implica el uso de un administrador de recursos interno o externo (para el dispensador de recursos) que es compatible con transacciones OLE.

Nota

El modelo de programación COM+ incluye transacciones declarativas, que ayudan a proteger el trabajo realizado por un objeto de aplicación durante su vigencia. Cuando un objeto de aplicación usa un dispensador de recursos COM+, el trabajo que realiza es transaccional automáticamente; es decir, el componente no tiene que declarar explícitamente transacciones. Estas transacciones se definen en la especificación transacciones OLE, implementadas por DTC y iniciadas en nombre del objeto de aplicación por COM+. Consulte la Guía de desarrollo de DTC para obtener más información.

 

Los recursos no deben ser transaccionales. Un dispensador de recursos que agrupa recursos no transaccionales todavía puede lograr un alto rendimiento al permitir que los objetos de aplicación accedan a un grupo compartido de estos recursos. Este tipo de dispensador de recursos devuelve S_FALSE del método IDispenserDriver::EnlistResource , lo que significa que el dispensador de recursos no inscribe el recurso porque el recurso no es transaccional.

El dispensador de recursos también puede funcionar independientemente de COM+, lo que proporciona solo funcionalidades de agrupación de recursos. Por ejemplo, si un dispensador de recursos expone una API (como ODBC), el dispensador de recursos podría ser un archivo DLL al que accede la aplicación a través de una biblioteca de importación (o mediante las funciones LoadLibrary y GetProcAddress ). Un dispensador de recursos también puede ser un componente COM al que accede una aplicación mediante una llamada a CoCreateInstance. Sin COM+, nunca se puede llamar al método EnlistResource de un dispensador de recursos porque el administrador del dispensador no tiene conocimiento de la transacción del componente actual.

Al iniciarse, un archivo DLL de dispensador de recursos debe registrarse en el administrador del dispensador. El administrador del dispensador es el ejecutivo de control que administra la carga y descarga de dispensadores de recursos, proporciona el contexto COM+ y controla el administrador de estadísticas de inventario. (Para obtener más información, vea COM+ Dispenser Manager). El dispensador de recursos llama primero a la función GetDispenserManager y, a continuación, llama al método IDispenserManager::RegisterDispenser , pasando el puntero IDispenserDriver que implementa el dispensador de recursos. Esta llamada devuelve una referencia a IHolder.

Para apagarse, un dispensador de recursos llama a IHolder::Close. Para garantizar el apagado de un paquete limpio, un dispensador de recursos debe ser capaz de controlar la situación cuando las llamadas continúan llegando desde objetos empresariales después de que COM+ haya pedido al dispensador que se cierre.

En los temas siguientes de esta sección se proporciona información más detallada sobre el servicio de dispensador de recursos COM+:

Tareas de dispensador de recursos COM+