Cela dépend vraiment de la robustesse d'une solution dont vous avez besoin. Le niveau minimal de fiabilité sur une telle chose est des transactions XA. Pour l'utiliser, vous avez besoin d'une base de données et d'un pilote JDBC qui le supporte pour les démarreurs, alors vous pouvez configurer Spring pour l'utiliser (here est un aperçu). Si XA n'est pas assez robuste pour vous (XA a des scénarios de défaillance, comme si quelque chose ne va pas dans la seconde phase des commits, comme une panne matérielle) alors ce que vous devez vraiment faire est de mettre toutes les données dans une base de données, puis avoir un processus séparé le propager. Les données peuvent donc être incohérentes, mais elles peuvent être récupérées.
Editer: Ce que je veux dire est que mettre l'ensemble des données dans une base de données. Soit la première base de données, soit une base de données différente à cet effet. Cette base de données deviendrait essentiellement une file d'attente à partir de laquelle la vue de données finale serait alimentée. L'écriture dans cette base de données (en supposant un produit de base de données décent) sera terminée, ou échouera complètement. Ensuite, un thread séparé interrogerait cette base de données et distribuerait les données manquantes aux autres bases de données. Donc, si le processus échoue, lorsque ce thread redémarre, il continuera le processus de distribution. Les données peuvent ne pas exister dans tous les endroits où vous le souhaitez, mais rien ne serait perdu.
Une solution basée sur FOSS serait très utile. – peakit
JBoss Transaction Manager est open source et peut être utilisé sans nécessiter le conteneur JBoss entier. – SteveD
Et vos deux bases de données doivent prendre en charge XA - tout le monde ne le fait pas et leur niveau de stabilité/fonctionnalité peut être une source de préoccupation. – SteveD