# Java Business Integration

Java Business Integration (JBI) es una especificación desarrollada bajo la Java Community Process (JCP) con el objetivo de implementar en Java una Enterprise Application Integration (EAI), siguiendo los principios de la Arquitectura Orientada a Servicio (SOA). La referencia JCP fue la JSR 208 para JBI 1.0 y la JSR 312 for JBI 2.0.
JBI proporciona una arquitectura en la que los componentes aparecen en forma de plug-in´s conectados a contenedores JBI y actuando como proveedores de servicio o consumidores de servicio, aunque este rol puede intercambiarse o incluso combinarse. Está construido teniendo en mente los Servicios Web, aunque no son estrictamente necesarios para su funcionamiento. Los componentes, según su función pueden ser de dos tipos:
- Service engines (Motores de servicio). Manejan la lógica de negocio. Pueden implementar procesos de negocio (por ejemplo, mediante servicios Web con POJOs anotados), consumir otros servicios, transformaciones de datos, etc.
- Binding components (Componentes de vinculación). Se usan para enviar y recibir mensajes a través de transportes y protocolos particulares, que por tanto nada tienen que ver con la especificación de mensajes de JBI. Pretenden aislar al entorno JBI del heterogéneo exterior, normalizando los mensajes entrantes y denormalizando los mensajes salientes, garantizando que en el interior se trabaje únicamente con mensajes normalizados. Esta funcionalidad permite que JBI pueda alcanzar servicios que no cumplen esta especificación, o al contrario, que sistemas externos puedan consumir servicios JBI de forma transparente.
El modelo usado para describir los servicios, uno de los fundamentos SOA, es Web Services Description Language (WSDL) 2.0. Además se usa el mismo modelo para realizar las invocaciones de servicio. El mecanismo central de gestión de estos mensajes, el Normalized Message Router (NMR), despacha los mensajes normalizados que le llegan, enviándolos al componente adecuado. El hecho de que el NMR actúe como mediador entre los componentes garantiza que el acoplamiento entre ellos sea muy débil, de manera que éstos sólo se preocupan de que el mensaje sea adecuado para el NMR, y por ello simplifican enormemente la interacción entre consumidor y proveedor. La comunicación se realiza mediante uno de los cuatro tipos de patrones de secuencias soportados, los Patrones de Intercambio de Mensajes, o Message Exchange Patterns (MEPs):
* In-Only: El patrón estándar de envío en un solo sentido, donde el consumidor envía un mensaje al proveedor que responde únicamente con el estado (normalmente done).
* Robust In-Only: Este patrón consigue una versión más confiable del intercambio en un solo sentido. El consumidor inicia el intercambio con un mensaje al cual el proveedor responde con un estado. Si por el contrario responde con un anuncio de error (un fault), el consumidor debe responder en el estado.
* In-Out: El patrón estándar de intercambio de mensajes, con un mensaje en cada sentido. El consumidor inicia con un mensaje, el proveedor responde con un mensaje respuesta o fallo, y el consumidor termina el intercambio con un estado.
* In Optional-Out: Patrón similar al In_out, en el que la respuesta del proveedor es opcional.
Para manejar las necesidades de JBI que tienen que ver con la instalación, despliegue, monitorización y control del ciclo de vida de los componentes, se usa el estándar de administración para java, las Java Management eXtensions (JMX). JBI define además la manera en que deben empaquetarse los componentes, permitiéndoles ser utilizados en cualquier implementación de JBI sin realizar ningún cambio sobre ellos.

## Implementaciones JBI

Los siguientes son implementaciones open source de ESB basadas en JBI:
* Open ESB
* Apache ServiceMix
* FUSE ESB (enterprise ServiceMix)
* Bostech ChainBuilder ESB
* Mule. Aunque no es un contenedor que cumpla con JBI, puede trabajar con contenedores JBI. Mule-JBI es un proyecto separador dedicado a cumplir con esta especificación.
* OW2 PEtALS
* Guaraná DSL Haz uso de JBI BC como adaptadores en sus puertos.
Realmente, las implementaciones certificadas por el TCK, el Technology Compatibility Kit, son Sun/Open ESB y OW2/PEtALS.
Además, el proyecto GlassFish, un servidor de aplicaciones Java EE, incorpora el runtime JBI del proyecto Open ESB.En las últimas versiones del SDK Java EE se incluye el runtime JBI y un motor BPEL.

## Componentes existentes

El proyecto Open JBI Components (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). acoge desarrollos de componentes JBI que conforman la especificación Java Business Integration (JSR 208).

## Libros

* Binildas A. Christudas, "Service Oriented Java Business Integration" (Packt Publishing: Feb 2008, ISBN 1-84719-440-0; ISBN 978-1-847194-40-4), http://www.packtpub.com/service-oriented-java-business-integration
* Tijs Rademakers, Jos Dirksen: "Open-Source Esbs in Action" (Manning Publications Co.: Sep 2008, ISBN 1-933988-21-5; ISBN 978-1933988214), http://manning.com/rademakers/