El funcionamiento de los mediadores en el ESB se basa fundamentalmente en una arquitectura Pipes and Filters, lo cual quiere decir que se utilizan una serie de componentes (filtros), que se encargan de transformar o filtrar datos, antes de conducir estos datos por un conector o tubería. Este tipo de arquitectura se puede utilizar como una secuencia simple o en una estructura compleja.
El ESB de forma general aplica este patrón como se muestra en la siguiente imagen:
En las fases que se muestran en la imagen como Routing y Message Transformation, es donde se realiza el trabajo con los mediadores y secuencias del ESB. Los mediadores son una forma sencilla de extender las funcionalidades del ESB, y aunque esta herramienta trae por defecto un buen stock de mediadores que resuelven casi cualquier problema, también podemos implementar mediadores utilizando dos vías fundamentales:
- Utilizando la clase Mediator, que no permite configuraciones XML específicas para el mediador.
- Escribiendo el mediador con los métodos Factory y Serialize.
En próximas entradas se explicará con detalle qué pasos deben seguirse para la implementación de mediadores.
Por lo pronto nos vamos a dedicar a explicar algunos escenarios, muy sencillos, en los que se pueden utilizar algunos de los mediadores existentes en el ESB.
Hoy por ejemplo hablaremos del mediador Clone, que, como su nombre lo indica, se encarga de clonar el mensaje de entrada y clonarlo en varios mensajes, tantos como sean necesarios, los cuales serán procesados en paralelo.
Esta es la sintaxis general de este mediador:
<clone [id="id"] [continueParent=(true | false)] [sequential=(true | false)]>
<target [to="uri"] [soapAction="qname"] [sequence="sequence_ref"] [endpoint="endpoint_ref"]>
<sequence>
(mediator)+
</sequence>?
<endpoint>
endpoint
</endpoint>?
</target>+
</clone>
Y esta es la interfaz que podemos ver en el ESB cuando vamos a utilizarlo por la vía visual:
Pinchando en el área señalada se pueden agregar los distintos targets a los cuales irán dirigidos los mensajes clonados.
Para probar este mediador creamos, en el Application Server (AS), tres servicios de datos (SD), los cuales simplemente insertan los datos de un usuario en tres BD distintas. Además creamos una secuencia en el ESB que utiliza el mediador clone, agregamos tres targets que direccionan el mensaje de entrada a cada uno de los SD y finalmente un servicio proxy que utiliza la secuencia antes mencionada en su in-sequence.
Aquí está el diagrama:
Este es un ejemplo muy sencillo que se puede complejizar, en este caso solamente se inserta en las respectivas BD y por eso no hay una out-sequence en la que se utilicen otros mediadores, incluso en esta misma in-sequence se pueden agregar otros que realicen distintas funciones.
Con este mediador se pueden resolver muchos de los problemas de interoperabilidad entre aplicaciones.
Extendiendo el ESB. Mediadores. Clone.