# Enterprise Service Bus

L'Enterprise Service Bus o ESB és una manera de construir programari, aquesta tecnologia informàtica cau en el que anomenem programari intermediari (middleware en anglès). L'objectiu d'aquesta arquitectura és, sobretot, permetre la comunicació entre aplicacions que inicialment no estaven pensades per funcionar de forma conjunta (per exemple, dos sistemes ERP fets per empreses diferents).
Una arquitectura ESB proporciona una capa d'abstracció que permet la comunicació d'aplicacions a través del sistema de missatgeria de l'empresa. Podem considerar l'ESB com una nova generació d'EAI (Enterprise Application Integration) construïda sobre estàndards com l'XML, JMS o serveis web com SOA o WOA. Una altra diferència entre l'ESB i l'EAI és el fet que l'ESB proposa una integració distribuïda gràcies a la utilització de contenidors de serveis, que actuen com a mini-servidors. Aquests mini-servidors contenen la lògica d'integració i poden trobar-se en qualsevol lloc de la xarxa de l'empresa.

## Descripció

No es pot considerar l'ESB com un programari, sinó un estil d'arquitectura basada en un grup d'estàndards de programari. El terme ESB fa referència a la infraestructura de programari que permet la comunicació entre aplicacions.
En l'arquitectura d'una aplicació d'empresa fent ús d'un ESB, una aplicació es comunicarà a través del bus, que actua com a intermediari de missatges entre aplicacions. El principal avantatge d'aquest enfocament és que redueix el nombre de connexions punt a punt necessàries per a la comunicació entre aplicacions, la qual cosa fa més simple i més senzilla l'adaptació del programari. En reduir el nombre de punts de contacte per a una aplicació determinada, el procés d'adaptació d'un sistema als canvis en un dels seus components es fa més fàcil.
L'ESB és la peça de programari que es troba entre les aplicacions de negoci i permet la comunicació entre elles. L'ideal seria que l'ESB fos capaç de reemplaçar tot el contacte directe amb les aplicacions del bus, de manera que totes les comunicacions es portessin a terme a través d'aquest. Amb la finalitat d'assolir aquest objectiu, el bus ha d'encapsular la funcionalitat que ofereixen les aplicacions dels seus components de manera significativa. Això es realitza generalment mitjançant l'ús d'un missatge model. El missatge model defineix un conjunt estàndard de missatges que l'ESB ha de transmetre i rebre. Quan l'ESB rep un missatge, encamina el missatge a l'aplicació corresponent. Sovint, com que l'aplicació no es va construir amb la idea del missatge de model, l'ESB ha de transformar el missatge a un format que sigui comprensible per l'aplicació. El programari encarregat de realitzar aquestes transformacions es coneix com un adaptador.
La connexió entre el missatge model i la funcionalitat que ofereix l'aplicació és crucial. Si el missatge model no encapsula totalment la funcionalitat de l'aplicació, altres aplicacions que designin aquesta funcionalitat es veuran obligades a passar per alt l'ESB i hauran d'invocar directament l'aplicació, la qual cosa, viola tots els principis exposats anteriorment, i no s'obtenen els avantatges de la utilització d'un ESB.

## Principis

L'ESB com a intermediari entre els clients i els proveïdors de serveis es basa en els següents principis:
* Invocació: suport per a protocols de transport síncrons i asíncrons, servei de mapejat (localització i enllaçat).
* Encaminament: adreçabilitat, encaminament estàtic i determinístic, encaminament basat en el contingut, encaminament basat en regles, encaminament basat en polítiques.
* Descobriment dinàmic: els serveis associats així com la seua semàntica s'emmagatzemen en un directori compartit.
* Coreografia del procés: implementació de processos de negoci complexos.
* Orquestració del servei: coordinació de múltiples serveis d'aplicació exposats com un de sol.
* La distribució forta: els serveis es distribueixen en la xarxa de l'empresa o Internet.
* La comunicació per missatges: els serveis d'intercanvi de missatges es fan a través de documents de text, aquests missatges es processen, transformen i milloren.
* Processament d'esdeveniments complexos: interpretació d'esdeveniments, correlació, coincidència de patrons.
* Qualitat del servei: seguretat (xifrat i signatura), lliurament fiable, gestió de transaccions.
* Gestió: monitoratge, auditoria, consola d'administració, logging, BAM
El terme ESB es va utilitzar per primera vegada per l'editor Sonic Software (filial de Progress Software Corporation).

## L'arquitectura

L'Enterprise Service Bus posseeix com el seu nom indica una arquitectura en bus, per contraposició a l'arquitectura en estrella dels primers EAI, la qual cosa fa que l'ESB ofereixi una arquitectura molt distribuïda.
L'ESB es fonamenta en quatre tècniques:
* El MOM que permet l'intercanvi de missatges de manera asíncrona. Així cada missatge és dipositat en una cua avant de ser consumit pel destinatari.
* Els serveis web que permeten establir una interfície entre les aplicacions i el bus. Cada servei conté una lògica d'integració dels missatges.
* Les transformacions que afecten els missatges que circulen pel bus.
* L'encaminament intel·ligent que dissocia l'emissor del missatge del destinatari. Serà l'ESB qui deduirà la destinació del missatge.
Poden afegir-se a aquesta arquitectura:
* El BAM que permet monitorar l'activitat d'un procés de negoci.
* El BPM que s'encarrega d'optimitzar els processos de negoci.
Els components d'aquesta arquitectura es representen en la següent figura:

## Estàndards

L'ESB es recolza en els següents estàndards de l'arquitectura de programari:
* JMS per al bus.
* SOAP, WSDL, UDDI per als serveis Web.
* JBI per als contenidors de serveis.
* XML, XSLT, XPath per la transformació i l'encaminament.
* JCA per a la connexió d'aplicacions.
* BPEL coordinació de processos de negoci.

## Enllaços externs

* ESB Topology Alternatives. InfoQ. 23. Maig 2008.
* Livre blanc sur les ESBs Arxivat 2009-07-11 a Wayback Machine.