Transação distribuída entre vários aplicativos no Spring
Atualmente, tenho um conjunto de aplicativos Web no estilo ERP criados na primavera 3. O aplicativo é implantado no tomcat 7.
O sistema foi desenvolvido há algum tempo sem uma arquitetura definida de forma limpa. Cada Aplicativo possui 3 partes (como subprojetos). API: Definindo modelos e interfaces, IMPL: a camada de serviço e a WEB.
O layout atual do sistema é como abaixo.
A API financeira + IMPL está incluída no módulo Inventário para obter o gerenciamento de transações. Anteriormente, tentamos separar o inventário e o financeiro em diferentes aplicativos da Web usando chamadas REST, mas enfrentamos problemas com o gerenciamento de transações. O que estamos fazendo atualmente é @Autorizar o Implemento financeiro diretamente nos serviços de inventário. Por exemplo, quando uma fatura de venda é feita, as operações financeiras e de estoque devem estar na mesma transação.
Agora, como já esperado, surgem problemas com essa abordagem. O sistema de inventário é super pesado, pois é necessário inicializar uma camada financeira duplicada.
Eu acho que a introdução de um Messaging Middleware como HornetQ ou ActiveMq seria a melhor coisa a fazer aqui, como abaixo.
Minhas perguntas são:
Como posso obter um gerenciamento centralizado de transações entre Financeiro e Inventário?Existe algum benefício aqui se eu usar um Java EE Server como o jBoss?Se eu mover um aplicativo para outra instância do jboss em execução em outro servidor, ainda posso ter transações centralizadas?