# Integración de aplicaciones para empresas

La integración de aplicaciones para empresas, también conocido por las siglas EAI (del inglés enterprise application integration) o EII (enterprise information integration, integración de la información de la empresa), se define como el uso de software y principios de arquitectura de sistemas para integrar un conjunto de aplicaciones, dentro de cualquier empresa.

## Justificación del EAI

Es el proceso de conectar las aplicaciones unas con otras para intercambiar información operativa o financiera. Cuando dichos sistemas no pueden compartir su información efectivamente, se crean cuellos de botella que requieren de la intervención humana en la forma de toma de decisiones o en el ingreso mismo de la información. Con una arquitectura EAI correctamente implementada, las organizaciones pueden enfocar la mayoría de sus esfuerzos en la creación de competencias que generen valor, en lugar de enfocarse en la coordinación de labores operativas.
Durante varias generaciones, los sistemas de las empresas han servido para un propósito específico a un único usuario o grupo de usuarios, los cuales actúan como la interfaz de dicho sistema con el resto de la organización, limitando su conexión con otros sistemas modernos o más amplios en la empresa y más aun, por la creciente demanda de las empresas por compartir datos y usarlos en sus procesos sin tener que realizar cambios en sus aplicaciones o en sus estructuras de datos.
Uno de los retos que encaran las organizaciones modernas es darles a sus empleados información completa en tiempo real. Muchas de las aplicaciones en uso actualmente se apoyan en tecnologías antiguas, por lo cual esos sistemas enfrentan dificultades a la hora de mover esta información entre las aplicaciones.
La EAI, como una disciplina, busca solventar muchos de esos problemas, así como crear nuevos paradigmas para, ciertamente, mejorar a las organizaciones tratando de trascender en el objetivo de conectar las aplicaciones individuales, para ser un mecanismo que incremente el conocimiento dentro de la organización y crear ventajas competitivas futuras a la empresa.

## Mejorar la conectividad

La integración de aplicaciones para empresas ha incrementado su importancia porque la computación en las empresas frecuentemente toma la forma de islas de información. Esto ocasiona que el valor de los sistemas individuales no sea aprovechado al máximo debido a su aislamiento.
Si la integración se aplica sin seguir un enfoque estructurado de EAI, las conexiones punto a punto crecen al interior de la organización resultando en una masa disforme que es difícil de mantener. Esto se denota normalmente como el espagueti, en alusión al equivalente en programación: el código espagueti.

### Ejemplo

El número de conexiones necesario para tener completamente conectados varios sistemas punto a punto crece según la fórmula ${\tbinom {n}{2}}={\frac {n(n-1)}{2}}$, donde n es el número de puntos (véase coeficiente binomial). Por ejemplo: para tener 10 aplicaciones completamente conectadas se requieren 45 conexiones punto a punto.

## Objetivo del EAI

EAI puede ser usado con diferentes fines:
* Integración de datos (información): asegurando que la información en varios sistemas sea consistente. Esto también se conoce como EII (Enterprise Information Integration).
* Integración de procesos: enlace de los procesos de negocios entre diferentes aplicaciones.
* Independencia de proveedor: extrayendo las políticas o reglas del negocio de las aplicaciones e implementándolas en un sistema EAI, de forma que cualquiera de las aplicaciones usadas pueda ser cambiada sin que dichas reglas de negocio deban ser reimplementadas.
* Facade común: Un sistema EAI puede actuar como el front-end de un cúmulo de aplicaciones, proporcionando una interfaz de acceso única y consistente a esas aplicaciones y aislando a los usuarios sobre la interacción con distintas aplicaciones.

## Patrones de EAI
### Patrones de integración

Hay dos patrones que implementan los sistemas de EAI:
* Mediación: aquí, los sistemas de EAI actúan como el vínculo de los enrutadores entre varias aplicaciones. En el lugar en el cual ocurre un evento interesante en alguna aplicación (ejemplo: se crea una nueva información, se completa una nueva transacción, etc.) se notifica a un módulo de integración del sistema EAI. El módulo entonces propaga esos cambios a las otras aplicaciones relevantes.
* Federación: en este caso, el sistema EAI actúa como un consolidador de información entre varias aplicaciones. Todos los accesos del exterior a cualquiera de las aplicaciones son recibidos por el sistema EAI y este está configurado para exponer solo la información relevante, conectándose a las aplicaciones del mundo exterior y efectuar todas las interacciones con las aplicaciones internas sin intervención del agente externo.
Los dos patrones son usados en conjunto frecuentemente. El mismo sistema EAI puede tener varias aplicaciones en sync (mediación), mientras sirve requerimientos de agentes externos contra esas aplicaciones (federación).

### Patrones de acceso

EAI soporta patrones de acceso tanto asíncronos como síncronos, el primero es el habitual en el caso del patrón de mediación y el segundo en el caso de federación.

### Vida de los patrones

Una operación de integración puede ser de "corta vida" (por ejemplo, puede mantenerse la sincronía de los datos entre dos aplicaciones en un segundo) o de "larga vida" (por ejemplo, en uno de los pasos puede ser necesario que el sistema EAI requiera de la aprobación por parte de un agente humano de un préstamo y que este necesite horas o días para autorizarse).

## Topologías de EAI

Hay dos topologías principales: hub-and-spoke, y bus. Cada una de ellas tiene sus propias ventajas y desventajas:
* En el modelo hub-and-spoke, el sistema EAI actúa como el centro (el concentrador), el cual interactúa con las aplicaciones, vía las conversaciones (o spokes).
* En el modelo de bus, el sistema EAI es el bus (o es implementado como un módulo residente en un bus de mensajes existente o un middleware orientado a mensajes).

## Tecnologías

* Bus/hub: este se implementa frecuentemente al ampliar la funcionalidad de productos middleware existentes (servidores de aplicaciones, buses de mensajes) o se implementa como un programa monolítico (ej., sin usar ningún middleware), que actúa como su propio middleware.
* Conectividad de aplicaciones: el bus/hub se conecta a las aplicaciones mediante un conjunto de adaptadores (también conocidos como conectores). Esos son programas que conocen como interactuar con la aplicación específica. El adaptador efectúa una comunicación en dos vías, enviando requerimientos del hub hacia la aplicación, y notificando al hub cuando un evento de interés ocurren en la aplicación (un nuevo registro es insertado, una transacción es completada, etc.). Los adaptadores pueden ser tanto específicos a la aplicación o a un conjunto de aplicación. El adaptador puede residir en el mismo espacio de procesos que el bus/hub o ejecutarse en una localización remota e interactuar con el hub/bus a través de protocolos estándares de industria como colas de mensajes, servicios web, o protocolos propietarios.
* Formateo de datos y transformación: para prevenir que cada adaptador tenga que convertir los datos que van o vienen de otras aplicaciones, los sistemas EAI usualmente emplean un formato de datos común, al cual y desde el cual se convierten los formatos de las aplicaciones mediante servicios de transformación. Esto se hace en dos pasos: el adaptador convierte la información del formato de aplicación al formato común del bus; y entonces se pueden aplicar transformaciones semánticas a esto (ejemplo: convirtiendo códigos postales a nombres de ciudades, separando/fusionando objetos de una aplicación en objetos de otras aplicaciones, y así sucesivamente).
* Módulos de integración: un sistema EAI puede participar en operaciones de integración concurrentes en un momento dado, cada tipo de integración es procesada por un módulo de integración diferente. Los módulos de integración se suscriben a eventos de tipos específicos y ellos reciben las notificaciones de procesos en el momento en que esos eventos ocurren.
* Soporte a transacciones: cuando se emplean para integración de procesos, el sistema EAI provee consistencia transaccional entre las aplicaciones al ejecutar todas las operaciones que involucran una sola transacción distribuida (usando el protocolo de commit de dos fases o transacciones de compensación (operaciones que deshacen las acciones sobre un sistema dado).

## Problemas de implementación de los EAI

En el año 2003 se reportó que falló el 70% de todos los proyectos EAI. La mayoría de dichas fallas no se debían a fallas técnicas del software mismo, o a la implementación, sino a problemas de gobernabilidad. El gerente general de EAIIC, Steve Craggs determinó los siete principales retos que afrontan las compañías que usan sistemas EAI y explica soluciones a dichos problemas.
* Cambio constante: La propia naturaleza de EAI es dinámica y requiere directores de proyecto dinámicos para su aplicación.
* Falta de experiencia en EAI: La EAI requiere conocimiento de muchas problemáticas y aspectos técnicos.
* Estándares en competencia: Dentro del campo de EAI, la paradoja es que los estándares de EAI no son por sí mismos universales, ya que cada proveedor particular trata de imponer los propios.
* EAI es un paradigma de herramientas: EAI no es una herramienta, si no es un sistema y debe ser implementado como tal.
* Construir interfaces es un arte: Realizar el proceso de ingeniería de la solución puede no ser suficiente. Las soluciones requieren ser negociadas con departamentos de usuarios para lograr un consenso común sobre el producto final. La falta de consenso en los diseños de las interfaces tiende a acarrear un esfuerzo excesivo para mapear los requerimientos de datos de varios sistemas.
* Falta de detalle: La información que al principio parece poco importante, con el tiempo se puede volver crucial.
* Rendición de cuentas: Puesto que varios departamentos pueden tener requerimientos contradictorios entre sí, debe asegurarse la rendición de cuentas para la estructura final del sistema.
Otros problemas potenciales pueden abarcar las siguientes áreas:
* Falta de coordinación centralizada del trabajo de la EAI.
* Requerimientos nuevos: Las implementaciones de EAI deben ser extensibles y modulares para permitir cambios futuros.
* Proteccionismo: Las aplicaciones cuyos datos son integrados, frecuentemente pertenecen a departamentos diferentes los cuales tienen razones técnicas, culturales y políticas para no querer compartir su información con otros departamentos.

## El futuro de la EAI

Las tecnologías de EAI todavía están en desarrollo y no hay un consenso sobre cuál es el enfoque ideal o el grupo correcto de tecnologías que una organización debería usar. El futuro de EAI tendrá que dar como resultado lenguajes que permitan diseñar soluciones de integración a un alto nivel de abstracción, independientes de tecnologías, y en los que se pueda, de una forma automática, hacer transformaciones de los modelos de solución a tecnologías concretas.