Propagation des transactions Oracle entre C ++ et Java



Answers

J'utilise Hazlecast Messaging et Distributed Memory Locks pour résoudre certains de ces problèmes, mais l'utilisation d'un tel outil nécessiterait que vous réinstallez votre logiciel dans les parties où vous touchez les mêmes données. Client client C ++ ici Client Java ici

Oracle a également un produit similaire appelé Oracle Coherence qui peut vous aider, voir le verrouillage dans le guide de dev.

La base de données contient également un système MQ appelé Oracle Streams Advanced Queuing (files d'attente persistantes transactionnelles) qui peut vous aider dans certaines situations. Oracle AQ s'intègre bien aux déclencheurs Oracle.

De plus, il y a la notification de modification de la base de données qui peut vous aider à mettre à jour les caches ou à notifier les processus de mise à jour, cela peut être utilisé avec le motif Optimistic Offline Lock .

Voir aussi Mémoire transactionnelle logicielle

Apache Zookeeper peut également vous aider avec le verrouillage distribué.

Question

Nous avons une application C ++ existante que nous allons progressivement remplacer par un nouveau système basé sur Java. Jusqu'à ce que nous ayons complètement réimplémenté tout en Java nous nous attendons à ce que le C ++ et Java aient à communiquer entre eux (RMI, SOAP, messagerie, etc - nous n'avons pas décidé).

Maintenant, mon manager pense que nous aurons besoin des côtés Java et C ++ pour participer à la même transaction DB Oracle. Ceci est lié à, mais différent du problème habituel de transaction distribuée consistant à avoir un processus unique de coordonner 2 ressources transactionnelles, telles qu'un DB et une file d'attente de messages.

Je pense que la propagation d'une transaction entre les processus est une idée terrible du point de vue de la performance et de la stabilité, mais on me demandera toujours une solution.

Je suis familier avec les transactions XA et j'ai travaillé avec JBoss Transaction Manager, mais mon googling n'a rien trouvé de bon pour propager une transaction XA entre deux processus.

Nous utilisons Spring sur le côté Java et leur documentation indique explicitement qu'ils ne fournissent aucune aide pour la propagation des transactions.

Nous ne prévoyons pas d'utiliser un serveur Java EE traditionnel (par exemple: IBM Websphere), qui peut prendre en charge la propagation (pas que je puisse trouver une documentation définitive).

Toute aide ou indication sur les solutions est grandement appréciée.




Links