Qual é a melhor maneira de fazer transações distribuídas em vários bancos de dados usando Spring e Hibernate?
Eu tenho um aplicativo - mais como um utilitário - que fica em um canto e atualiza periodicamente dois bancos de dados diferentes.
É um aplicativo pequeno e autônomo que foi construído com um Spring Application Context. O contexto tem duas Fábricas de Sessões do Hibernate configuradas nele, usando fontes de dados Commons DBCP configuradas no Spring.
Atualmente não há gerenciamento de transações, mas gostaria de adicionar alguns. A atualização para um banco de dados depende de uma atualização bem-sucedida para o outro.
O aplicativo não está em um contêiner Java EE - ele é inicializado por uma classe de ativador estática chamada de um script de shell. A classe do ativador instancia o Contexto de Aplicativo e invoca um método em um de seus beans.
Qual é a melhor maneira de colocar a transacionalidade em torno das atualizações do banco de dados?
Deixarei a definição de 'melhor' para você, mas acho que deve ser alguma função de 'fácil de configurar', 'fácil de configurar', 'barato' e 'fácil de empacotar e redistribuir'. Naturalmente, o software livre seria bom.