[55] "Arquitectura para facilitar interconexión de Building Blocks en
Transcripción
[55] "Arquitectura para facilitar interconexión de Building Blocks en
Arquitectura para facilitar interconexión de Building Blocks en Sistemas de Gestión de Redes y Servicios. Stella Bonino Gerardo Gándara Unidad Investigación Desarrollo y Laboratorio, Antel Montevideo,Uruguay [email protected] Unidad Investigación Desarrollo y Laboratorio, Antel Montevideo,Uruguay [email protected] Abstract En el presente trabajo se presenta un framework orientado a la construcción de un sistema para la gestión de servicios brindados por empresas de telecomunicaciones, permitiendo la integración de los mismos en una arquitectura común. Se propone este enfoque como una estrategia para generar sistemas basados en Building Blocks 1 , resolviendo el problema de interacción entre ellos a través de un vehículo de comunicaciones común pudiendo esconder distintos patrones de interoperabilidad (sincrónico, asincrónico, etc). Dada la abundancia de soluciones (oferta cambiante) que permiten generar esquemas interoperables y la necesidad de evaluarlas a través de sistemas concretos es que surge la necesidad de disponer de una estrategia de trabajo que achique la distancia entre un diseño lógico neutral y las múltiples implementaciones que se puedan llegar a llevar a cabo. En este sentido se propone diseñar sistemas lógicos apoyados en un framework básico que permita facilitar la implementación en distintas plataformas y posibilitar el reuso de componentes desarrollados. INTRODUCCIÓN Las empresas de telecomunicaciones están afrontando grandes desafíos y oportunidades como nunca. El escenario está caracterizado por una competencia creciente, producto de un nuevo marco de desregulación en general con altas exigencias del mercado. Se requiere disponer de estructuras internas de manejo de la información que permitan integrar los sistemas existentes e introducir en forma eficaz nuevos servicios con valor agregado en una única arquitectura. La 1 El concepto de “Building Block” esta emparentado con el concepto de “componente”. Implica el encapsulamiento de un conjunto de servicios de granularidad gruesa (Las características de los Building Blocks se definen en la recomendación GB909 de TMForum [3]) existencia de una arquitectura integradora favorece la creación de nuevos servicios posibilitando el reuso de servicios existentes. En este sentido el área de gestión de redes ha ido evolucionando. Diversos aportes se han realizado, desde la propia ITU-T a partir de la recomendación M3010 y más recientemente organizaciones como TeleManagement Forum y el consorcio TINAC. Estás últimas parten del análisis de los procesos necesarios para llevar a cabo los servicios requeridos y posteriormente se construyen sistemas lógicos basados en servicios brindados por Building Blocks (diseñados en términos “neutrales” como por ejemplo UML, con independencia de las tecnologías involucradas). La idea central de esta arquitectura parte de desacoplar el vínculo existente entre la lógica que gobierna los procesos y su implementación en “Building Blocks”. La lógica queda expresada en términos de interacciones con servicios (caracterizados por “contratos”) brindados por otros “Building Blocks”. MOTIVACIONES Los sistemas existentes en el área de Gestión de Redes y Servicios manejan interfaces y tecnologías diversas por lo que se requiere para la integración de los mismos, adaptarlos a una arquitectura común. Si bien es cierto que existen muchas tecnologías que resuelven el problema de interoperabilidad, no es menos cierto que las mismas están en constante evolución, brindando nuevas facilidades y posibilidades. Desde el punto de vista de la construcción del software, uno de los problemas mas críticos es la habilidad de manejar estas nuevas tecnologías. Resulta esencial que las aplicaciones permanezcan estables en el tiempo de forma de justificar los costos de desarrollo. Este requerimiento de durabilidad de las aplicaciones posibilitando la incorporación de cambios tecnológicos requiere de cambios en el proceso diseño y desarrollo del software. En este sentido, surge la idea de diseñar sistemas donde se pueda desacoplar la lógica del negocio contenida en cada Building Block de consideraciones vinculadas a la elección de tecnologías específicas y las distintas formas de manejarlas. vehículo de comunicaciones común por medio de “Contratos” que se registran a nivel central en un servicio de registro general. De esta manera se posibilita una estrategia de trabajo que achica la distancia entre un diseño lógico neutral y las múltiples implementaciones que se puedan llegar a llevar a cabo. • Existencia de Entorno de Información y datos comunes Es fundamental en este esquema de interoperabilidad la existencia de un modelo de información común que permita la definición de contratos (empleando "tipos de datos" del sistema) de manera que se pueda hablar un lenguaje común entre las distintas entidades del sistema. Para una arquitectura basada en “Building Blocks”, es de gran valor el disponer de un “framework común” que permita que las implementaciones realizadas se puedan reusar en el contexto de distintas tecnologías. Esto permitirá derivar rápidamente desde un diseño lógico en términos neutrales a implementaciones concretas. FRAMEWORK PROPUESTO Se define una arquitectura del sistema, basada en componentes distribuidos(Building Blocks) y un conjunto de servicios. Existen los servicios propios del negocio y servicios propios del framework. En este sentido este framework se apoya en los siguientes principios fundamentales • Interfaces definidas a través de “Contratos” Todas las entidades de software que proveen servicios a otras entidades lo hacen a través de interfaces denominadas "Contratos". Estas interfaces tienen las siguientes características: o Descripción del servicio provisto o Metadata usada para describir el contrato y sus interfaces o Precondiciones bajo las cuales se brinda el servicio ( Son condiciones que se deben satisfacer a los efectos de poder invocar el servicio en forma adecuada) o Postcondiciones las cuales definen el estado en que queda el sistema luego de invocar el servicio en forma exitosa (Sin generar excepciones). o Excepciones que puedan ser generadas. Una excepción se genera si se satisfacen las precondiciones, pero no se pueden alcanzar las postcondiciones. En general los contratos se agrupan en dos categorías. El primer grupo está constituido por contratos que brindan servicios propios del negocio. El segundo grupo está constituido por contratos de servicios brindados por el "framework", que apuntan a dar soporte de operación e integración con el resto del sistema. • Vehículo de comunicaciones común. Los componentes que brindan servicios específicos del negocio, son accesibles al resto del sistema a través de un Descripción de la Arquitectura Los servicios brindados por las distintas entidades en el marco de esta arquitectura son accesibles a través de contratos. Las especificaciones de contratos (ContractSpecification) disponen de la metadata asociada al contrato. Se incluye información de métodos soportados, argumentos, precondiciones, poscondiciones, excepciones etc. El alcance del concepto “Contrato“ (Contract) a nivel del framework, se circunscribe al concepto usual de “Interface” a nivel de un lenguaje de programación específico. En este sentido tenemos Contratos (Contract) asociados a sus respectivas especificaciones (ContractSpecification). Los contratos se implementan en plataformas específicas (ContractImplementation) y se agrupan en paquetes o Building Blocks para gestionar la instalación (deployment) de los mismos (Ver Figura 1) BuildingBlock ContractSpecification implements Contract ContractImplementation 1..* ContractMethod Parammeters MethodException Condition Precondition GeneralException ConditionException Postcondition Figura 1. Punto de Vista Estático Desde el punto de vista de la ejecución, para que las implementaciones de contratos sean posibles de ser usadas, deben ser instaladas (deploy) e instanciadas. Cada instancia (ContractImpInstance) está identificada por un nombre que la individualiza, y es registrada a nivel central, a los efectos de que pueda ser ubicada por los usuarios del servicio brindado. Cada instancia de implementación dispone de un des- criptor del punto de acceso del servicio (ContractImpInstanceDescriptor)(Ver Figura 2). Este descriptor contiene la información para invocar el servicio. Conceptualmente es la dirección del servicio a nivel del vehículo común de comunicaciones (o bus de servicios). Es de destacar que el bus de servicios no es homogéneo por lo que distintos protocolos pueden ser utilizados. En este sentido, el descriptor del punto de acceso maneja distinta información de acuerdo a la tecnología subyacente. Name identified by Contract Im pInst an ce l oc ated in +co ntrac t Co ntrac t efectos de “enlazar” distintas plataformas en forma transparente o bien eventualmente cambiar el patrón de interoperabilidad previsto inicialmente por el servicio brindado a través de una implementación de un contrato dado. Como se puede ver en la Figura 3, pueden existir invocaciones en forma directa entre implementaciones de contratos pertenecientes al mismo nodo. Se ilustran también invocaciones inter-nodo. En estos casos pueden accederse directamente o eventualmente hacer uso de puntos de acceso alternativo (o gateway) provistos por el propio ServerNode aludido por la invocación ServerNode implements 1 +reference ContractImplementation 0..* +g ate wayRe feren ce s ContractImpInstanceDescriptor +environment BuildingBlock Runtime Environmen t Figura 2. Punto de Vista de Ejecución Cada implementación de contrato que implementa un Contrato registrado, se instancia en el contexto de un nodo de procesamiento o ServerNode conectado al bus de servicios (Desde el punto de vista de procesamiento distribuido) (Ver Figura 3). Cada instancia de Implementación de contrato dispone de una identidad propia y tiene asociado una referencia (caracterizada por un Descriptor asociado de tipo ContractImpInstanceDescriptor como vimos anteriormente). B D C A Punto de acceso alternativo (Gateway) Punto de Acceso (ContractImpInstanceDescriptor) Instancia que implementa Contrato (ContractImpInstance) Server Node. (Agrupamiento lógico de servicios) Figura 3. Vista de Procesamiento Distribuido Cada ServerNode maneja un conjunto de puntos de acceso alternativos (gatewayReferences) que sirven de “pasarela” a los efectos de alcanzar un servicio brindado a nivel de un “ServerNode” específico. Este mecanismo se utiliza a los Servicios del Framework La arquitectura se caracteriza por la existencia de un conjunto de servicios básicos (del propio framework) que facilitan la operación de los componentes del sistema. Algunos de estos servicios son: • Servicio de Registro General. Brinda servicios para soportar la transparencia en la ubicación de entidades • Servicio de Invocación. Permite que las entidades puedan invocar servicios provistos por otras entidades de acuerdo a las reglas del contrato del servicio y las políticas del sistema. • Seguridad. Mecanismos que posibilitan la autenticación, autorización, accounting y auditoría. Servicio de Invocación Uno de los objetivos del uso del servicio de invocación es ocultar los detalles del procedimiento subyacente involucrado. La tecnología y el modo de invocación son transparentes al desarrollador de la aplicación que especifica una determinada invocación. Cada componente que desea invocar un servicio disponible (Contract) en un componente externo lo hace a través del servicio de invocación. Se indica la Implementación de Contrato instanciada y método a ejecutar. Complementariamente se incluyen el conjunto de argumentos requeridos por el método del contrato especificado. La existencia del servicio de invocación posibilita entre otras cosas: • Validación de credenciales para el acceso a contratos. (Se validan roles de acceso ) • Validación de precondiciones. Se validan las precondiciones estipuladas en el contrato. Si no se cumplen se genera la excepción correspondiente. • Log de uso de la interfaz. Es posible hacer un Log (de las invocaciones realizadas a la interfaz) Servicio de Registro General Brinda servicios para soportar la transparencia en la ubicación de entidades. Las entidades registradas que son de interés desde el punto de vista arquitectónico son: Entradas que identifican servicios de Información compartida , Componentes, Contratos , Implementaciones de Contratos etc.(Este servicio solo tiene importancia en la etapa del descubrimiento de las operaciones) El servicio de registro mantiene la información de componentes (BuildingBlock) y contratos implementados (ContractImplementation) disponibles en cada componente (Ver figura 4). A su vez para cada contrato existen las implementaciones de contratos instanciadas (ContractImpInstance) . Cada implementación de contrato instanciado (ContractImpInstance) registrada tiene un identificador que lo caracteriza. Con este nombre característico se puede referenciar cualquier contrato instanciado del sistema. En el momento de invocación (usando el servicio de invocación) se configura la solicitud de invocación ("Invocation") referenciado a la implementación del contrato instanciada (ContractImpInstance) y método a invocar (además de los argumentos requeridos). Registry ContractSpecification ServerNode Service A Wrapper Service B Runtime Wrapper Runtime Environment Environment Proxy Client Proxy Client Descriptor NM1:Network Manager Invocation Object Figura 5. Invocación En la figura 5 se muestra la aplicación de la arquitectura a un sistema genérico. Se pueden ver dos servicios A y B, pertenecientes a entidades diferentes (cada una de ellas operando en tecnologías similares o diferentes) y la interacción entre ellos a través de los recursos provistos por la arquitectura. Los servicios A y B disponen de un entorno de ejecución (que esconde la tecnología subyacente) y un “Wrapper” que es responsable de la activación y de la propia invocación del servicio. IW rapper located in implements Implementación invok e (Invoc ati on : i) : O bjec t Contract +contract ContractImpInstance Contrac tImplem entatio n +gatewayReferences identified by +reference 1 Name 0..* ContractImpInstanceDescriptor F ram ework W rapper invok e (Invoc ati on : i) : O bjec t IS ervic eA s ervic eIns tanc e Figura 4. Registro General Invoc ation Es importante destacar que la especificación de la invocación se hace en términos "neutrales" en el sentido de que no se requieren señalar detalles de tecnologías específicas. m ethod : S tring = null param [] : Objec t = null El registro contiene los detalles de las implementaciones existentes, como por ejemplo: Tecnología utilizada en la implementación: ( Ej. EJB o CORBA),la dirección real del componente (JNDI Name o IOR de CORBA), modo de invocación (Si la invocación es sincrónica o asincrónica.) Invoc a bleContra c t Nota: La meta de este trabajo es abordar específicamente el problema de implementación de Contratos, registro e invocación de los mismos. Los temas vinculados a Seguridad y control de transacciones no se encaran aquí. S ervic eA OperationA () Figura 6. Implementación de Servicios Desde la perspective del Servidor, el servicio se implementa en una clase que realiza la interfaz del contrato a implementar. La clase que implementa el servicio deriva de una clase abstracta “ContractImplementation” de manera que hereda los servicios básicos del framework, que posibilitan la comunicación con componentes externos. De esta manera la implementación se realiza en términos “neutrales” en cuanto a la interoperabilidad con otros componentes. La implementación está escrita de manera que la comunicación con otros componentes se realiza a través de la primitiva de invocación de contratos implementados externos. El servicio es accesible a través de un Wrapper del framework. El wrapper que posibilita el acceso consiste básicamente en un componente que implementa la interfaz IWrapper que exige la implementación del método performInvocation(Invocation:i ): Object (Ver Figura 6) El Wrapper sostiene la implementación del servicio. Los componentes que requieren comunicarse con una Instancia de Implementación de Contrato (Implementada por ServiceA) lo hacen inicialmente a través de las primitivas del framework. (Ver Figura 6 ) Desde la perspectiva del cliente, invocar un contrato externo a través del framework implica crear un objeto “Invocation” que contiene todos los detalles de la invocación (ContractImpInstance requerido, método y lista de argumentos del método). El servicio de invocación es tal que enruta este requerimiento hacia el Wrapper de la implementación del contrato. Posteriormente el Wrapper interpreta la invocación y es el encargado de invocar realmente el método deseado en la implementación del servicio. El wrapper invoca el método finalmente por mecanismos de reflexión. En este caso se utilizan los mecanismos de reflexión de Java. Hasta el presente el framework esta implementado en Java y permite interacciones sincrónicas y asincrónicas entre servicios implementados en CORBA,J2EE y Clientes externos escritos en Java (usando RMI) Las interacciones asincrónicas se llevan a cabo utilizando sistemas de mensajería estándares como JMS y CORBA Notification Service. den modelar en forma transparente el uso de interfaces locales o remotas para EJB. Los servicios corren bajo un entorno de ejecución del framework. El mismo está equipado con un conjunto de dispositivos que implementan cada uno de los patrones de interoperabilidad requeridos, denominados “proxy”. Cada Proxy es capaz de manejar un patrón de interoperabilidad específico. El perfil del entorno de ejecución esta dado por el conjunto de artefactos "Proxy" disponible (Ver Figura 7 ) Por otro lado cada implementación de contrato, caracterizada por un descriptor asociado (obtenible desde el servicio central de “Registry”), señala el patrón de interoperabilidad requerido. En el momento de la invocación se selecciona dinámicamente el “Proxy” adecuado, compatible con la implementación. Este dispositivo es el que finalmente lleva a cabo la interacción requerida. En principio el uso de los distintos patrones de interoperabilidad se maneja en forma transparente. Contract Name implements +cont ract ContractImplementation identified by ContractImpInstance +environment RuntimeEnvironment located in ServerNode RuntimeEnvironmentEjb +ref erence RuntimeEnvironmentCorba RuntimeEnvironmentClient +gatewayRef erences 1 El framework propuesto no maneja explícitamente el control de transacciones. En este sentido depende del potencial de la tecnología elegida. Por ejemplo los contratos implementados en el contexto de Servidores de Aplicaciones J2EE se ejecutan en un entorno transaccional provisto por el propio contenedor de manera transparente. #resources[] 0..* 0..* ContractI mpInstanceDescript or Proxy +pattern +pattern I nteroperabilityPattern ProxyCorbaAsinc Patrones de Interoperabilidad. El framework permite manejar distintos patrones de interoperabilidad a los efectos de procesar las interacciones entre Componentes. Las interacciones pueden ser sincrónicas o asincrónicas y apoyarse sobre distintas tecnologías. Por ejemplo, se pueden manejar interacciones asincrónicas apoyadas sobre mensajería JMS (en el caso de J2EE) o el servicio “Notification Service” de la plataforma CORBA. Lo mismo sucede a nivel de interacciones sincrónicas, podría usar RMI o IIOP en la plataforma CORBA. Incluso se pue- ProxyEjbAsinc ProxyEjbToCorbaSinc ProxyCorbaSinc ProxyEjbSinc ContractImpInstanceDescriptorCorbaSinc ContractImpInstanceDescriptorCorbaAsinc ContractImpInstanceDescriptorEjbAsinc ContractImpInstanceDescriptorEjbSinc Figura 7. Framework aplicado a Tecnologías Específicas Cuando no existe una compatibilidad directa entre la implementación del servicio y el entorno de ejecución se utilizan “gateways” en forma transparente. Cada “nodo” conectado al vehículo de comunicaciones común, maneja puntos de accesos alternativos a los ofrecidos por las implementaciones de servicios. De esta manera la búsqueda de la implementación de un servicio dado tiene en consideración el perfil del entorno de ejecución invocante, de manera que el descriptor de la implementación de contrato devuelto sea compatible con el perfil del entorno de ejecución. Aunque existe un comportamiento por defecto en lo que tiene que ver con la elección del patrón de interoperabilidad (proceso transparente), el Desarrollador aún puede especificar una política que permita forzar la elección de patrones de interoperabilidad específicos requeridos. Esto se puede realizar globalmente para el contexto del Entorno de Ejecución o puede llevarse a cabo específicamente para una invocación particular. DISEÑO NEUTRAL IAlarmasNML <<comp_spec>> ServicioNML procesarAlarma(alarm : Alarma) <<ifrFramework>> ContractImplementation IMPLEMENTACION N <<ifrService>> ServicioNML El “framework básico neutral” se extiende para cada tecnología específica, de manera de poder trabajar con la metadata requerida por cada tecnología y patrón de Interoperabilidad. Los conceptos: Contract, ContractImpInstanceDescriptor RuntimeEnvironment y Proxy se extienden para modelar el entorno de la tecnología específica (como puede observarse en la figura 7) Actualmente el framework soporta los siguientes patrones de Interoperabilidad. Para cada uno se proveen los “Proxyies” y “Wrappers” correspondientes (como implementaciones por defecto) • • • • EJB Sincrónico. Wrappers implementados como EJB Session Bean. EJB Asincrónico. Wrappers implementados como Message Driven Bean vinculados a un JNDI Topic. CORBA Sincrónico. El Wrapper es un servicio CORBA (que implementa “IWrapper”) CORBA Asincrónico. El Wrapper es un servicio CORBA Listener vinculado a un EventChannel (CORBA Notification Service) EJEMPLO A continuación se ilustra con un ejemplo, como se lleva a cabo la implementación de un servicio correspondiente a un hipotético sistema de gestión de alarmas de elementos de red y como se procesa la invocación del mismo desde otra entidad. procesarAlarma(alarma : Alarma) Figura 8. Implementación En la figura 8 se puede observar la especificación parcial de un componente que implementa una interfaz determinada en términos neutrales(utilizando UML). Para implementar dicho servicio, basta realizar la implementación del mismo extendiendo la clase abstracta provista por el framework “ContractImplementation”. De esta manera la implementación del servicio hereda los servicios provistos por el framework (fundamentalmente el servicio de invocación y el acceso al Registro General). En la figura 9, se muestra la invocación del servicio. Cliente y Servidor operan sobre diferentes tecnologías (Application Server J2EE y Servicio Corba como receptor y productor de mensajes de alarmas respectivamente). Se puede observar que las referencias a servicios externos dentro de la implementación del Building Block “invocante”(BB-EML) están desprovistas de dependencias tecnológicas (Incluso está escondido el patrón de interoperabilidad utilizado por el servicio). El Registro General conoce los detalles de la implementación como por ejemplo si se implementa una interfaz sincrónica o asincrónica. De esta manera el servicio de invocación es capaz de enrutar el requerimiento hacia el destino adecuado . BB_EML Permite además lograr diseños neutrales e implementaciones que puedan ser reusadas ante cambios tecnológicos. BB_NML ContratoNML ... {Invocar(ServicioNML, ProcesarAlarma,alarma)} ... ServicioNML ProcesarAlarma() MDB ProcesarX SBProcesarX Implementa IWrapper TopicX JMS Invocacion Asincrona Invocacion Sincrona La experiencia mostró además que la arquitectura propuesta permitió esconder con facilidad, la aplicación de “Patterns” para mejorar el rendimiento de Servidores de Aplicaciones, de manera de obtener implementaciones performantes despojadas del ruido que significaría la inclusión (en el contexto de la propia implementación) de artefactos auxiliares requeridos para mejorar performance. Este encare no busca proponer un nuevo framework sino que pretende que el propio constructor del sistema customize el framework básico de acuerdo a sus necesidades (Especialización) que permitan encapsular problemas de interoperabilidad tecnológicos y la propia configuración requerida por el usuario. Servicio de Invocacion Figura 9. Invocación en plataforma J2EE Este destino puede ser un Session Bean Remoto (caso sincrónico) o un Message Driven Bean asociado a un “Topic” de mensajería JMS (caso asincrónico) según lo indicado en el Registro General. TRABAJOS FUTUROS A los efectos de mejorar el framework , están previstas varias extensiones para el futuro, como por ejemplo considerar nuevas tecnologías como WebServices y SOAP, además de incorporar la capacidad de manejar Implementaciones utilizando ECMA Script. Se plantea la posibilidad de verificación de Precondiciones en tiempo de ejecución utilizando expresiones ECMAScript . De la misma manera se requiere trabajo adicional en las áreas de Seguridad y Control de Transacciones . CONCLUSIONES Se propone este enfoque como una estrategia para generar sistemas basados en building blocks, resolviendo el problema de interacción entre ellos a través de un vehículo de comunicaciones común pudiendo esconder distintos patrones de interoperabilidad (sincrónico, asincrónico, etc.). Este enfoque permite achicar la brecha entre el diseño neutral y la implementación. La implementación no arranca de cero. Se aplican los patterns de Wrappers y Contexto de Ejecución propuestos para la implementación de servicios. (Utilizando el servicio de registro de contratos propuesto) . AGRADECIMIENTOS Los autores desean agradecer a todas las personas que han contribuido a este artículo. En particular el Grupo de “Interoperabilidad” en el Instituto de Computación de Facultad de Ingeniería (Universidad de la República, Uruguay), al Grupo de Comunicaciones que trabaja en el Instituto de Ingeniería Eléctrica (Facultad de Ingeniería) y a la gente de Antel (Empresa Nacional de Telecomunicaciones, Uruguay) especialmente el equipo aplicado a la Gestión de Redes y Servicios. REFERENCIAS [1] Basic Framework for distributed components interoperability. Stella Bonino, Gerardo Gándara. CSITeA03, Rio de Janeiro June 2003 [2] TM Forum, TMF 053B. NGOSS ArchitectureTechnology Neutral Specification(Contract Specification) [3] TM Forum, Generic Requirements for Telecommunication Management Building Block, GB909, Versión 3, 2001. [4] TMForum, Telecom Operations Map, GB910, Versión 2.1, 2000. [5] [CIS] TMF045: The Common Information Structure. TeleManagement Forum, 1999. [6] [SIM] GB914, TeleManagement Forum, 2000. [7] Inoue, Lapierre, Mossotto Editors, The TINA Book a cooperative solution for a competitive world. Prentice Hall Europe 1999. [8] Zahavi R., Enterprice Application Integration with CORBA, OMG Press, 2000. [9] Ayers D, Professional Java Server Programming, Wrox, 2000. [10] Vawter C. y E. Roman, "J2EE vs. Microsoft.NET: A comparison of building XML-based web services", 2001. [11] Ritter S., "Enterprise Java Beans: The answers to the three questions every developer will ask.", 1999. [12] William C. Goers, Michael R. Brenner; Implementing a Management System Architecture Framework, OctDec 2000, Bell Labs Technical Journal [13] James Rumbaugh, The Unified Modeling Langage Reference Manual, Addison Wesley, 1999. [14] [GAM95] Erich Gamma, et al. Design Patterns: Elements of Reusable Object Oriented Software.AddisonWesley, 1995. [15] Floyd Marinescu EJB™ Design Patterns Advanced Patterns, Processes,and Idioms. [16] Telecom Network Management With Enterprise JavaBeans™Technology,A Technical White Paper ,Sun Microsystems.