Una herramienta basada en cumbia para análisis dinámico ... Binding ... y COM como las...
Transcript of Una herramienta basada en cumbia para análisis dinámico ... Binding ... y COM como las...
Una herramienta basada en cumbia para análisis dinámico de modelos SCA
John Marlon Espitia Malagón
Universidad de los Andes
Facultad de Ingeniería
Departamento de Ingeniería de Sistemas y Computación
Maestría en Ingeniería de Sistemas y Computación
BOGOTÁ DC, 2009
2
Una herramienta basada en cumbia para análisis dinámico de modelos SCA
John Marlon Espitia Malagón
Tesis de grado.
Director
Jorge Alberto Villalobos Salcedo, PhD.
Profesor Asociado.
Universidad de los andes
Facultad de ingeniería
Departamento de Ingeniería de Sistemas y Computación
Maestría en Ingeniería de Sistemas y Computación
BOGOTÁ DC, 2009
3
Tabla de Contenidos Tabla de Contenidos ........................................................................................................................ 3
Tabla de Figuras............................................................................................................................... 6
1. Introducción ............................................................................................................................... 7
2. Marco Teórico ........................................................................................................................... 9
2.1. Arquitectura de Software................................................................................................ 9
Estilo de arquitectura componentes y conectores. ............................................................................ 9
2.2. Modelos de Componentes ............................................................................................ 10
2.2.1. Corba CCM................................................................................................................... 10
2.2.2. Fractal .......................................................................................................................... 13
2.2.3. EJB................................................................................................................................ 15
2.2.4. GAITA [15] [16] [10]..................................................................................................... 18
2.3. Lenguajes de Descripción de Arquitecturas – ADL........................................................ 19
2.3.1. ACME ........................................................................................................................... 20
Propiedades y Restricciones...................................................................................................... 21
Clases y Familias de Arquitecturas............................................................................................ 21
Herramientas............................................................................................................................. 21
2.4. Herramientas para Monitoreo ...................................................................................... 21
2.4.1. JMX .............................................................................................................................. 21
2.4.1.1. Arquitectura JMX .................................................................................................... 22
2.4.2. Business Activity Monitoring – BAM ........................................................................... 24
2.4.2.1. Oracle BAM ............................................................................................................. 24
3. Service Component Architecture – SCA ........................................................................ 25
3.1.1. Historia ........................................................................................................................ 25
3.1.2. Elementos.................................................................................................................... 27
3.1.2.1. Service ..................................................................................................................... 27
3.1.2.2. Reference ................................................................................................................ 27
3.1.2.3. Interface .................................................................................................................. 28
3.1.2.4. Binding .................................................................................................................... 28
3.1.2.5. Implementation ...................................................................................................... 28
4
3.1.2.6. Wire......................................................................................................................... 29
3.1.2.7. Property .................................................................................................................. 29
3.1.2.8. Component ............................................................................................................. 30
3.1.2.9. Composite ............................................................................................................... 30
3.1.2.10. Component Type ................................................................................................ 31
3.1.2.11. Domain................................................................................................................ 32
3.1.3. Ejemplo........................................................................................................................ 32
3.1.4. Caso de Prueba............................................................................................................ 35
(Figure 16) ................................................................................................................................. 36
3.1.5. Características de SCA ................................................................................................. 36
3.1.6. Herramientas............................................................................................................... 38
4. Proyecto Cumbia ........................................................................................................... 38
4.1.1. Modelos ejecutables y objetos abiertos ..................................................................... 38
4.1.2. CumbiaOpenObjectsKernel ......................................................................................... 40
4.1.3. Motores que usan objetos abiertos ............................................................................ 44
5. Solución para el análisis de Modelos SCA. .................................................................... 45
5.1. Metamodelo de SCA...................................................................................................... 47
5.1.1. Elementos Del Metamodelo........................................................................................ 50
5.1.2. Máquina de estado de Componente........................................................................... 50
5.1.3. Maquina de estado de Wire ........................................................................................ 50
5.1.4. Maquina de estado de Composite .............................................................................. 51
5.1.5. Maquina de estado de Domain ................................................................................... 52
5.2. Motor de SCA usando Objetos Abiertos ....................................................................... 53
5.2.1. Caracteristicas ............................................................................................................. 53
5.2.2. Diseño.......................................................................................................................... 55
5.2.3. Service y Reference ..................................................................................................... 56
5.3. Diseño detallado de la implementación........................................................................ 58
5.4. Arquitectura del Motor ................................................................................................. 61
5.5. Experimentación y Pruebas........................................................................................... 62
5.5.1. Pruebas........................................................................................................................ 67
5.5.2. Framework de Pruebas................................................................................................ 67
5
6. Conclusiones y Trabajo futuro.............................................................................................. 70
6.1. Conclusiones: ................................................................................................................ 70
6.2. Trabajos futuros: ........................................................................................................... 71
7. Bibliografía............................................................................................................................... 72
6
Tabla de Figuras Figure 1. Key Elements in the CORBA Component Model [8] ..................................................................... 12 Figure 2. Vista interna de un componente fractal. [10] .............................................................................. 14 Figure 3. Composición y componente compartido en fractal. [4] ............................................................... 15 Figure 4. Servicios para EJB en el Contenedor [12]..................................................................................... 16 Figure 5. Componentes EJB [12]................................................................................................................. 17 Figure 6. Componente Compuesto en Gaita-C [10] ................................................................................... 18 Figure 7. Arquitectura JMX [19]............................................................................................................... 23 Figure 8. Especificaciones de SCA............................................................................................................... 26 Figure 9. Representación gráfica de Service ............................................................................................... 27 Figure 10. Representación gráfica de Reference ........................................................................................ 28 Figure 11. Representación gráfica de Wire................................................................................................. 29 Figure 12. Representación gráfica de Property........................................................................................... 29 Figure 13. Representación gráfica de Component...................................................................................... 30 Figure 14. Representación gráfica de Composite ....................................................................................... 31 Figure 15. Frontend del Caso de Prueba..................................................................................................... 35 Figure 16. Backend del Caso de Prueba...................................................................................................... 36 Figure 17. Vista de elementos SCA............................................................................................................. 37 Figure 18. Vista de un objeto abierto ......................................................................................................... 40 Figure 19. Metamodelo de SCA.................................................................................................................. 49 Figure 20. Máquina de estado de Componente.......................................................................................... 50 Figure 21. Máquina de estado de Wire ...................................................................................................... 51 Figure 22. Máquina de estado de Composite ............................................................................................. 52 Figure 23. Máquina de estado de Domain.................................................................................................. 53 Figure 24. Modelo ejecutable para un dominio.......................................................................................... 54 Figure 25. Modelo ejecutable para SCA...................................................................................................... 54 Figure 26. Service Proxy ............................................................................................................................. 57 Figure 27. Reference Proxy ........................................................................................................................ 57 Figure 28. Construcción de elementos ejecutables .................................................................................... 58 Figure 29. Diagrama detallado service proxy ............................................................................................. 59 Figure 30. Diagrama detallado reference proxy ......................................................................................... 60 Figure 31. Arquitectura General................................................................................................................. 61 Figure 32. Detalle de los componentes generales del diseño ..................................................................... 62 Figure 33. Máquina de estado de Wire ...................................................................................................... 63 Figure 34. Transición Call en el Wire .......................................................................................................... 64 Figure 35. Transición PassCallResult en el Wire.......................................................................................... 65 Figure 36. Diseño solución BAM................................................................................................................. 66 Figure 37. Esquema del framework de pruebas ......................................................................................... 67
7
1. Introducción
Service Component Architecture (SCA) [1] ofrece un modelo de programación para construir
aplicaciones. Cuando se construyen aplicaciones es deseable contar con herramientas que
permitan analizar características de diferentes tipos que sean relevantes para los diferentes
interesados. Service Component Architecture es una tecnología relativamente nueva y se ha
especificado con el fin proporcionar un estándar para construir aplicaciones, el avance en el
desarrollo de diferentes herramientas para SCA no muestra un avance específico en el tema
de herramientas para hacer análisis sobre las aplicaciones construidas bajo este modelo.
Las herramientas que permiten hacer análisis deben tener en cuenta que los análisis que
pueden hacer depende de las características de los elementos a observar, analizar un
elemento o un grupo de elementos consiste en observar las diferentes características de ellos
e interpretarlas, cuantos más puntos de análisis o posibilidades de análisis pueda haber mayor
cantidad de posibilidades de análisis resultan. La capacidad de observación de un elemento
está asociada directamente al tipo de análisis que se puede hacer sobre él, teniendo un mayor
nivel de distinciones de las características del elemento se puede recopilar una mayor
cantidad de información. Si a la capacidad de distinguir se le suma la posibilidad de saber en el
tiempo cuando se puede observar el elemento, el análisis puede ser mucho más poderoso, el
análisis estático describe las características del elemento puntual y el análisis dinámico nos
permite conocer las características cuando por su comportamiento el elemento hace algo
especifico.
SCA por sus características se enmarca como un modelo para construir aplicaciones CBSE
(Component based software engineering), en la actualidad se destaca CCM [2], EJB [3], Fractal
[4] y COM como las herramientas para desarrollo de componentes más relevantes, estas
herramientas a diferencia de SCA proporcionan un conjunto más amplio de detalle en las
facilidades que proveen, no se limitan solo al modelo de componentes sino que también
proporcionan características asociadas a sus requerimientos no funcionales lo que desde su
definición ya determina como debe ser la implementación de las herramientas que soportan
su ejecución. Las características de los modelos de componentes en ejecución se dan como
una suma de la especificación del modelo y la herramienta que facilita su ejecución, la
herramienta puede implementar lo definido para el modelo y con sus características
adicionales proporcionar facilidades al ejecutar el modelo.
En este caso la herramienta para realizar análisis sobre SCA debe proporcionar la capacidad de
observación e intervención en sus elementos, en la actualidad se pueden usar diferentes
tecnologías para dar las capacidades de observación e intervención sobre los elementos se
tiene por ejemplo el uso de programación orientada a aspectos (AOP) y también la
8
intervención manipulando las representaciones de bajo nivel las aplicaciones por ejemplo
bytecode, en este caso se van a usar Objetos Abiertos (Open Objects) [5], los objetos abiertos
se incorporan a las aplicaciones desde su diseño y proporcionan una opción útil cuando se
requiere que las aplicaciones construidas sean altamente observables sin la necesidad de
realizar cambios posteriores o de conocer detalles internos en términos de código fuente. Un
objeto abierto está diseñado para modelar y externalizar el comportamiento relevante de un
elemento. Cuando se trabaja con un objeto abierto se tiene la posibilidad de observar su
comportamiento, su estado, recibir notificaciones de cambios de estado específicos y acceder
a sus propiedades cuando sus estados cambian entre otras.
En este caso SCA ha sido modelado como un modelo ejecutable constituido por los elementos
de SCA donde algunos de sus elementos han sido modelados como objetos abiertos es decir
pueden ser observados y pueden notificar a quien le interese cambios en su estado que
permiten la recopilación de información de la ejecución en ese momento específico.
Como se había mencionado cuando se quiere hacer análisis de algún tipo de modelo, lo
primero que se debe definir es cuál es el modelo y las características a observar. La
herramienta de análisis que se desarrolló tiene como base los elementos definidos para SCA y
la capacidad de observación que brindan los objetos abiertos. En la construcción de la
herramienta que permite el análisis de aplicaciones no hay incorporado elementos que
realicen análisis de las aplicaciones pero si los puntos de intervención y la dinámica que
permite generar los objetos abiertos para conectar aplicaciones que hagan el análisis. En este
trabajo se muestra un caso donde se muestra la ejecución de la aplicación y algunos análisis
hechos sobre su ejecución.
El documento se divide en una parte teórica y otra relacionada directamente con SCA y su
implementación, en la parte teórica se busca dar un contexto global basado en los modelos de
componentes y los lenguajes de descripción de arquitecturas para mostrar las características
de los diferentes modelos y los conceptos que se usan para llegar a la herramienta que
permite el análisis, en la relacionada con SCA se muestra detalle respecto a sus orígenes
históricos, sus elementos, sus características principales, sus ventajas identificadas, luego se
muestra detalle de cómo se logra la formulación del metamodelo y la implementación
definiendo los elementos del modelo ejecutable, la arquitectura de la solución, las
características relevantes de la implementación, las pruebas y el escenario de análisis que sirve
como validación de las posibilidades de la herramienta.
9
2. Marco Teórico
2.1. Arquitectura de Software “La arquitectura de software de un programa o un sistema de computación es la estructura de
estructuras del sistema que incluye componentes de software, sus propiedades relevantes y la
relación entre ellos.” [6].
La arquitectura de software es una disciplina que surge como una necesidad derivada de la
evolución de los sistemas computacionales. Estos inicialmente resuelven problemas
específicos, pero con la evolución del hardware y el crecimiento de las organizaciones se
convierten en soluciones a grandes problemas que involucran diferentes participantes. Las
soluciones informáticas a este tipo problemáticas pueden variar de tamaño y en algunos casos
ser de un tamaño considerable. La arquitectura de software es una herramienta que permite
estructurar estas soluciones informáticas de manera tal que se pueda, resolver un gran
problema como la solución de varios problemas menos complejos trabajando juntos
incorporando el uso de diferentes tecnologías, la participación de diferentes personas
trabajando cooperativamente y finalmente estructurando estas soluciones para que puedan
crecer si es necesario.
Estilos de arquitectura. Una arquitectura de software en general se describe como un
conjunto de elementos que trabajan juntos y pertenecen a la estructura de un sistema de
computación. Esta definición no da un mayor detalle respecto al tipo de elementos tampoco a
como se relacionan y no describe en que estructura están contenidos. Una forma de
estructurar estos elementos es por medio de los estilos de arquitectura. “Un estilo de
arquitectura es la especialización de elementos, tipos de relaciones, junto con una serie de
restricciones de cómo estos pueden ser usados” [7], un estilo de arquitectura da las pautas de
que tipo de elementos existen en un tipo de arquitectura de software, que relaciones existen
entre esos elementos, como ellos se relacionan y que restricciones puede haber sobre los
elementos y sus relaciones.
Estilo de arquitectura componentes y conectores. En el estilo de arquitectura de componentes y conectores C&C [7] esta compuesto por dos
tipos de elementos, su nombre lo indica fácilmente son componentes y conectores, los
componentes son el principal elemento computacional y los conectores definen los
mecanismos de interacción entre los componentes, de manera general este tipo de elementos
se encuentra en los modelos de componentes conocidos. Las formas de interacción y las
restricciones son algunas de las características que permiten realizar diferenciaciones entre
unos y otros, a continuación se muestra una breve descripción de modelos de componentes
conocidos.
10
2.2. Modelos de Componentes
2.2.1. Corba CCM Common Request Broker Architecture (CORBA) es la arquitectura ofrecida por la OMG que
tiene como principal objetivo permitir la comunicación e interoperabilidad de objetos entre
diferentes aplicaciones, ejecutadas en diferentes plataformas y escritas en diversos lenguajes,
esto último es lo que hace a CORBA una alternativa sobre otras tecnologías permite
flexibilidad y portabilidad de las aplicaciones, basado en un paradigma orientado a objetos.
Elementos
• Object Request Broker (ORB), que es el encargado de la localización e invocación de
los métodos sobre los objetos participantes en el sistema, está ubicado en cada
máquina y se encarga de realizar la comunicación de datos con los ORB de otras
máquinas.
• Internet Inter-ORB Protocol (IIOP), es el protocolo estándar de CORBA a través del cual
se efectúa la comunicación.
• Interface Definition Language (IDL), es un lenguaje con el que se especifican las
interfaces con los servicios que los objetos ofrecen, por lo tanto no incluye ninguna
implementación, sino que crea una interfaz en un lenguaje declarativo y neutral, de
manera que sea independiente de la plataforma, una implementación de un objeto
podrá entonces ser ejecutada a través del IDL de manera estática en tiempo de
compilación o de manera dinámica en tiempo de ejecución por el cliente que lo
requiera.
• Objects Adapters (OA), es encargado de recibir las peticiones a través de la red y
permitir que las implementaciones de los objetos accedan a servicios ofrecidos por el
ORB como la generación de referencias para los objetos.
• Corba Services, que son objetos que prestan servicios básicos para el uso e
implementación de componentes CORBA, aquí se resulten accesos a referencias de
objetos, notificación de eventos o cambios de estado, entre otros.
En el Corba Component Model (CCM), un componente se describe por medio del IDL, Existen
dos tipo de componentes básicos y extendido, los componentes básicos simplemente
encapsula un objeto para que tenga propiedades de componente y pueda ofrecer atributo en
cambio los componentes extendidos tienen mayores capacidades en función a los demás
elementos del modelo.
11
Existen otros elementos en el modelo que permiten relacionar el componente con los demás
componentes y con el contenedor, Los componentes cuentan con puertos que permiten
relacionarse con los demás componentes y con su contenedor, entre los tipos de puerto
existen facetas, receptáculos, atributos, orígenes y generadores de eventos (source y sink). Las
facetas son las interfaces que permiten el acceso a la funcionalidad del componente, cada
interface es como una vista del componente que le interesa a un cliente, un receptáculo
describe la necesidad de una funcionalidad que debe ser facilitada por un componente que
tenga una faceta compatible con ese receptáculo, los eventos permiten comunicación
simplemente suscribirse o generar eventos que son consumidos por los interesados que
previamente se han registrado para escuchar estos eventos. Un componente también tiene
propiedades que pueden ser administradas por un factory en el momento de construcción del
componente, las propiedades son un mecanismo de configuración del componente.
Un componente extendido tiene como propiedad poder heredar propiedades de otros
componentes, tener facetas, receptáculos y event source y sink.
La comunicación o trabajo conjunto de componente se da por medio de referencias de un
componente a otro, se reconoce el concepto de conexión en una referencia de un
componente a otro. En el caso de los eventos CCM usa un modelo de eventos publish/suscribe
que es usado por los componentes para comunicarse, los componentes acceden a este por
medio del contenedor quien administra el servicio.
(Figure 1)
12
Figure 1. Key Elements in the CORBA Component Model [8]
Comunicación entre componentes CORBA
CORBA esta fundamentado en dos modelos: uno basado en el modelo de orientado a objetos,
al cual agrega todas sus características como lo son los tipos de datos, abstracción, herencia y
polimorfismo, además se fundamenta en un modelo de referencia o arquitectura conocida
como Object Management Architecture (OMA). CORBA llega a presentar una infraestructura
de framework para construir aplicaciones orientadas a objetos, de esta manera las interfaces
definen los servicios que prestan los objetos, ocultando la programación a bajo nivel de
aplicaciones distribuidas, las funciones y los datos se agrupan en objetos, estos objetos
pueden estar en diferentes máquinas, pero se accederá a ellos a través de funciones normales
dentro un programa; CORBA envuelve el código escrito en otro lenguaje en un paquete que
contiene información adicional sobre las capacidades del código que contiene, y sobre cómo
llamar a sus métodos. Las invocaciones a métodos remotos son enviadas por los clientes
llamando objetos locales llamados “Stubs”, el cual intercepta dichas invocaciones y continúa el
proceso de llevar y retornar automáticamente dicha invocación. La implementación del
objeto, no tiene que conocer el mecanismo por el cual un cliente le ha invocado un servicio.
13
Un programa cliente que desee invocar un método remotamente debe utilizar un stub, el cual
es un objeto local que cumple con la interfaz IDL y que representa al objeto remoto en la
máquina local. Cada invocación a un método del stub es enviada a través del ORB al servidor
donde es recibido por el ORB remoto. Al recibir la invocación, el ORB remoto ejecuta el
skeleton del objeto, el cual es un objeto que también cumple con la interfaz IDL pero que
delega la invocación de un método sobre la implementación real del objeto, los stub y
skeleton utilizados en la comunicación son previamente generados a partir de la definición de
la interfaz IDL.
2.2.2. Fractal Fractal es un modelo de componentes que puede ser usado con diferentes lenguajes de
programación, es diseñado por el consorcio ObjectWeb [9]. El objetivo principal de Fractal es
permitir implementar, instalar y administrar sistemas de software complejos, teniendo como
ventaja sus principales características:
• Componentes compuestos.
• Componentes compartidos.
• Componentes con capacidad de introspección, configuración y reconfiguración.
Fractal tiene en cuenta los conceptos de componentes, interfaces y localización basada en
nombres, tiene un lenguaje IDL que le permite definir declaración genérica de interfaces que
luego es traducida a lenguajes específicos y genera stubs y skeletons para lograr la ejecución.
(Figure 2)
14
Figure 2. Vista interna de un componente fractal. [ 10]
Componentes
Un componente en fractal esta compuesto por un controlador o membrana y un contenido,
interactúa a través de operaciones en puntos de acceso llamadas interfaces similares a un
puerto en otros modelos, cuenta con capacidad introspección que puede ser configurada por
medio de niveles desde caja negra hasta total navegación, puede crear otros componentes,
pasivarse a si mismos, serializarse y pueden ser distribuidos.
Controlador
Se encarga de realizar la administración del componente tanto del mismo como de los
componentes que contiene, provee interfaces externas que permiten exportar interfaces de
negocio, navegar o reconfigurar externamente el componente y también internas que pueden
ser accedidas por los subcomponentes.
Un controlador a su vez esta compuesto de controladores que pueden ser de diferentes tipos
Attribute controller para acceso a atributos, Binding controller permite realizar primitive
bindings, Content controller permite modificar el contenido del componente, Life-cycle
controller permite administrar el ciclo de vida del componente e interceptores que que se
encargan de exportar las interfaces proveídas por los subcomponentes o de redirigir las
peticiones a estos y de realizar pre o post procesamiento si es requerido.
Contenido
Es un número finito de componentes (subcomponentes) que a su vez se encuentran bajo el
control del controlador del componente que los contiene. Estos componentes pueden ser
compartidos, es decir una instancia puede estar contenida en diferentes componentes y por
ende bajo el control de cada uno de ellos.
Interacciones
Las operaciones que definen la interacción en el modelo fractal son de dos tipos One-way
consiste en operación de invocación y two-way consiste en invocación y retorno de resultado,
las interfaces pueden ser de dos tipos Server que permite recibir y responder peticiones y
Cliente que permite emitir y esperar el resultado de peticiones. La interacción entre interfaces
llamada binding y puede ser primitiva entre una interface server y una client o compuesta que
en si es una combinación de primitivas y componentes que en si es un componente y resulta
ser un paralelo al concepto de conectores usado en ADLs.
Composición
15
En fractal es posible hacer composición de componentes un componente complejo puede ser
construido como una composición de componentes internos, en este caso la interface de
control del componente superior controla a los internos y por medio de ella se puede realizar
su configuración, también en una composición un componente puede ser compartido, en otra,
es decir la misma instancia de un componente puede encontrarse al tiempo de dos
componentes compuestos.
(Figure 3)
Figure 3. Composición y componente compartido en fr actal. [4]
Herramientas ofrecidas para Fractal
Cuenta con una implementación de referencia desarrollada en Java llamada Julia, un lenguaje
para diseño llamado FractalADL y una aplicación para diseño llamada FractalGUI.
2.2.3. EJB Los Enterprise Java Beans son los componentes usados en JEE [11] y se encuentran definidos
por la especificación EJB que en este momento se encuentra en la versión 3.0 [3], EJB ofrece
un api que permite el desarrollo de aplicaciones usando este tipo de componentes, uno de los
16
objetivos principales de la tecnología EJB es proporcionar un conjunto de servicios base de
sistema como transacciones y seguridad de tal forma que el desarrollador se enfoque en la
lógica de negocio del componente y no en como proveer requerimientos no funcionales.
Un componente EJB se ejecuta en un Contenedor el cual le proporciona un entorno de
ejecución donde le facilita los servicios mencionados anteriormente, también administra su
ciclo de vida y facilita su localización.
(Figure 4)
Figure 4. Servicios para EJB en el Contenedor [12]
Un EJB es un componente que encapsula una lógica de aplicación y la expone por medio de
métodos en interfaces, son portables, reutilizables y pueden ejecutarse en cualquier servidor
que use el API estándar de EJB, pueden ser locales o remotos según se requiera. En la
especificación 3.0, se definen como de dos tipos Session y Message Driven Bean, los Entitity
Bean pasan a ser definidos en el Java Persistence API [13].
Session Bean, se encargan de realizar una tarea para un cliente, pueden tener estado o no,
cuando tienen estado son llamados Stateful, en este caso el estado esta definido como la
representación de valores de las variables de instancia de la implementación del componente
y en este caso debe ser único para cada cliente lo que se traduce en un estado de
conversación con el cliente mientras se realice la ejecución sobre el mismo componente,
cuando no tiene estado son llamados Stateless lo que quiere decir que no se establece un
17
estado de conversación con el cliente, los de tipo Stateless pueden ser reutilizados y en ambos
casos su ciclo de vida es administrado por el contenedor.
Message Driven Bean, permiten procesar mensajes asincrónicamente actúan como un JMS
Listener [14], los mensajes que consume este tipo de componentes pueden ser enviados por
diferentes aplicaciones que soporten envió de mensajes con la tecnología JMS.
(Figure 5)
Figure 5. Componentes EJB [12]
Los componentes EJB se encuentran agrupados en módulos que contienen a su vez archivos
xml que permiten describir algunas de sus propiedades, la composición estos componente se
logra por medio de referencias a las interfaces de negocio del componente que se quiere
utilizar o por medio de delegación a través de clases java simples.
18
2.2.4. GAITA [15] [16] [10] Es un modelo sincrónico de servicios distribuidos no jerárquicos que viven en una red de
nodos, cada uno de los servicios puede ser localizado por medio de la comunicación entre los
diferentes nodos. Gaita se encuentra construido bajo los principios de:
• Simplicidad de conceptos, se requiere la cantidad mínima de elementos para
garantizar las funcionalidades básicas, las funcionalidades adicionales se deben
agregar como una extensión del modelo inicial.
• Reflexivo, Las definiciones de los elementos son alcanzables desde a partir de sus
instancias.
• Escalable, se define con la posibilidad de incluir características adicionales.
Un componente esta definido en Gaita como un elemento nombrado que cuenta con facetas
(interfaces que ofrece) y receptáculos (interfaces que requiere) y se relacionan entre si por
medio de conectores, un conector resuelve la relación entre el receptáculo del componente
origen y la faceta del componente destino, también cuenta con propiedades que facilitan la
configuración del componente.
Los nodos en gaita están conectados entre si y en ellos se encuentran los componentes y los
conectores, permiten el registro de los componentes, su instanciación y su ejecución de forma
distribuida.
(Figure 6)
Figure 6. Componente Compuesto en Gaita-C [10]
19
La composición en gaita se logra ensamblando componentes dentro de otros, un componente
compuesto esta construido por medio de una red de subcomponentes que se relacionan entre
si por medio de conectores y con el componente compuesto por medio de conectores
especiales, Delegate conecta una faceta del componente compuesto con una de un
componente interno, Subbinding es equivalente al conector mencionado anteriormente
(conecta componentes internos) y Subsumed que conecta un receptáculo de un componente
interno con un receptáculo del componente compuesto.
2.3. Lenguajes de Descripción de Arquitecturas – AD L Esta es una definición de ADL que es apropiada para describir lo que son los lenguajes de
descripción de arquitectura son algunas definiciones de ADL
“Lenguaje descriptivo de modelado que se focaliza en la estructura de alto nivel de la
aplicación antes que en la implementación de módulos concretos.” [17]
Estas son las características que teóricamente deben tener los ADL
• Ser capaz de comunicar una arquitectura a todos los interesados.
• Soportar tareas de creación, validación y refinamiento.
• Ser extensible
• Poder representar las arquitecturas usadas comúnmente
• Poder generar implementaciones rápidas
• Intentar ser comprensible tanto por seres humanos como por maquinas.
• Permitir analizar arquitecturas desde el punto de vista completitud, consistencia,
ambigüedad y desempeño
• Soportar generación automática de aplicaciones.
En la práctica se identifican como desventajas las siguientes:
No existe un estándar asociado al comportamiento de los elementos de la arquitectura se
trata de mostrar cosas con descripciones en algunos casos, en otros con lenguajes de
restricciones pero no existe un consenso en este tema, las representaciones logradas son
difíciles de interpretar y no están integradas a herramientas comerciales para permitir la
generación de aplicaciones que sería el propósito deseado para completar la cadena desde
diseño a por lo menos un esbozo de aplicación, La mayoría de adls están diseñados para
resolver un problema de análisis especifico (DSL) o son muy generales, La comunidad en
20
general en la practica reconoce la descripción de una arquitectura de software como un
conjunto de componentes y conexiones alrededor de ellos pero hay diferentes tipos de
arquitecturas que merecen descripciones a niveles de detalle específicos dependiendo de las
características que sean relevantes para los interesados.
2.3.1. ACME Para esta revisión Acme se considero como el mas relevante de los lenguajes y por esta razón
es mostrado en este documento para revisar algunos otros lenguajes en [18] existe un listado
que proporciona información acerca de sus paginas web.
Acme esta definido como un ADL (Architecture Definition Language) simple y genérico que
puede ser usado para realizar intercambio entre diferentes herramientas de diseño de
arquitectura o como una base para desarrollar nuevas herramientas de análisis y diseño de
arquitecturas, en la practica también es usado como un ADL.
Acme permite describir una arquitectura desde cuatro aspectos: estructural muestra la
organización de un sistema y de las partes que lo integran, propiedades de interés del sistema
o de sus partes que permiten proveer información funcional o no funcional de cada una de
ellas, restricciones que definen como el sistema puede cambiar en el tiempo y tipos y estilos
que definen clases y familias de arquitectura.
Elementos estructurales
La estructura de acme esta definida por siete elementos básicos componentes, conectores,
sistemas, puertos, roles, representaciones y rep-maps.
Los componentes representan elementos computacionales y almacenamientos de datos,
tienes múltiples interfaces llamadas puertos que permiten la interacción con otros
componentes a través de conectores. Los conectores también cuentan con interfaces que en
este caso están definidas por un conjunto de roles, cada rol define un participante en la
interacción que describe el conector, a su vez un conjunto de componentes y conectores
define un sistema, que es una especie de grafo en donde se puede decir que un componente
equivale a un vértice y un conector a un arco, donde la conexión esta definida por la relación
entre los roles del conector y los puertos del componente.
Una característica de Acme es que tanto los componentes como los conectores pueden ser
elementos compuestos representados en detalle por una descripción, esta descripción recibe
el nombre de representación. Acme también permite la creación de diferentes tipos de vista
sobre estos elementos compuestos en el caso que se requiera, por ejemplo se quiere mostrar
una vista simplificada o una vista un poco mas detallada esto se puede realizar por medio de
los representation map (rep-map).
21
Propiedades y Restricciones Cada uno de los siete elementos estructurales descritos anteriormente permiten mostrar el
sistema como una interacción entre ellos y cada una de sus características específicas, con el
fin de proveer la capacidad de expresar características que pueden ser de otro dominio, Acme
provee una lista de propiedades que permiten asociar información específica, estas
propiedades están compuestas de un nombre, tipo(opcional) y un valor.
Con el fin de dar una mayor consistencia a la estructura definida Acme permite definir
restricciones basadas en un lenguaje FOPL (first order predicate logic) que permite aplicar
condiciones sobre los elementos del sistema y sus propiedades por ejemplo que A y B deben
estar conectados o que el elemento Z debe tener una propiedad c, entre otras.
Clases y Familias de Arquitecturas Como se menciono inicialmente el objetivo general de acme es permitir el intercambio de
arquitecturas al revisar cada uno de los elementos que participan en la estructura, las
propiedades y las restricciones se puede notar que no hay especificidad en algún estilo de
arquitectura, ya que se quiere poder representar cualquiera, por este motivo Acme permite
definir estilos de arquitectura, un estilo de arquitectura esta definido como un conjunto de
propiedades y elementos estructurales que definen el vocabulario en la familia, restricciones
que determinan como los las instancias de los tipos deben ser usadas, y un estructura por
defecto que define lo mínimo que debe aparecer en un sistema que pertenezca a esta familia.
Herramientas Acme cuenta con un editor gráfico llamado AcmeStudio que funciona como un plugin de
eclipse que permite editar y crear familias y descripciones usando los elementos nombrados
acá, esta herramienta esta disponible en su sitio web[1].
2.4. Herramientas para Monitoreo
2.4.1. JMX Java Management Extensions (JMX) es una especificación que define una arquitectura de
gestión para facilitar la administración de aplicaciones y servicios. Esta tecnología permite que
desarrollar aplicaciones para ser integradas con algunas aplicaciones empresariales existentes
que la han acogido como estándar. Es usada para dar solución a diferentes problemas en el
manejo y monitoreo de procesos y recursos mientras son creados, instalados e
implementados, tales como: realización de ajustes en tiempo de ejecución, notificación en
cambios de estado y de posibles errores, recolección de estadísticas sobre el comportamiento
de la aplicación, así como cambios en la configuración de la misma, entre otras.
22
2.4.1.1. Arquitectura JMX Esta definida en 3 niveles, que permiten gestionar e integrar los recursos de manera sencilla,
un recurso puede ser instrumentado por uno o mas objetos Java, son conocidos como
MBeans, los cuales son registrados en un servidor central de MBeans que puede funcionar en
cualquier dispositivo que soporte Java:
• Nivel de Instrumentación (Instrumentation Level). En la capa de aplicación, es donde
residen los componentes que facilitan la información necesaria para la gestión de una
aplicación. Estos componentes son desarrollados según las necesidades de gestión
específicas de cada aplicación. Por ejemplo, un componente puede tener un método
para parar un servicio dentro de una aplicación.
• Nivel de Agente (Agent Level). El nivel de agente es el que facilita una interfaz para el
manejo de los componentes del nivel de instrumentación, aquí se registran y se
gestionan los MBeans.
• Nivel de Adaptadores (Manager Level). El nivel de adaptadores, consiste en uno o más
conectores (o adaptadores de protocolo) que proporcionan acceso desde los sistemas
de monitorización remotos. Aquí se crea un puente entre las tecnologías existentes y
las futuras [19].
(Figure 7)
23
Figure 7. Arquitectura JMX [19]
Componentes
MBean: es un objeto JMX que expone permite el acceso a la información de administración
por medio de propiedades y operaciones, definidas en una interfaz especifica, los MBeans no
necesitan conocer con que agente jmx están operando, hay 4 tipos de: Standard MBeans
tienen una implementación básica basada en modelo de implementación de los JavaBeans y
no pueden ser modificados en tiempo de ejecución, Dynamic MBeans define una interfaz más
especifica con mayor flexibilidad en tiempo de ejecución, Open Mbeans son dinámicos que
permiten usar objetos gestionados que luego serán descubiertos en tiempo de ejecución y
Model MBeans otro MBean dinámico, genérico y configurable que se utiliza para
instrumentar recursos en tiempo de ejecución.
Servidor MBean: es el componente principal de un agente JMX, aquí es donde se registran y
se exponen los MBeans para su interacción, los cuales pueden ser registrados por otro MBean,
por el mismo agente JMX o por una aplicación remota, a través de este se hace la localización,
monitoreo de atributos, establecer relaciones entre ellos, carga dinámica, programación de
tareas, definir jerarquías, así como el descubrimiento de otros.
Adaptadores y Conectores: las aplicaciones de gestión acceden a los MBeans remotamente a
través del Servidor MBean. El acceso puede también realizarse a través de los conectores de
adaptadores de protocolos. Las diferentes aplicaciones de gestión utilizan los conectores para
interactuar con los agentes. Mientras que los adaptadores de protocolos se utilizan cuando se
quiere integrar el recurso representado por MBean en un entorno de gestión ya existente.
El API de jmx provee una interfaz remota al servidor MBean a través de la cual se pueden
realizar operaciones.
Beneficios de usar JMX
La tecnología jmx permite a los desarrolladores encapsular componentes de objetos java que
luego pueden ser expuestos en un ambiente distribuido para su integración con sistemas
existentes. Cualquier entidad que necesite ser gestionada, en un futuro, puede ser
instrumentada por medio de MBeans ya que estos brindan la implementación de los recursos
gestionados de forma estándar y para ser incorporados en cualquier agente JMX. Pueden ser
cargados ó eliminados dinámicamente según sea necesario, lo que brinda gran flexibilidad.
24
2.4.2. Business Activity Monitoring – BAM BAM define como ofrecer acceso a indicadores de desempeño en tiempo real, recopilando
información de diferentes fuentes, externas e internas mostrando esta información por medio
de aplicaciones graficas vistosas que faciliten su interpretación [20]. Las herramientas BAM
permiten el análisis y presentación de la información recopilada. Actualmente las diferentes
organizaciones se encuentran estructurando sus procesos n los cuales se realizan diferentes
tipos de actividades que tienen resultados esperados, estos procesos están apoyados en
herramientas informáticas como BPMs, ERPs, CRMs, entre otros, esto facilita la recopilación
de información y la pone disponible en cualquier momento, la tecnología BAM facilita el
acceso y procesamiento de la información de los procesos, transformándola a indicadores que
se pueden entender de forma mucho mas fácil con el fin de permitir su monitoreo.
La tecnología BAM facilita la recolección de información de diferentes fuentes que pueden
estar distribuidas geográficamente o no, por medio del uso de web services, colas de mensajes
u otras tecnologías con el fin de permitir un monitoreo en tiempo real de los procesos que
facilita la toma de decisiones y la recolección de estadísticas de desempeño en, contrario al
monitoreo tradicional BAM se fundamenta en el hecho de recopilar información de múltiples
aplicaciones y otras fuentes internas o externas a la organización. BAM se reconoce como una
inteligencia de negocios BI en tiempo real.
2.4.2.1. Oracle BAM Es una herramienta BAM proveída por Oracle que puede ser usada con herramientas Oracle o
con herramientas de otro fabricante o propias, permite construir y visualizar dashboards y
monitorear aplicaciones por medio de una aplicación web.
Para lograr esto hace uso de mensajería, integración de datos, caches de datos, monitoreo
analítico, alertas y reportes.
Mediante el uso de caches permite la actualización de información a razón de decenas de
miles de operaciones por segundo, cualquier aplicación envía eventos por medio de web
services o JMS, también las aplicaciones legadas pueden enviar información por medio de
adaptadores específicos y también por medio de fuentes de datos externas como bases de
datos, archivos planos y archivos xml. Oracle BAM también puede enviar alertas a Web
Services externos.
La información recopilada se puede estructurar para ser mostrada de diferentes formas, para
esto se ofrece una aplicación para construir reportes basados en listas, charts, tablas, crosstabs
y KPIs.
Oracle BAM cuenta con una suite de herramientas que facilitan la producción de reportes,
BAM Architect permite definir fuentes de datos externas para recibir información por medio
25
de ellas, como colas jms, origenes de datos o bases de datos relacionales, estos datos
finalmente se almacenan en objetos de datos internos cuya estructura también se define con
esta herramienta. Active Studio permite definir los diferentes reportes que se realizan sobre
los objetos de datos internos. Design Studio por medio de un modelo de pipes permite la
relación entre las fuentes de datos externas y los objetos de datos internos por medio de
filtros permite modificar la estructura de datos de entrada en una diferente para ser
almacenada en los objetos de datos, por ejemplo realizar sumas, conversiones y múltiples
operaciones de tal forma que se transforme a la estructura destino.
3. Service Component Architecture – SCA SCA esta definida como un conjunto de especificaciones que describe un modelo para
construir aplicaciones y sistemas utilizando Arquitectura Orientada a Servicios (SOA).
El propósito principal de SCA es la construcción de componentes en los cuales su principal
característica es separar la implementación de la lógica de negocio de lo que es llamado
“assembly” o montaje, de tal forma que el montaje sea un mecanismo de comunicación
genérico y la implementación pueda ser realizada usando diferentes tecnologías, esto se logra
por medio del uso de componentes que implementan la lógica de negocio que a su vez es
expuesta por medio de interfaces, que son llamados servicios cuando son proveídos y
referencias cuando son requeridos, por medio de estos se puede realizar la comunicación o
interacción con otros componentes.
3.1.1. Historia En 2003 BEA e IBM inician su colaboración en la definición de SCA, ya en 2005 se publica la
versión numero 0.9 de sus primeras especificaciones ya con la colaboración de BEA, IBM,
ORACLE, SAP, IONA y Sybase, en 2006 se publica la versión 0.95 de las especificaciones y
entran a colaborar las empresas: Cape Clear, Interface21, Primeton Technologies,
ProgressSoftware, Red Hat, Rogue Wave, Siemens AG, Software AG, Sun, TIBCO y es creado el
grupo OSOA [21], dentro del cual se continuo con el diseño de SCA finalmente en 2007 las
versiones 1.0 de SCA son publicadas y enviadas a un nuevo grupo llamado Oasis [22] que es el
que actualmente se encuentra como responsable de la futura estandarización de las
especificaciones que hacen parte de SCA, para esto se conformaron seis comités técnicos: SCA
Assembly, SCA Policy, SCA Bindings, SCA-J, SCA-BPEL y SCA-C.
26
SCA cuenta con un conjunto de especificaciones que son SCA Assembly Model, SCA Policy
Framework, SCA Transaction Policy, SCA Java Common Annotations and APIs, SCA Java
Component Implementation, SCA Spring Component Implementation, SCA BPEL Client and
Implementation, SCA C++ Client and Implementation, SCA Web Services Binding, SCA JMS
Binding, SCA EJB Session Bean Binding, SCA COBOL Client and Implementation, SCA C Client
and Implementation, y SCA JCA Binding.
Estas especificaciones se pueden agrupar como muestra la siguiente figura.
(Figure 8)
Figure 8. Especificaciones de SCA
La especificación principal es el SCA Assembly Model dentro de el se encuentra todo el modelo
estructural de SCA que comprende los dominios, composites, componentes, wires y otros, el
Policy Framework resume conceptos de requerimientos no funcionales y las dos restantes
están asociadas al uso de tecnologías específicas es decir más al tema de implementación y de
cómo exponer servicios que al tema de descripción de la arquitectura como tal.
Para definir un ensamblaje SCA se cuenta con un lenguaje de definición llamado SCDL (Service
Component Definition Language), en la sección de elementos se muestra el elemento con su
representación grafica y un ejemplo de declaración en SCDL
27
3.1.2. Elementos Los elementos del modelo de ensamblaje se encuentran definidos en la especificación SCA
Assembly, algunos tienen una representación gráfica y otros son tan solo conceptuales, se van
a mostrar los más importantes y los que hagan falta se describirán cuando se haga referencia a
ellos por medio de algún ejemplo o explicación en este documento.
3.1.2.1. Service (Figure 9)
Figure 9. Representación gráfica de Service
Un elemento Service permite declarar la accesibilidad a las operaciones que ofrece una
implementación por medio de una interface, en este caso una a lo que se hace referencia
como implementación es a un Componente o a un Composite, en el caso del Composite el
servicio normalmente es delegado o asociado a un servicio de un componente dentro del
Composite, lo que un servicio representa básicamente es un conjunto de operaciones de una
implementación, para ser usadas por otras implementaciones o para ser expuestas de manera
publica para cualquier cliente externo, para el caso general una implementación puede
proveer múltiples servicios siempre y cuando las interfaces asociadas a este sean
implementadas por el elemento que provee la implementación.
3.1.2.2. Reference (Figure 10)
<service name="MyValueService" promote="MyValueServiceComponent"> <interface.java interface="services.myvalue.MyValueService"/> <binding.ws port="http://www.myvalue.org/MyValueService# wsdl.endpoint(MyValueService/MyValueServiceSOAP)"/>
</service>
28
Figure 10. Representación gráfica de Reference
Este elemento permite a una implementación A declarar la necesidad de utilizar un servicio
que es ofrecido por una implementación B, una referencia es un servicio del cual la
implementación A puede ejecutar operaciones sobre la implementación B, tanto las
referencias como los servicios están tipados por una interface entonces en este caso debe
existir compatibilidad entre el servicio y la interface asociada.
3.1.2.3. Interface Por medio de estas se realiza la definición de las funciones de negocio de los componentes, las
interfaces son usadas por los servicios y referencias, un servicio expone una interface y una
referencia requiere una interface, una interface puede estar implementada usando interfaces
escritas en Java, WSDL 1.1 portType y WSDL Interface.
3.1.2.4. Binding Facilitan el acceso a servicios y referencias, por ejemplo el acceso de un cliente externo, usan
diferentes tecnologías como RMI, WSDL, JMS o EJB.
3.1.2.5. Implementation Es un artefacto de software que implementa un requerimiento de negocio y lo ofrece como un
servicio, para funcionar puede requerir servicios de otras implementaciones que son
inyectados como referencias. Puede ser en diferentes tecnologías como Java, Bpel, una
transformación xslt o una clase en c++, un composite SCA también puede ser usado como una
implementación.
<interface.java interface="services.stockquote.StockQuoteService"/>
<reference name="StockQuoteService" promote="MyValueServiceComponent/StockQuoteService"> <interface.java interface="services.stockquote.StockQuoteService"/> <binding.ws port="http://www.stockquote.org/StockQuoteService# wsdl.endpoint(StockQuoteService/StockQuoteServiceSOAP)"/>
</reference>
29
3.1.2.6. Wire (Figure 11)
Figure 11. Representación gráfica de Wire
Permite conectar un Servicio con una Referencia de manera explicita, cuando se crea una
Referencia se puede indicar cual es el servicio con el cual se quiere conectar, pero el wire
también permite realizar esta conexión indicando el servicio y la referencia que van a ser
conectados.
3.1.2.7. Property (Figure 12)
Figure 12. Representación gráfica de Property
Permiten la configuración externa de una implementación se les puede especificar un tipo de
dato y un valor.
<property name="SimpleTypeProperty"> MyValue </property>
<wire source=" ValueServiceComponent/StockQuoteService" target=" MyValueServiceComponent/StockQuoteService" />
<implementation.java class="services.myvalue.MyValueServiceImpl"/> <implementation.bpel process="MoneyTransferProcess"/> <implementation.composite name="MyValueComposite"/>
30
3.1.2.8. Component
(Figure 13)
Figure 13. Representación gráfica de Component
Son elementos que proveen funciones de negocio, son los que ejecutan en si las tareas o el
procesamiento, permiten que su implementación sea definida en diferentes tecnologías,
cuentan con propiedades que permiten su configuración, exponen servicios o requieren
servicios por medio de referencias y pueden conectar sus referencias con servicios de otros
componentes a través de un elemento wire.
3.1.2.9. Composite (Figure 14)
<component name="MyValueServiceComponent"> <implementation.java class="services.myvalue.MyValueServiceImpl"/> <property name="currency">EURO</property> <reference name="customerService"/> <reference name="stockQuoteService"/>
</component>
31
Figure 14. Representación gráfica de Composite
Representa la unidad básica de composición dentro de SCA. Un composite es un ensamble de
Componentes, Servicios, Referencias y Wires que se interconectan entre ellos y asocian sus
servicios o referencias a los del composite. Un Composite también puede ser usado como la
implementación de un componente y como una unidad de deployment.
3.1.2.10. Component Type Representa los aspectos configurables de una implementación, consiste en los servicios que
ofrece, las referencias que usa y las propiedades que tiene.
<componentType xmlns="http://www.osoa.org/xmlns/sca/1.0"> <service name="MyValueService">
<interface.java interface="services.myvalue.MyValueService"/> </service> <reference name="customerService">
<interface.java interface="services.customer.CustomerService"/> </reference> <reference name="stockQuoteService">
<interface.java interface="services.stockquote.StockQuoteService"/>
</reference> <property name="currency" type="xsd:string">USD</property>
</componentType>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://foo.com" name="MyValueComposite" > <service name="MyValueService" promote="MyValueServiceComponent"/> <component name="MyValueServiceComponent">
<implementation.java class="services.myvalue.MyValueServiceImpl"/> <property name="currency">EURO</property> <reference name="customerService"/> <reference name="stockQuoteService"/>
</component> <reference name="CustomerService"
promote="MyValueServiceComponent/customerService"/> <reference name="StockQuoteService" promote="MyValueServiceComponent/stockQuoteService"/>
</composite>
32
3.1.2.11. Domain En SCA la definición textual de dominio es “Representa un conjunto de servicios proveídos por
una área que es controlada por una organización.” [1]. Un dominio es el elemento que
permite acceder a los elementos, es el elemento que encapsula en si una aplicación, un
dominio contiene los composites que hacen parte del ensamblaje, de ellos por lo menos uno
debe asociarse como desplegable o “deployable”, los composites que son definidos con esta
característica exponen sus servicios para estar disponibles externamente.
3.1.3. Ejemplo El siguiente ejemplo muestra como los diferentes elementos pueden ser usados de manera
conjunta, es tomado íntegramente de [23].
Service AccountService
Reference StockQuote Service
AccountData Service Component
bigbank.accountcomposite
AccountService Component Service
AccountService
AccountData Service
34
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="bigbank.accountcomposite"> <service name="AccountService" promote="AccountServiceComponent">
<interface.java interface="services.account.AccountService" /> <binding.ws port="http://www.example.org/AccountService#
wsdl.endpoint(AccountService/AccountServiceSOAP)" /> </service>
<component name="AccountServiceComponent">
<implementation.java class="services.account.AccountServiceImpl" /> <reference name="StockQuoteService" /> <reference name="AccountDataService" target="AccountDataServiceComponent/AccountDataService" />
<property name="currency">EURO</property>
</component>
<component name="AccountDataServiceComponent">
<implementation.bpel process="QName" /> <service name="AccountDataService">
<interface.java interface="services.accountdata.AccountDataService" /> </service>
</component>
<reference name="StockQuoteService" promote="AccountServiceComponent/StockQuoteService"> <interface.java interface="services.stockquote.StockQuoteService" /> <binding.ws port="http://example.org/StockQuoteService# wsdl.endpoint(StockQuoteService/StockQuoteServiceSOAP)" />
</reference>
</composite>
StockQuote bigbank.accountcomposite
AccountService Component Service
AccountService
Reference StockQuote Service
AccountData Service Component
Reference StockQuote Service
3.1.4. Caso de Prueba Con el fin de realizar las pruebas se realizo la implementación de un escenario de prueba con
base en un escenario definido en un tutorial dentro del proyecto Caramelos, el escenario
consiste en una tienda virtual que expone los servicios de la tienda, la tienda esta dividida en
un frontend y un backend, el front expone los servicios de la tienda y tiene dependencias de
los servicios en el backend, el backend cuenta con servicios relacionados con inventarios,
clientes y ordenes de compra. El frontend esta implementado por medio de un composite
donde existen los componentes StoreComponent expone servicios de la tienda, se encarga de
realizar tareas en conjunto con los componentes internos, OffersExpert realiza el cálculo de las
ofertas que aplican a una orden, LocationExpert se encarga hacer cálculos dependientes de la
ubicación del cliente como opciones de envío y tarifas de impuestos, el backend provee
servicios para administrar el inventario, los clientes y las órdenes con los componentes
InventoryComponent, CustomerComponent y OrdersComponent. La tienda usa servicios de
entidades externas en este caso empresas de envío de mercancías por medio de las cuales se
realiza el envío de las órdenes. El frontend y backend son dos composites que se encuentran
distribuidos y su comunicación se da usando un binding RMI, los componentes tienen su
implementación en java, los componentes de las empresas de envío TCC, DHL, FedEx tienen su
implementación como un composite que internamente se implementa con un componente
que tiene su implementación en java, a continuación se muestra los modelos de la estructura
en SCA de la tienda.
(Figure
15)
Figure 15. Frontend del Caso de Prueba
36
(Figure 16)
Figure 16. Backend del Caso de Prueba
3.1.5. Características de SCA La estructura de ensamblaje de SCA permita la composición y creación de jerarquías de
elementos que son descritas de forma clara en función de los elementos que provee, los
componentes y composites se comportan de manera similar tienen propiedades en común
como sus propiedades, servicios y referencias, pueden ser reutilizados, un composite puede
ser la implementación de otro o la implementación de un componente de la misma forma un
componente puede tener como implementación un composite. Esta nueva capa de
37
ensamblaje permite una separación de la estructura de la solución y la implementación, en
este caso SCA define la estructura e interacción y las diferentes tecnologías permiten la
implementación de la lógica del negocio de cada uno de los componentes.
Por medio de los binding se logra la interconectividad de los componentes y composites con o
desde implementaciones o clientes diferentes tecnologías, los binding proporcionan métodos
de acceso a los componentes, encapsulando los protocolos de comunicación, serialización de
datos, etc.
En SCA se especifica de manera explicita la configuración de propiedades no funcionales como
capacidades y restricciones sobre componentes y sus interacciones por medio de la
especificación SCA Policy Framework.
Otra forma de ver los elementos de SCA es en función a como se comportan al construir una
aplicación en ese caso el dominio se abstrae como la unidad de despliegue, los composites
como una unidad de aplicación compuesta por componentes, servicios, referencias y los wire
entre ellos teniendo en cuenta que la implementacion de un componente puede ser un
composite.
(Figure 17)
Dominio Unidad Despliegue
Composite Aplicación
Composite
Components Services
Wire
References
Dominio Unidad Despliegue
Composite Aplicación
Composite
Components Services
Wire
References
Figure 17. Vista de elementos SCA
38
3.1.6. Herramientas SCA cuenta con varias implementaciones que se han desarrollado en proyectos de código
abierto y también con aplicaciones en las empresas reconocidas en la industria del software en
el caso de código abierto las herramientas se desarrollan explícitamente para proveer SCA, en
el caso propietario se incluye SCA en los productos tradicionales de aplicaciones empresariales
como un soporte mas para ayudar a desarrollar aplicaciones SOA o para estructurar
aplicaciones que ya existen.
Algunas implementaciones disponibles son:
• Rogue Wave® HydraSCA [24].
• WebSphere Application Server V7 Feature Pack for Service Component Architecture
[25].
• BEA AquaLogic® Service Bus 3.0 [26]
• Apache Tuscany [27]
• Fabric3 [28]
En [29] se muestra una lista de algunas implementaciones aunque al revisarlas algunas no
estaban actualizadas, las mencionadas en la lista anterior fueron consultadas en Enero de
2009.
4. Proyecto Cumbia El Proyecto Cumbia inicio en el año 2004 dentro del Grupo de Construcción de Software del
Departamento de Sistemas de la Universidad de Los Andes bajo el liderazgo del Profesor Jorge
Villalobos, el objetivo principal del proyecto al iniciar fue realizar investigación en procesos de
workflow y herramientas para estos procesos, teniendo en cuenta conceptos de modelos
ejecutables, a lo largo de estos años estas ideas se han refinado y han dado como producto
una buena cantidad de tesis de grado y el concepto de Objetos Abiertos y la composición de
estos para construir aplicaciones que en su mayoría resuelven problemas de control.
4.1.1. Modelos ejecutables y objetos abiertos Los modelos ejecutables extensibles dentro de cumbia representan dominios de una
aplicación, en Cumbia los metamodelos materializan los elementos del problema a modelar en
39
instancias especificas para volverlas ejecutables usando el concepto de objeto abierto como
herramienta para enriquecer la semántica de los metamodelos.
Los objetos abiertos son los mismos objetos clásicos pero cuentan con características
adicionales que les permiten exponer información acerca de su estado.
Los objetos tradicionales tienen un estado que se interpreta como la combinación de valores
de sus atributos, para conocer su estado es necesario llamar sus métodos, el numero de
estados es una combinación de su numero de atributos, pero el numero de estados relevantes
no es el numero total sino un subconjunto de ellos, ya que algunos pueden no ser de interés.
Estos estados se materializan en una maquina de estados y pueden ser nombrados, la
maquina de estados puede publicar notificaciones cuando algo ocurre en ella para coordinar
tareas con otros elementos.
Un objeto abierto esta compuesto de una entidad (Objeto tradicional), una maquina de
estados asociada a esta entidad y su conjunto de acciones. La interface del Objeto Abierto es
la misma de la entidad mas un conjunto de métodos para navegar la maquina de estados. En
el concepto tradicional la composición y coordinación se da por métodos en interfaces, en
objetos abiertos es posible componer y coordinar elementos usando maquinas de estado
como manejadores de composición ofreciendo un mecanismo de coordinación mas expresivo
que el tradicional.
Los eventos generados por la maquina de estados son consumidos por esta misma o por otras
estos pueden cambiar el estado. Cuando una maquina de estados cambia de un estado a otro
se generan los siguientes eventos: se abandona el estado, la transición inicia, la transición
finaliza y se llega al nuevo estado.
Una transición conecta dos estados y esta asociada a un evento. Los eventos son almacenados
en una de cola para ser procesados.
Los eventos son descritos por medio de una dupla compuesta por el nombre del elemento que
se espera haya generado el evento y el tipo de evento esperado. El nombre del elemento no
necesariamente es un identificador único, puede estar asociado a tipos de elementos.
Otros elementos son las acciones que están asociadas a transiciones que son ejecutadas de
manera sincrónica cuando una transición es procesada. Las acciones agregan semántica a los
cambios de estado por ejemplo llamando objetos abiertos. Se pueden definir reglas de
coordinación sincrona o asincrona.
(Figure 18)
40
Entity
OPEN OBJECT
doX()
doY()
doZ()
Action1 Action2 Action3
Terminated
ActiveInitInactive
[DOM-CONT] domainInitialized
[ME] activated
[ME] restarted
[ME] terminate
[COMPONENT] NewComponent
[WIRE] NewWire
CompleteElements ComponentCreated
WireCreated
executeA1() executeA2() executeA3()
Entity
OPEN OBJECT
doX()
doY()
doZ()
Action1 Action2 Action3
Terminated
ActiveInitInactive
[DOM-CONT] domainInitialized
[ME] activated
[ME] restarted
[ME] terminate
[COMPONENT] NewComponent
[WIRE] NewWire
CompleteElements ComponentCreated
WireCreated
Terminated
ActiveInitInactive
[DOM-CONT] domainInitialized
[ME] activated
[ME] restarted
[ME] terminate
[COMPONENT] NewComponent
[WIRE] NewWire
CompleteElements ComponentCreated
WireCreated
executeA1() executeA2() executeA3()
Figure 18. Vista de un objeto abierto
Los objetos abiertos proveen tres tipos de extensión, el primero modificando las acciones
asociadas a la maquina de estado es llamado extensión simple, otro es cambiando la
estructura de la maquina de estados agregando o removiendo estados y transiciones, el ultimo
es mediante la especialización de objetos abiertos que ya existen.
4.1.2. CumbiaOpenObjectsKernel Como se menciono anteriormente el concepto de modelo ejecutable y de objetos abiertos se
ha venido desarrollando desde hace varios años, inicialmente en el tema de Cumbia XPM y
luego como activo para la generación de otra aplicaciones, esta evolución ha permitido una
generalización de conceptos alrededor de los objetos abiertos fruto de esto se tiene ahora un
framework que facilita y da un marco a la construcción de aplicaciones usando estos objetos,
el framework recibe el nombre de CumbiaOpenObjectsKernel y esta definido como “una
plataforma para la ejecución de modelos ejecutables extensibles basados en Open Objects”.
La tarea inicial para definir una aplicación es definir el metamodelo de la aplicación, la
definición de este consiste en definir que objetos deben ser objetos abiertos y definir sus
maquinas de estado.
El framework da una estructura para la creación de aplicaciones pero en si la implementación
y el detalle de lo que el metamodelo hace es responsabilidad de los interesados en la nueva
aplicación. Teniendo la descripción del metamodelo, se debe definir el modelo propio de la
aplicación por ejemplo un modelo SCA en este caso la declaración del modelo debe hacerse en
41
conjunto con la el metamodelo, como ya se menciono el metamodelo es la concepción general
del problema y el modelo es un caso particular (instancia) que se quiere ejecutar. Cuando se
ejecuta una instancia de un dominio es necesario contar con la información de las instancias,
en el framework esto se define por medio de un archivo xml.
El xml anterior muestra la estructura general sin detalles del archivo de definición, este de
manera conceptual esta compuesto por:
• El metamodelo al cual esta asociada la definición, identificado por medio de su
nombre y versión, también el nombre dado a la definición.
• Las extensiones de objetos abiertos que se van a usar en la definición.
• Los elementos del modelo en si, por ejemplo para este caso ahí debería estar la
información de los elementos SCA que se definieron como objetos abiertos en el
metamodelo, en el caso que se haya definido a componente como objeto abierto ahí
deberían estar los diferentes componentes que van a intervenir por ejemplo los
componentes de reserva, facturación, etc.
• El runtime del modelo, más adelante se explicara que responsabilidades tiene este.
• El Modelo, es la parte en la que la nueva aplicación debe incluir sus elementos, en el
caso de SCA en la parte de modelo estarán las definiciones como las que se mostraron
en el ejemplo en la sección de SCA incluyendo sus Composites, Componentes,
<?xml version="1.0" encoding="ISO885915" ?> <definition metamodel="SCA" version="0.1" modelName="Simple Market"> <!-- Extensiones del modelo -->
<metamodelextensions> : </metamodelextensions> <!—Defiinicion de los elementos usados en el modelo-->
<elements> : </elements>
<!--Runtime Configuration--> <runtime />
<!-- Definicion de la estructura del dominio --> <model> : </model> </definition>
42
Referencias y los demás elementos de SCA que hacen parte de la definición, por
decirlo así en el modelo se define la parte especifica de la aplicación.
La definición anterior es lo que el framework leeria para cargar el modelo, el framework
realiza las tareas similar a un template method donde la nueva implementación tiene la
responsabilidad de implementar algunos artefactos específicos para cada problema, por
ejemplo como cargar el modelo que se va a ejecutar, la especificación de comunicación de los
roles en la maquina de estados, la implementación de las entidades y las acciones en los
elementos que son objetos abiertos. Estos artefactos implementan interfaces requeridas por
el framework y son proporcionados al framework por medio de un archivo que contiene lo
siguiente.
StructureLoaderClass (Cargador del modelo), se encarga de realizar la carga del modelo
desde los archivos xml, realiza la carga de lo que se llamó anteriormente modelo especifico de
la aplicación, que se encuentra en el tag model, también tiene la responsabilidad de relacionar
los objetos abiertos ya cargados por el framework con la información especifica de la
aplicación, en un caso especifico la información cargada aquí puede ser la de la entidad como
se hizo referencia en los Objetos Abiertos que están compuestos por la entidad mas otros
elementos. En este caso se implementa lo que en el archivo se llama
StructureLoaderClass y StructureInstantiatorClass que corresponden a las
interfaces ModelStructureLoader y ModelStructureInstantiator
respectivamente.
RoleResolverClass (Procesador de Roles), como se menciono antes para un Objeto
Abierto un evento esta descrito como una dupla compuesta por (quien se espera haya
generado el evento, identificador del evento), el concepto de “quien se espera haya generado
el evento” se asimila en el framework como el concepto de Rol de esta manera un Objeto
Abierto espera eventos específicos generados por un determinado Rol. La información de que
roles y eventos procesa un Objeto Abierto se encuentra detallada en la maquina de estados de
cada elemento pero la interpretación de quien o que elemento juega el rol en cada caso debe
proveerse de manera programatica por medio del RoleResolverClass, este es especifico
para cada problema y debe ser implementado de acuerdo a la interface RoleResolver.
StructureLoaderClass=uniandes.cumbia.sca.loaders.SCAStructureLoader StructureInstantiatorClass=uniandes.cumbia.sca.instansiation.SCAStructureInstantiator RoleResolverClass=uniandes.cumbia.sca.instansiation.SCARoleResolver ResourcesPath=../CumbiaDistribution/lib/SCAOpenObjects.jar StateMachinesPath=../CumbiaDistribution/data/SCAStateMachines MetamodelDescriptionFile=../CumbiaDistribution/data/SCAMetamodel.xml
43
Esto en cuanto a los elementos que se deben implementar los otros elementos son
ResourcesPath que describe donde se almacenan los recursos que debe usar la aplicación
como librerías de las implementaciones y MetamodelDescriptionFile que describe el
metamodelo que se va a implementar.
En el se debe referenciar los archivos donde estan escritas las maquinas de estado y las clases
que implementan cada una de las maquinas de estado junto con la clase que implementa el
runtime.
Por medio del runtime se realizan actividades sobre el modelo en ejecución, el runtime es
especifico para cada implementacion en genera el tipo de actividades estan relacionados con
por ejemplo obtener elementos de la estructura del modelo en tiempo de ejecución, detener
la ejecución, suspender la ejecución, reanudar la ejecución, en general tareas asociadas con el
modelo en tiempo de ejecución.
En resumen usando el framework de openobjectskernel para construir una nueva aplicación es
necesario:
• Definir los elementos y cuales son open objects, para los open objects, diseñar las
máquinas de estado y escribir sus xml.
• Diseñar el lenguaje para describir la estructura de los modelos
<metamodel name="SCA" version="0.1"> <!-- State machines used by the elments of the metamodel --> <state-machine-reference name="defaultDomain" file="domain.xml" />
<state-machine-reference name="defaultComposite" file="composite.xml" />
<state-machine-reference name="defaultComponent" file="component.xml" />
<state-machine-reference name="defaultWire" file="wire.xml" />
<state-machine-reference name="defaultService" file="service.xml" />
<!-- Elements of the metamodel --> <type name="Domain" class=" Domain" statemachine="defaultDomain" />
<type name="Composite" class="Composite" statemachine="defaultComposite" />
<type name="Component" class=" XComponent" statemachine="defaultComponent"
<type name="Wire" class="XWire" statemachine="defaultWire" />
<!-- Runtime Configuration --> <runtime class="SCARuntime" />
</metamodel>
44
• Implementar las clases que componen el metamodelo, el runtime, clases que necesita
el kernel, clase para cargar la estructura de los modelos, la clase para resolver los
roles, el motor
• Escribir el archivo de configuración para el kernel.
4.1.3. Motores que usan objetos abiertos Desde el inicio del proyecto cumbia se han desarrollado diferentes motores basados en
objetos abiertos que resuelven diferentes tipos de problemas, estos son:
4.1.3.1. Cumbia XPM
Es un metamodelo diseñado para modelar aplicaciones que donde el componente de control
juegue un papel importante, estas aplicaciones pueden ser motores de workflow, sistemas de
e-learning, plataformas de orquestación o herramientas de trabajo colaborativo, fue el
primero de los productos desarrollado con objetos abiertos y sirvió como espacio de
experimentación para refinar los conceptos asociados a estos, cuenta con una especificación
formal y una implementación llamada JCumbia.
4.1.3.2. Cumbia XRM
Consiste en un metamodelo que permite la asignación de recursos, los recursos son asignados
a actividades en un proceso, el metamodelo tiene en cuenta los recursos y las reglas de cómo
asignarlos, fue diseñado como un dominio complementario a XPM, cuenta con su
especificación y una implementación.
4.1.3.3. Cumbia XTM
Permite la asignación de restricciones o reglas de tiempo en una actividad de un proceso de
también es complementario a XPM, se encuentra especificado en la que se caracterizaron una
serie de reglas de tiempo asociadas a la ejecución de actividades y existe una implementación.
4.1.3.4. Cumbia XAM
Es un modelo para describir la composición entre diferentes modelos cumbia, en los ya
mencionados XRM y XTM se dice que son complementarios a XPM esto significa que deben
trabajar de manera conjunta, XAM permite definir una aplicación que en el contexto de
cumbia es un conjunto de diferentes dominios que necesitan trabajar de manera coordinada,
XAM cuenta con una especificación y su respectiva implementación que actualmente es usada
por otras aplicaciones mencionadas en esta lista.
4.1.3.5. Caffeine
45
Es un motor de BPEL esta construido bajo los conceptos de una fabrica de aplicaciones de
workflow usando los activos existentes en cumbia, caffeine representa los elementos de bpel
como elementos de cumbia XPM para lograr su ejecución, actualmente soporta un
subconjunto de los elementos de BPEL y se esta trabajando en un proyecto de grado para
avanzar en la implementación de la totalidad de las facilidades propuestas en BPEL.
4.1.3.6. PaperExpress
Es una herramienta de trabajo colaborativo que permite a los participantes trabajar
conjuntamente en la redacción de artículos, paperExpress modela el proceso de escribir un
articulo mediante el uso de XPM y administra el proceso de escritura tanto el grupo de
participantes como las posibles modificaciones en el proceso de escritura por medio del uso
de adaptación dinámica [30] sobre el proceso en ejecución.
5. Solución para el análisis de Modelos SCA. Un modelo puede ser tan analizable como posibilidades de observación haya en el, en los
casos de los modelos de componentes ya vistos hay muchas posibilidades de análisis dado el
diseño que tienen en el caso de Fractal desde su concepción se define la interfaz de control o
membrana que permite configurar los componentes, esto da desde diseño una herramienta
para poder acceder al modelo para reconfiguración, en el caso de CCM y EJB que son
componentes que viven en un contenedor la relación componente/contenedor da puntos en
los cuales es posible también realizar algunos tipos de análisis. Estos modelos están diseñados
fuertemente a su implementación de hecho el modelo de componentes es una pequeña
sección en sus implementaciones y se hace un gran énfasis en como debe ser su
implementación y en los contratos que los componentes deben cumplir los componentes con
el entorno por ejemplo el contenedor.
En SCA la situación varía un poco, esta diseñado con la idea de estandarizar la construcción de
aplicaciones como se vio las especificaciones están divididas y se pueden caracterizar en
conjuntos, en el assembly es donde se define el modelo de componentes de una manera muy
sencilla y asociada a lo que son los elementos en el estilo componentes, dejando de lado
niveles de detalle de implementación, en este modelo no se muestran capacidades ni para
controlar ni para administrar.
Se puede decir que un modelo de componentes en abstracto brinda unas ventajas pero que la
implementación o las herramientas que permiten poner a marchar ese modelo de
componentes brindan ventajas adicionales y explotan las características de los modelos, es por
esta razón que los ya mencionados Fractal, EJB y CCM exigen detalles de implementación para
lograr características importantes en sus modelos de ejecución, con esto se concluye que para
tener una herramienta de ejecución que permita hacer análisis sobre un modelo se debe
pensar en un modelo en este caso SCA mas una implementación que explote las posibilidades
46
del modelo para realizare análisis, claro que esta implementación depende del tipo de análisis
que se quiera hacer, en el caso del análisis estático por ejemplo model-checking no es
necesario instanciar el modelo ni ejecutarlo se puede verificar su consistencia desde el punto
de vista estructural, los elementos respetan su estructura, desde el punto de vista de
relaciones los elementos cumplen con los contratos que fueron definidos las referencias y
servicios cumplen con las interfaces definidas, también pueden existir algunos casos de
análisis ya un poco mas dinámico se puede analizar el modelo que servicios provee que
componente y si las interfaces definidas por los servicios son implementadas por la
implementación de componente, esto también se puede realizar sin la necesidad de ejecutar
el modelo.
En este caso el análisis al que se quiere llegar es al análisis dinámico, se quiere poder observar
el modelo en tiempo de ejecución y en instantes de tiempo específicos, para lograr esto es
necesario contar con lo siguiente: el modelo en ejecución para que pueda ser dinámico,
mecanismos para poder observar el modelo y un mecanismo que permita determinar en que
instantes de tiempo se puede realizar la observación. Los modelos ejecutables modelados con
el uso de objetos abiertos dan características a los elementos de expresar su comportamiento
en función a una maquina de estados, asociar acciones en diferentes momentos cuando hay
un cambio de estado (antes, durante y después) y la posibilidad de notificar estos cambios a
interesados que se han registrado previamente.
SCA es una propuesta nueva data de 2005 y su especificación final es de 2007, al indagar por
herramientas que permitan realizar análisis sobre los modelos de SCA no se encuentra en la
actualidad una herramienta que permita recopilar información acerca de la ejecución de
aplicaciones hechas usando SCA, se encuentra información respecto a análisis para verificar a
SCA formalmente, pero no se cuenta con herramientas que permitan realizar análisis
dinámico sobre la ejecución de modelos implementados en SCA, la solución que se propone
tiene en cuenta el concepto de objetos abiertos dentro de la estructura de la aplicación
desarrollada para resolver el problema, por medio de objetos abiertos se modelan elementos
que realizan la ejecución y que permiten la relación de componentes con otros, la utilización
de los objetos abiertos junto con la definición del metamodelo de SCA permiten a las
entidades usuarias de la aplicación la posibilidad de conectar a los objetos abiertos cualquier
herramienta que en el momento de ejecución permite la recopilación de sin tener que
modificar la estructura ya existente, esto nos brinda la posibilidad de realizar análisis dinámico
del comportamiento de las aplicaciones que se estén ejecutando, un componente de manera
natural estaría definido como de caja negra pero con la incorporación de SCA se permite la
instrumentación de este que además de ser navegable también brinda la opción de notificar a
los interesados cuando su estado cambie, en el momento de un cambio es posible navegar por
todo el modelo para recopilar información no solo del elemento que genera el evento sino de
todos los elementos de la estructura aprovechando la capacidad de reflexividad de los
47
metamodelos implementados usando objetos abiertos. Las técnicas actuales que nos
permitirían esto podrían ser mas bien instrusivas o requerir recompilaciones de código o de
modificación del bytecode para lograr esto, en el caso de esta aplicación la exposición del api
de cumbia que bien podría ser ocultado facilita la instalación de las herramientas de análisis
sobre los elementos del metamodelo.
La solución entonces es tener el modelo SCA y brindarle la posibilidad de ser analizable por
medio de las características de observación e instrumentación que brindan los objetos
abiertos, en este caso también se ve que la implementación del modelo de componentes da
características adicionales pero en este caso no colocando requerimientos en el modelo desde
su concepción sino con la adición de una forma de percepción del modelo, en este caso se
modela SCA como modelo ejecutable, se definen algunos elementos como objetos abiertos y
con base en ese modelo se realiza la implementación de la herramienta.
5.1. Metamodelo de SCA La característica principal de este metamodelo es reflejar la forma como interactúan los
elementos de SCA para llevar a cabo la ejecución de servicios, teniendo en cuenta los posibles
estados iniciales, finales e intermedios de algunos de sus elementos, con el objetivo de poder
materializar los estados relevantes para poder proporcionar la capacidad de intervención
deseada. Aunque el metamodelo se muestra como un modelo estructural, una forma
adecuada de describirlo es profundizando en la interacción de sus elementos en tiempo de
ejecución, esto nos permite hacer énfasis en sus relaciones y mostrar el metamodelo como un
todo, la descripción del metamodelo al referirse a sus elementos por cuestiones didácticas se
supone un ambiente de ejecución en donde al hacer referencia a los elementos se hace
referencia a instancias de los tipos de elementos abstractos en un ambiente de ejecución.
El propósito de una aplicación construida con un modelo SCA no es mas que publicar servicios
de componentes para que sean utilizados por los interesados en este, así la operación básica
es llamado a una operario de un servicio, el llamado a una operación de un servicio en SCA
ocurre por medio de un estimulo realizado por una entidad externa al metamodelo, que envía
una señal en este caso un Call que compuesto de un descripción y un conjunto de parámetros,
la ejecución de este call, puede provocar la interacción de diferentes componentes del modelo
y de muchas instancias de ellos dependiendo del comportamiento de la Implementación del
Componente donde se ejecute el call. Un componente es la unidad de procesamiento en SCA,
es el que provee Servicios a los sobre los que se van a realizar llamados a sus operación que
son materializadas en este caso por los call. Los componentes tienen una implementación que
debe implementar los servicios que el componente expone, sobre su Implementación es
donde finalmente se ejecutan los call.
48
En un caso simple el llamado a una operación se hace por medio de un Servicio que genera un
call sobre un componente que es ejecutado sobre su implementación. Un componente
configura una implementación por medio de sus Propiedades y sus Referencias, en el caso
anterior se describía un llamado simple o directo sobre un servicio de un componente que
esta disponible externamente, existe otro caso donde una implementación ha sido
configurada con referencias, las referencias describen la dependencia de servicios de otros
componentes, esta dependencia se describe de manera explicita por medio de un Wire,
cuando una implementación tiene referencias es posible que un call ejecutado sobre ella
provoque el llamado a operaciones sobre servicios de otro u otros componentes, en este caso
se da un o unos nuevos call pero con la participación de mas elementos, este call consiste en
un llamado a una operación sobre una o unas de las referencias de la implementación, una
referencia permite el llamado a un servicio de otro componente por medio del wire, lo que
ocurre en este caso es la llamada a una operación sobre una referencia que finalmente es
ejecutada en el la implementación del componente referenciado contando con la participación
de un wire, en este caso el call generado por la implementación debe ser por decirlo así
propagado a través de estos elementos, estos dos tipos de llamado describen la interacción
básica que se da en el metamodelo, cualquier ejecución se da como un conjunto de llamados
de este tipo sobre uno o muchos servicios de los componentes.
Si se observa un ensamblaje SCA desde el punto de vista estructural se tiene al dominio como
el elemento básico de despliegue, representa el elemento que permite exhibir una aplicación,
un dominio permite el acceso a los servicios de la aplicación, facilita la interacción entre los
clientes externos y el metamodelo. Un dominio esta compuesto de un conjunto de
composites. La (Figure 19) muestra el metamodelo formulado para SCA.
5.1.1. Elementos Del Metamodelo Los elementos modelados como objetos abiertos son domain, composite, component y wire.
5.1.2. Máquina de estado de Componente Un componente es la unidad ejecutable en este modelo, es el que finalmente recibe los
llamados a los servicios y los ejecuta sobre la implementación. La maquina de estado del
componente tiene cuatro estados, su estado inicial es Inactive, al ser creada una nueva
instancia de un componente debe realizarse algunas operaciones sobre él, básicamente
asociadas con el estado de sus propiedades y relaciones con los wire, al ya estar listo pasa al
estado Waiting, esto quiere decir que está disponible para procesar las llamadas a las
operaciones que ofrece, existen dos estados mas LocalCalling y WireCalling son usados en los
casos de las llamadas directas y delegadas respectivamente, en el caso de la llamada directa se
usa el mecanismo de comunicación por método de los objetos abiertos y en el caso de la
llamada delegada se usa el mecanismo por eventos del wire en el que el Componente
representa el rol TARGET.
(Figure 20)
LocallCalling
Waiting
initialize [ME]
Inactive
wireCall [ME]
Call
WireCalling
call [ME]
makecall [WIRE]
endWireCall [ME]
endCall [ME]
WireCall
PassWireCall
EndCall
EndWireCall
LocallCalling
Waiting
initialize [ME]
Inactive
wireCall [ME]
CallCall
WireCalling
call [ME]
makecall [WIRE]
endWireCall [ME]
endCall [ME]
WireCallWireCall
PassWireCall
EndCallEndCall
EndWireCallEndWireCall
Figure 20. Máquina de estado de Componente
5.1.3. Maquina de estado de Wire Un wire es el elemento que facilita la comunicación entre componentes, permite que una
referencia de un componente A haga un llamado a un servicio de un componente B. La
relación del wire con el componente destino o “target” se realiza por medio de su maquina de
51
estado. La máquina de estado del wire tiene cuatro estados, su estado inicial es Inactive, al ser
creada una nueva instancia se realizan operaciones asociadas con el estado de sus propiedades
y relaciones con los componentes y pasa a estado Init en este estado espera el evento
dataPassed que corresponde a una llamada hecha por la implementación del componente
source del wire, recibe la información de la llamada, y se mantiene en estado Waiting, cuando
la llamada es resulta por el componente TARGET se recibe un evento callExecuted pasa a
estado PassingData espera un evento callReturned que determina que ya se recibió el llamado
y retorna al estado Active para recibir nuevas ejecuciones.
(Figure 21)
PassingData
Active
callExecuted [TARGET]
InitPassData
dataPassed [ME]
Inactive
Initialize [ME]PassCall
wireCall [ME]
MakeCall
callReturned[ME]
PassingData
Active
callExecuted [TARGET]
InitPassDataPassData
dataPassed [ME]
Inactive
Initialize [ME]PassCallPassCall
wireCall [ME]
MakeCall
callReturned[ME]
Figure 21. Máquina de estado de Wire
5.1.4. Maquina de estado de Composite Composite es la unidad de composición natural en SCA en este caso contiene los elementos
ejecutables Component y Wire recibe eventos de ellos para administrar algunas de sus
propiedades. Al ser instanciado al igual que los demás inicia en estado Inactive cuando el
dominio pasa a estado Init, este genera un evento que pasa al composite usando el rol DOM-
CONT que cambia el su estado a Init. Cuando el composite es activado por medio de la accion
CompleteElements pasa a estado Active, en este estado recibe eventos del wire y componente
cuando es creada la instancia de cada uno de ellos, estando en estado Active también puede
recibir un evento terminate que lo cambia a estado Terminated y de este puede ser reiniciado
a Active por medio de un evento restarted.
52
(Figure 22)
Terminated
ActiveInitInactive
[DOM-CONT] domainInitialized[ME] activated
[ME] restarted
[ME] terminate
[COMPONENT] NewComponent
[WIRE] NewWire
CompleteElementsComponentCreated
WireCreated
Figure 22. Máquina de estado de Composite
5.1.5. Maquina de estado de Domain Domain es el elemento que permite el acceso a la aplicación, en esta implementación es el
elemento raíz del metamodelo, cuenta con características para finalizarse que equivale a
finalizar la aplicación y para suspender su ejecución. Su máquina de estado inicia en estado
Inactive cuando el dominio es inicializado recibe un evento domainInitialized y pasa a estado
Init, este evento también pasa el composite a estado Init, cuando ya todo el dominio es
activado pasa a estado Active, en ese estado puede ser terminado o suspendido, estando
suspendido reactivarse y estando terminado puede reiniciarse.
(Figure 23)
53
Suspended
Terminated
ActiveInitInactive
[ME] domainInitialized[ME] activated [ME] reactivate
[ME] restarted
[ME] terminate
[ME] suspend
Suspended
Terminated
ActiveInitInactive
[ME] domainInitialized[ME] activated [ME] reactivate
[ME] restarted
[ME] terminate
[ME] suspend
Figure 23. Máquina de estado de Domain
5.2. Motor de SCA usando Objetos Abiertos
5.2.1. Caracteristicas
Para la implementación de este motor se uso el framework de objetos abiertos, este ha sido
usado en los diferentes motores mencionados anteriormente, en esos casos la mayoría de los
motores han sido modelos ejecutables que responden a requerimientos relacionados con
procesos de workflow, en algunos casos se ha usado la definición de los motores usando
objetos abiertos y se incluye el uso de Cumbia XPM como componente de control, en el caso
de esta implementación la situación resulta un poco diferente aunque hay control, el
componente de control no es el suficiente como para soportarlo con XPM. La siguiente figura
describe el la estructura que se usa para implementar modelos ejecutables cumbia (Figure 24).
54
MODELO EJECUTABLE PARA UN DOMINIO
INSTANCIA ELEMENTO 1
ELEMENTO 1
ELEMENTO 2
ESPACIO DE MATERIALIZACIÓN
ESPACIO DE ABSTRACCIÓN
INSTANCIA ELEMENTO 2
MODELO EJECUTABLE PARA UN DOMINIO
INSTANCIA ELEMENTO 1
ELEMENTO 1
ELEMENTO 2
ESPACIO DE MATERIALIZACIÓN
ESPACIO DE ABSTRACCIÓN
INSTANCIA ELEMENTO 2
Figure 24. Modelo ejecutable para un dominio
Esta estructura es la que se ha manejado en los diferentes motores y la que se usará para
esta implementación en este caso el esquema a utilizar es el siguiente. (Figure 25)
SCA
Domain
Instancia Domain
ESPACIO DE MATERIALIZACIÓN
ESPACIO DE ABSTRACCIÓN
Composite
Component
WireInstancias Composite
Instancias Component
Instancias Wire
Figure 25. Modelo ejecutable para SCA
55
Con lo experiencia acumulada en el proyecto cumbia es evidente la utilidad de los Objetos
Abiertos como una herramienta para construir aplicaciones que respondan a un modelo
ejecutable y que se modelan como una estructura jerárquica incluyendo un conjunto de
elementos abstracto que definen el modelo de la aplicación en este caso SCA y sus elementos.
Entonces en este caso se tiene una aplicación donde la estructura esta definida por el modelo
ejecutable del dominio SCA, que tiene definidos unos elementos de manera abstracta y las
instancias de estos en conjunto con las de otros elementos constituyen el modelo completo de
la aplicación.
El elemento primordial de ejecución en este caso es el componente sobre el se realizan las
operaciones y el a su vez las realiza sobre la implementación pero teniendo en cuenta la
información de propiedades que es asignada al componente y al composite, en el caso de un
composite este expone servicios pero al final van a ser promovidos (promote) a un
componente que es el que realiza la ejecución, desde el punto de vista de quien realiza el
llamado a una operación de un servicio, se pueden distinguir dos casos básicos, dependiendo
de quien acceda al servicio, si se accede por medio de un cliente externo de ahora en delante
se define que es un llamado directo y si el cliente es un componente interno, es decir se
accede por medio de un wire o una referencia que en el caso practico es equivalente se define
como un llamado delegado, de ahora en adelante estas se definen como operaciones básicas
dentro de esta implementación para la ejecución de cualquier tipo de servicio, de esta forma
cualquier llamado a un servicio se hace por medio de un llamado directo y de este se pueden
generar llamados delegados entre diferentes componentes, que pueden ser tantos como sean
requeridos dependiendo del diseño del componente o del composite.
5.2.2. Diseño Ya se mostró cuales son los elementos que definen un ensamblaje en SCA y se definió un
metamodelo base para el modelo ejecutable que será utilizado en esta implementación, como
ya se menciono el énfasis se hace entorno a los conceptos de llamado directo y delegado,
partiendo de esta premisa se definen los elementos respecto a que tipo de elementos deben
ser y que tarea juegan dentro de la arquitectura de la implementación, se distinguen dos tipos
de elementos relevantes, los objetos abiertos de los que ya se ha hablado bastante y los Proxy
[31], los demás son elementos normales que se implementan de manera convencional o que
responden a un propósito especifico que se describirá cuando se requiera.
Los elementos que son objetos abiertos son dominio, composite, componente y wire,
estructuralmente existe una dependencia entre ellos, un dominio contiene composites y este
a su vez wires y componentes, como se menciono anteriormente en el caso de los llamados
directos se hace por medio de un servicio de un componente y en el caso de un llamado
56
delegado se hace sobre una referencia usando la pareja wire y componente, donde estos se
comunican o relacionan usando sus características de objetos abiertos.
Los elementos que se modelan como Proxy son el servicio y la referencia, claro que el servicio
se materializa de esta forma solo en el caso del llamado directo y la referencia en el caso del
llamado delegado, los Proxys se usan con el fin de poder mostrar a los clientes externos y a las
implementaciones una vista Java pero con la posibilidad de interceptar los llamados
efectuados para ser procesados de acuerdo al tipo de llamado.
Los elementos restantes propiedades, interfaces, binding e implementación, tienen incidencia
en la implementación pero no un comportamiento ejecutable explicito y este se mencionara
mas adelante.
5.2.3. Service y Reference El elemento service y reference facilitan a los clientes los llamados sobre el metamodelo, en
este caso especifico la implementación se realiza en Java, para dar una perspectiva Java a los
clientes es necesario interceptar los llamados a operaciones hechos por los clientes tanto
externos como internos, en el caso de los clientes externos, los llamados se dan sobre servicio
y en el caso interno las referencias son inyectadas en las implementaciones quienes son las
que realizan los llamados a operaciones, en este caso el llamado por medio de un servicio es el
llamado directo y el llamado por medio de de una referencia es el llamado delegado. Esto hace
emerger la necesidad de mostrar estos dos elementos como importantes dentro de la
estructura de la ejecución del metamodelo, estos dos elementos son los que permiten que los
clientes accedan al metamodelo para ejecutar sus servicios.
(Figure 26)
57
XComponent<<openobject>>
Implementation.java
Proxy
Figure 26. Service Proxy
(Figure 27)
Aimpl.java
XComponent<<openobject>>
Bimpl.java
Proxy
XWire<<openobject>>
Figure 27. Reference Proxy
58
5.3. Diseño detallado de la implementación Ya se han definido los elementos y se han explicado en detalle se va a mostrar el metamodelo
sobre el cual se construye la aplicación, se consideraron los elementos que son objetos
abiertos sobre los que se formuló el metamodelo. El diseño de la aplicación se puede ver en
función a cuatro vistas generales, la primera describe la estructura desde el punto de vista de
los objetos abiertos y los elementos que permiten la construcción de ellos, la segunda muestra
como se realizo la abstracción del ensamblaje de SCA que es la misma mostrada para el
metamodelo, aunque algunos de estos elementos no son ejecutables ellos permiten
configurar los elementos ejecutables para que realicen sus tareas, por ejemplo los valores de
propiedades que son asignados a las implementaciones, establecer las relaciones entre los
diferentes componentes por medio de sus wire, referencias y servicios, en el caso de los
binding exponer servicios por medio de RMI o localizar referencias también por medio de RMI,
el tercer y cuarto diagrama muestran como se realiza la relación entre los proxy y los objetos
abiertos, el tercero muestra la parte de la estructura del metamodelo que se usa para una
llamada directa y el cuarto la parte que se usa para una llamada delegada.
(Figure 28)
Figure 28. Construcción de elementos ejecutables
61
5.4. Arquitectura del Motor
(Figure 31)
SCA Engine
CumbiaAPI SCA API
SCA
Metamodel
Open Objects
Kernel
SCA Engine
CumbiaAPI SCA API
SCA
Metamodel
Open Objects
Kernel
Figure 31. Arquitectura General
Como ya se ha mencionado el motor funciona apoyado en el framework
CumbiaOpenObjectsKernel para materializar el metamodelo de SCA, el motor realiza la
implementacion del metamodelo y de las demás características para poder ejecutar un
modelo SCA, las entidades externas interactúan con el motor para ejecutar aplicaciones SCA y
para conectar aplicaciones de análisis, en el primer caso el SCA Api permite acceder a servicios
de los cuales se pueden invocar operaciones y en el caso de análisis se proporciona una visa
cumbia donde se puede navegar por el modelo, solicitar elementos específicos por medio del
runtime, instalar sensores, acciones y todos los elementos para interactuar con el motor en
tiempo de ejecución.
(Figure 32)
62
CumbiaOpenObjectsKernel
SCA Metamodel
SCAAnalysisPlugins
BAMBandwidthAnalysis
SCAEngine
InstanceImplementation
FactoryConversation
Manager
RMI Publisher Proxys
Figure 32. Detalle de los componentes generales del diseño
El Engine de SCA proporciona la implementación de tareas complementarias a las del
metamodelo para lograr la ejecución completa de la aplicación, el administrador de instancias
se encarga de manejar las instancias sobre las que los componentes van a ejecutar ya que
estas cuentan con un ciclo de vida donde tienen en cuenta las referencias, propiedades y el
scope que se haya definido, el administrador de conversaciones maneja los identificadores y
junto con el administrador de instancias se encarga de garantizar el correcto funcionamiento
de las llamadas con estados conversacionales, el publicador rmi proporciona la infraestructura
necesaria para poder exponer servicios o ubicar referencias usando el binding RMI, finalmente
los proxys como ya se menciono proporcionan las vistas del metamodelo para los clientes
tanto externos como internos.
5.5. Experimentación y Pruebas Mediante el siguiente escenario de experimentación se muestra que es posible realizar análisis
sobre una aplicación SCA, en este documento ya se definió un escenario sobre el cual se va a
realizar la experimentación, el caso es el siguiente:
Se quiere determinar la necesidad de ancho de banda para la aplicación en el caso de ser
distribuida, supongamos que los componentes se encuentran distribuidos en una red y al
haber dependencias entre ellos se deben realizar llamados que pueden recibir respuestas esto
genera un intercambio de datos, la red funciona actualmente pero se quiere determinar el
impacto de la nueva aplicación para saber si se requieren cambios en la infraestructura, el
intercambio de datos entre los componentes debe ser proporcional al numero de llamadas a
las operaciones de sus servicios y a las respuestas producto de estos llamados.
63
En este caso es necesario recopilar la cantidad de datos que se intercambia en los llamados
entre componentes, el punto adecuado para obtener esta información es el Wire, como se
menciono en el diseño el wire es el elemento que facilita las llamadas a servicios cuando un
componente es cliente de otro, esta es la maquina de estados del wire.
PassingData
Active
callExecuted [TARGET]
InitPassData
dataPassed [ME]
Inactive
Initialize [ME]PassCall
wireCall [ME]
MakeCall
callReturned[ME]
PassingData
Active
callExecuted [TARGET]
InitPassDataPassData
dataPassed [ME]
Inactive
Initialize [ME]PassCallPassCall
wireCall [ME]
MakeCall
callReturned[ME]
Figure 33. Máquina de estado de Wire
Al mirar en detalle cuando el evento wireCall es recibido en el estado Init es porque se ha
recibido un Call de un componente cliente, esta transición se llama Call en esta transición es
posible acceder al Call que se va a ejecutar esto se puede realizar agregando una acción en la
transición que realice esta tarea.
64
Figure 34. Transición Call en el Wire
La accion CollectCallInfo se encarga de recopilar la información relevante para realizar el
análisis
ComponenteOrigen ComponenteDestino FechaHora Tamaño del call
En el caso del retorno es posible contar con la información cuando es generado por el
componente destino el evento callExecuted estando el wire en estado Active, en este caso el
componente destino esta retornando la respuesta al llamado, en este caso la transición se
llama PassCallResult de la misma forma es necesario instalar una acción para recopilar la
información.
Active Init
dataPassed
PassCall wireCall
MakeCall
CollectCallI
nfo
65
Figure 355. Transición PassCallResult en el Wire
En este caso la información es recopilada por la acción CollectReturnInfo y la información
recopilada es la siguiente.
ComponenteOrigen ComponenteDestino FechaHora Tamaño del retorno
La tarea de instalar una acción en una transición es sencilla es necesario obtener la transición
sobre la cual se quiere instalar la acción profundizando en el tema para obtener una transición
es necesario saber sobre cual elemento y cual transición se requiere esto se obtiene por
medio del runtime con un método getElement que recibe la ruta
wire|NombreDomain:NombreComposite:NombreWire|PassCallResult, la primera
parte indica el tipo de elemento este caso un Wire, la siguiente la ruta del wire
dominio:composite:wire finalmente el nombre de la transición, por medio de esto se obtiene
un elemento tipo Transition y ya estando en la transición se invoca el siguiente método para
agregar la acción addAction( actionName, actionImplementation ).
PassingData
Active
callExecuted [TARGET]
PassData
dataPassed [ME]
MakeCall
callReturned[ME]
CollectReturnInfo
66
De este modo se obtiene la información pero no basta con tener la información suelta para
poder llevar a cabo el análisis de la información es necesario procesar los datos recolectados
para tener resultados del análisis, en este caso para ilustrar las posibilidades el análisis la
información es realizado por el Software BAM de Oracle
(Figure 36)
ENTERPRISE MESSAGE RECEIVER
OC4JJMS TOPIC
SCA OPEN OBJECTS
JMS MESSANGE
DOMAIN ELEMENTS
ORACLE DATA OBJECTS
ORACLE BAM
REPORTS
....
..
Figure 366. Diseño solución BAM
Dentro de este escenario de validación se construyo una pequeña herramienta para poder
visualizar información recopilada del motor en reportes en Oracle BAM, el propósito de la
herramienta es mostrar información recopilada de los call y sus respuestas.
La figura anterior muestra la estructura de cómo funciona la aplicación, en términos generales
consiste en la generación mensajes JMS con la información recolectada en las acciones a una
cola que recibe la información para Oracle BAM, los mensajes son generados a medida que
son generados los eventos en el wire que hacen ejecutar las acciones, estos mensajes llegan al
Enterprise Message Receiver como una cadena de caracteres que representa un XML allí se les
aplica una transformación XSL y son almacenados como Oracle Data Objects. Los reportes que
67
componen la consola son generados a partir de la información almacenada en estos Oracle
Data Objects.
5.5.1. Pruebas Las pruebas del correcto funcionamiento del motor de SCA que se ha implementado se
realizaron sobre el necesario ya definido, las pruebas comprenden pruebas al
comportamiento funcional del escenario y del correcto funcionamiento de los elementos que
se definieron como objetos abiertos.
5.5.2. Framework de Pruebas Dentro de los elementos que han sido desarrollados en Cumbia se encuentra todo un estudio
de cómo hacer pruebas sobre modelos ejecutables, para esta tarea se definió un framework
de pruebas [32]. Existe una herramienta que facilita esta tarea, la herramienta permite la
observación y recolección de información sobre el motor. El proceso de pruebas consiste en la
recolección de información de los artefactos del motor para ser analizada por medio de
aserciones dentro de pruebas al finalizar la ejecución, esta recolección se realiza por medio de
la ejecución del motor y en conjunto con el framework de pruebas, para realizar esto se
requiere la implementación de algunos artefactos específicos para cada motor.
Figure 377. Esquema del framework de pruebas
Motor SCA
Sensores
Test Assertions
Traces
Tracers
68
El framework de pruebas también aprovecha las propiedades de los objetos abiertos, el
framework consiste en un kernel que facilita la instalación de artefactos sobre los elementos
del metamodelo, se hace por medio de sensores que son instalados en las transiciones de los
elementos similar a las acciones en el concepto de objetos abiertos, en el momento de
ejecutar una transición es posible realizar interacción con el modelo, los sensores se encargan
de instalar tracers, los tracers incorporan lógica que permite recopilar información de la
ejecución en el metamodelo, esta información es almacenada en traces sobre el que
finalmente en las pruebas se realizan aserciones, los tracers también tienen como
responsabilidad evaluar la información de las trazas para mostrarla de la manera adecuada, en
el caso de estos corren de manera local, por lo cual este framework no puede probar
aplicaciones distribuidas pero si probar cada parte en este caso probar cada composite.
Para formular las pruebas es necesario realizar las ejecuciones sobre el motor es decir dar los
estímulos para que el motor se ejecute, algo similar a lo que hace un cliente del motor, un
cliente solicita un servicio y luego realiza una ejecución, para este propósito en el framework
de pruebas es necesario definir un programa de animación, un programa de animación esta
escrito en un lenguaje que es específico para cada caso, para este motor es necesario definirlo,
el lenguaje de animación para este caso permite la solicitud de servicios sobre el dominio que
se esta probando y luego la definición de un programa donde se pueden hacer llamados sobre
las operaciones del servicio.
<animation name="animation0"> <instances>
<service id="3" name="customerService" class="store.customers.CustomersExternal" serviceName="CustomerComponent/CustomersExternal" />
</instances> <program>
<command name="DELAY">value=2000;</command> <command name="INSTRUCTION">
<instruction id="a" name="createCustomer" serviceId="3"> <variables>
<variable name="cc" value="100000000" type="java.lang.String" /> <variable name="name" value="Pedro Pérez" type="java.lang.String" /> <variable name="password" value="mipassword" type="java.lang.String" /> <variable name="location" value="Bogota, Colombia" type="java.lang.String" /> <variable name="address" value="Cll 19 No. 11" type="java.lang.String" />
</variables> </instruction>
</command> </program> </animation>
69
Para el proceso de pruebas se requiere probar el correcto funcionamiento del motor dados los
estímulos, el lenguaje de animación permite la obtención de servicios y la ejecución de
operaciones en servicios, las características que se probaron fueron:
• Al solicitar un servicio todos los elementos que van a participar se encuentran en
estado de espera.
• El resultado de la ejecución de una operación es la esperada.
• La ejecución en el caso del llamado directo se hace sobre el componente esperado.
• La ejecución en el caso del llamado directo cuando este tiene dependencias sobre
llamados delegados se realiza en el orden adecuado y sobre los elementos adecuados.
• La ejecución del llamado a una operación se realiza en el composite esperado.
• Los valores asignados a las propiedades son los que efectivamente se declararon en
los archivos de definición.
• Las ejecuciones múltiples en paralelo sobre un mismo componente tiene el resultado
adecuado.
70
6. Conclusiones y Trabajo futuro
6.1. Conclusiones:
• Se construyo una herramienta que permite el análisis de aplicaciones definidas usando
SCA, la herramienta obtenida combina los conceptos de SCA con las posibilidades de
observación e interacción de los objetos abiertos, lo que resulta en una herramienta
que permite el análisis dinámico, en este caso se exploró la suma de dos modelos para
poder lograr esto a diferencia de otros modelos de componentes que deben proveer
este tipo de características desde su concepción.
• Es posible realizar el análisis dinámico por medio de la herramienta, el modelo
formulado como base tiene en cuenta los estados por los cuales pasan los elementos y
que son relevantes con la construcción usando objetos abiertos se pone al alcance
externo, los estados relevantes de los componentes y un mecanismo para interactuar
con el metamodelo cuando los eventos ocurren de una forma sencilla por medio de
interfaces e independiente de los detalles internos de al implementación.
• Se exploro SCA como una herramienta que permite definir aplicaciones que separan la
estructura de la implementación, con el paso de la investigación se encuentra a SCA
mas como una herramienta que permite estructurar aplicaciones a un nivel de
abstracción un poco mas alto dejando la implementación como un problema que se
resuelve con el uso de diferentes tecnologías, es este caso se exploro el caso de
implementaciones en Java, actualmente SCA soporta otras mas y cuenta con
mecanismos para poder extender este soporte para adicionar implementaciones en
otras tecnologías, en el caso Java existen algunos detalles que debe correlacionar la
definición de la arquitectura con las implementaciones por medio de anotaciones,
esto no resulta tan beneficioso pues se aumenta un poco la complejidad al llevar
información de descripción al nivel de código entonces resulta de mayor dificultad la
interpretación del detalle de la arquitectura de las aplicaciones construidas.
71
• Se mostró que el concepto de Modelos Ejecutables y Objetos abiertos en el que se ha
venido trabajando como activo principal para la fabrica de aplicaciones basadas en
workflows, también puede ser usado como concepto para modelar en este caso un
modelo ejecutable como lo es SCA pero que no esta ligado a un workflow sino a un
modelo de componentes, aunque es importante anotar que el uso de las maquinas de
estado puede llegar a convertir las herramientas desarrolladas en aplicaciones con alta
dependencia secuencial, es importante saber tomar las decisiones en cuanto a que
elementos deben modelarse como objetos abierto, en este trabajo se intento
combinar la capacidad de paralelismo de los objetos convencionales usando proxys y
comunicando a estos con objetos abiertos pero con la construcción de instancias de
manera dinámica para suplir la situación de ejecución secuencial pero compartiendo
elementos de ejecución como las implementaciones.
• Resulto en este caso de utilidad importante el uso del framework
CumbiaOpenObjectsKernel, de una manera independiente al uso de objetos abiertos
las capacidades que tiene para estructurar aplicaciones donde el modelo pueda ser
jerárquico y responda o no a un modelo ejecutable resultan beneficiosas a la hora de
construir una aplicación que cumpla con estas características.
6.2. Trabajos futuros: Con los conceptos recopilados y la experiencia vivida en esta investigación surge un conjunto
de interrogantes que podrían ser planteados como ideas para trabajos futuros o como temas
de profundización en los conceptos de SCA.
• En SCA existe un conjunto de especificaciones asociadas a políticas de ejecución estas
definen restricciones sobre como deben comportarse los elementos en un
ensamblaje, puede resultar interesante profundizar conceptualmente en este tema
como una posibilidad para formular metamodelos de políticas bien sea para SCA o
para los modelos que ya se han ejecutado en el proyecto Cumbia.
• Explorar la posibilidad de incluir en la herramienta la implementación de componentes
en tecnologías adicionales a Java es posible pensar en implementaciones usando
procesos en XPM con el objetivo de construir aplicaciones XPM estructuradas por
medio de SCA.
• Se ha venido explorando en Cumbia el concepto de adaptación dinámica en modelos
ejecutables, la incorporación de este concepto en este trabajo podría resultar en un
modelo altamente configurable.
72
7. Bibliografía 1. Beisiegel, M., et al., Sca service component architecture - assembly model specification. 2007.
2. Object Management Group OMG. Corba Component Model Specification. 2006; Available
from: http://www.omg.org/docs/formal/06-04-01.pdf.
3. Linda DeMichiel, S.M. and O.C. Michael Keith, JSR 220: Enterprise JavaBeansTM,Version 3.0, EJB 3.0 Simplified API. 2006.
4. Bruneton, E., et al., The FRACTAL component model and its support in Java: Experiences
with Auto-adaptive and Reconfigurable Systems. Software—Practice & Experience, 2006.
36(11-12): p. 1257-1284.
5. Villalobos, J., M. Sánchez, and D. Romero, Executable Models as
Composition Elements in the Construction of Families of
Applications. 6th International Workshop on the Foundations
of Coordination Languages and Software Architectures
(FOCLASA 2007), Portugal, September 2007, 2007.
6. Bass, L., P. Clements, and R. Kazman, Software Architecture in Practice. 2003: Addison-
Wesley Professional.
73
7. Clements, P., et al. Documenting software architectures: views and beyond. 2003.
8. Balasubramanian, K., Composition in the CORBA Component Model, K.E.i.t.C.C. Model, Editor. 2002.
9. Consortium, O. OW2 home page. Available from: http://www.objectweb.org/.
10. Samaniego, G., Lenguaje para Definir Interacción entre componentes: Caso de Requerimientos No Funcionales en Gaita in Depatamento de Ingenieria de SIstemas y Computación. 2008,
Universidad de Los Andes: Bogotá.
11. Sun Microsystems, I. Java EE at a glance. 2009; Available from:
http://java.sun.com/javaee/.
12. Sun Microsystems, I., Enterprise JavaBeans Fundamentals. 2006.
13. Inc., S.M., Enterprise JavaBeans, v 3.0. Java Persistence API. 14. Sun Microsystems, I. Java Message Service (JMS). Available from:
http://java.sun.com/products/jms/.
15. Casallas, R., et al., Gaita-S-V0: Model Final Specification. 2005.
16. Rocha, C., Semánticas para el ensamblaje de servicios y la composición de componentes en un modelo de servicios y componentes, in Depatamento de Ingenieria de SIstemas y
Computación. 2005, Universidad de Los Andes: Bogotá.
17. Reynoso, C. and N. Kicillof, Lenguajes de Descripción de Arquitectura (ADL). 2004.
18. Software Engineering Instute. Architecture Description Languages. 2009; Available from:
http://www.sei.cmu.edu/architecture/adl.html.
19. Sun Microsystems, I. Using JMX agents. 2006; Available from:
http://java.sun.com/javase/6/docs/technotes/guides/jmx/overview/agent.html.
20. McCoy, D., Business Activity Monitoring: Calm Before the Storm. Gartner Research Note
LE-15-9727, 2002.
21. OSOA. OSOA Home. Available from: http://osoa.org/display/Main/Home.
22. OASIS. OASIS Open CSA. Available from: http://www.oasis-opencsa.org/.
23. Edwards, M., SCA: Flexible and Agile Composition of Distributed SOA Applications. JavaOne
2008, 2008.
24. Rogue Wave Software. Rogue Wave HydraSCA. 2008; Available from:
http://www.roguewave.com/products/hydra/hydrasca.php.
25. IBM Corporation. WebSphere Application Server V7 Feature Pack for Service Component
Architecture. 2008; Available from: http://www-
01.ibm.com/software/webservers/appserv/was/featurepacks/sca/.
26. Oracle Corporation. BEA Enterprise Service Bus. Available from:
http://www.bea.com/framework.jsp?CNT=requirements.htm&FP=/content/products/aqu
alogic/service_bus/.
27. Apache Tuscany. Available from: http://tuscany.apache.org.
28. Fabric3. Available from: http://fabric3.codehaus.org/.
29. Graham, B. and E. Mike. Implementation examples and tools. 2008; Available from:
http://osoa.org/display/Main/Implementation+Examples+and+Tools.
30. Barrero, I., Adaptación dinámica de modelos ejecutables extensibles para aplicaciones basadas en control, in Depatamento de Ingenieria de SIstemas y Computación. 2008, Universidad de
Los Andes: Bogotá.
31. Sun Microsystems, I. Class Proxy. 2004; Available from:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Proxy.html.
32. Moreno, S., A Testing Framework for Dinamyc Composable Executable Models, in Depatamento
de Ingenieria de SIstemas y Computación. 2008, Universidad de Los Andes: Bogotá.