Transacción distribuida entre múltiples aplicaciones en Spring
Actualmente tengo un conjunto de aplicaciones web de estilo ERP creadas en la parte superior de la primavera 3. La aplicación se implementa en tomcat 7.
El sistema se desarrolló hace algún tiempo sin una arquitectura limpiamente definida. Cada aplicación tiene 3 partes (como subproyectos). API: definición de modelos e interfaces, IMPL: la capa de servicio y la WEB.
El diseño actual del sistema es el siguiente.
Financial API + IMPL se incluye en el módulo de inventario para lograr la gestión de transacciones. Anteriormente intentamos separar el inventario y las finanzas en diferentes aplicaciones web mediante llamadas REST, pero tuvimos problemas con la administración de transacciones. Lo que estamos haciendo actualmente es @Autowiring the Financial Impl directamente a los servicios de inventario. Por ejemplo, cuando se realiza una factura de Venta, tanto las operaciones financieras como las de inventario deben estar en la misma transacción.
Ahora, como ya se esperaba, surgen problemas con este enfoque. El sistema de inventario es muy pesado ya que necesita arrancar una capa financiera duplicada.
Supongo que presentar un Middleware de mensajería como HornetQ o ActiveMq sería lo mejor que se puede hacer aquí, como se muestra a continuación.
Mis preguntas son:
¿Cómo puedo lograr una gestión de transacciones centralizada entre Financial e Inventory?¿Hay algún beneficio aquí si uso un servidor Java EE como jBoss?Si muevo una de las aplicaciones a otra instancia de jboss que se ejecuta en otro servidor, ¿puedo tener transacciones centralizadas?