Microsoft Transaction Server ( MTS ) era un software que proporcionaba servicios a los componentes del software del Modelo de objetos componentes (COM) , para facilitar la creación de grandes aplicaciones distribuidas. Los principales servicios proporcionados por MTS eran la gestión automatizada de transacciones , la gestión de instancias (o activación justo a tiempo ) y la seguridad basada en roles. MTS se considera el primer software importante en implementar la programación orientada a aspectos . [1]
MTS se ofreció por primera vez en Windows NT 4.0 Option Pack. En Windows 2000 , MTS se mejoró y se integró mejor con el sistema operativo y COM , y se lo renombró COM+ . COM+ agregó agrupación de objetos , eventos acoplados de forma flexible y transacciones simples definidas por el usuario (administradores de recursos compensatorios) a las características de MTS.
COM+ todavía se proporciona con Windows Server 2003 y Windows Server 2008 , y Microsoft .NET Framework proporciona un contenedor para COM+ en el espacio de nombres EnterpriseServices. Windows Communication Foundation (WCF) proporciona una forma de llamar a aplicaciones COM+ con servicios web . Sin embargo, COM+ se basa en COM, y la arquitectura de software estratégica de Microsoft ahora son servicios web y .NET, no COM. Hay alternativas basadas puramente en .NET para muchas de las características proporcionadas por COM+, y a largo plazo es probable que COM+ deje de usarse.
Una arquitectura MTS básica comprende:
Los componentes COM que se ejecutan bajo el control de MTS Executive se denominan componentes MTS. En COM+, se los conoce como aplicaciones COM+. Los componentes MTS son archivos DLL en proceso . Los componentes MTS se implementan y ejecutan en MTS Executive, que los administra. Al igual que con otros componentes COM, un objeto que implementa la interfaz IClassFactory funciona como un objeto de fábrica para crear nuevas instancias de estos componentes.
MTS inserta un objeto Factory Wrapper y un Object Wrapper entre el objeto MTS real y su cliente. Esta interposición de wrappers se denomina intercepción . Siempre que el cliente realiza una llamada al componente MTS, los wrappers (Factory y Object) interceptan la llamada e inyectan su propio algoritmo de gestión de instancias llamado Just-In-Time Activation (JITA) en la llamada. El wrapper luego realiza esta llamada en el componente MTS real. La intercepción se consideró difícil en ese momento debido a la falta de metadatos extensibles. [1]
Además, según la información de las propiedades de implementación del componente, también se llevan a cabo la lógica de transacciones y las comprobaciones de seguridad en estos objetos envolventes.
Para cada objeto alojado en MTS, también existe un objeto de contexto, que implementa la interfaz IObjectContext. El objeto de contexto mantiene información específica sobre ese objeto, como su información transaccional, información de seguridad e información de implementación. Los métodos del componente MTS invocan el objeto de contexto a través de su interfaz IObjectContext.
MTS no crea el objeto MTS de nivel intermedio real hasta que la llamada de un cliente llega al contenedor. Dado que el objeto no se ejecuta todo el tiempo, no utiliza muchos recursos del sistema (aunque persisten un contenedor y un esqueleto de objeto).
Tan pronto como llega la llamada del cliente, el proceso contenedor de MTS activa su algoritmo de administración de instancias llamado JITA. El objeto MTS real se crea "justo a tiempo" para atender la solicitud del contenedor. Y cuando se atiende la solicitud y se envía la respuesta al cliente, el componente llama a SetComplete()/SetAbort(), o su transacción finaliza, o el cliente llama a Release() en la referencia al objeto y el objeto MTS real se destruye. En resumen, MTS utiliza un modelo de componente sin estado.
Generalmente, cuando un cliente solicita servicios de un componente MTS típico, se produce la siguiente secuencia en el servidor:
De este modo, es posible implementar recursos de alta latencia como grupos de recursos asincrónicos, que deberían aprovechar la activación JIT sin estado que ofrece el servidor de middleware .