Lassen Sie mich zunächst ein bisschen die aktuelle Architektur beschreiben:Zwei-Phasen-Commit zwischen verschiedenen Technologien (COM +, Java)
Anwendung A ist eine Java-Anwendung in JBOSS ausgeführt und verfügt über eine eigene Datenbank (MSSQL).
Anwendung B ist eine COM + -Anwendung, die auf einer Windows-Maschine ausgeführt wird, die auch von einer eigenen Datenbank (mssql) unterstützt wird.
Für bestimmte geschäftliche Anforderungen muss Anwendung A Anwendung B aufrufen. Zu diesem Zweck wird ein COM-Proxy auf der gleichen Maschine mit Anwendung A (d. H. JBOSS-Maschine) installiert. Eine JNI-Schnittstelle ermöglicht es uns, den Aufruf von Anwendung A -> B zu tätigen.
Dies ist, was wir heute haben und es funktioniert perfekt. Nun ist eine neue Geschäftsanforderung entstanden, und es ist notwendig, eine zweiphasige Festschreibungsfunktion wie folgt zu implementieren:
Eine neue Anwendung C wird erstellt (möglicherweise eine .net-Anwendung), die von unterstützt wird eine eigene Datenbank. Anwendung C ruht auf einem dritten Server (nicht auf unserer Seite).
Anwendung C ruft Anwendung A in einer Transaktion auf. Anwendung A sollte einige Aktionen durchführen, nachdem die integrierte Geschäftslogik berücksichtigt wurde. Zu den Aktionen gehören Schreiben an die Anwendung Eine Datenbank und ein Aufruf an Anwendung B. Anwendung B führt zusätzliche Aktionen aus (zur Anwendung B-Datenbank). Anwendung C aktualisiert ihre Datenbank basierend auf empfangener Rückmeldung. Wenn alle Aktionen erfolgreich sind, werden die Änderungen an die Datenbanken übergeben, andernfalls werden Rollbacks ausgeführt.
Die Frage ist einfach (die Antwort ist komplizierter, denke ich). Ist dies angesichts der unterschiedlichen Technologien, die jede Anwendung unterstützen, machbar? Ich verstehe perfekt, dass wenn alle Anwendungen in .Net oder als COM + -Anwendungen geschrieben wurden, dies machbar ist. Das Ersetzen der Java-Komponenten durch eine andere Technologie ist zu diesem Zeitpunkt keine praktikable Option. Irgendwelche Ideen?
Wir haben JNBridge überprüft, aber ich glaube nicht, dass es bieten kann, was wir wollen. Es wäre in Ordnung, wenn Anwendung C kein Problem wäre.
Alle Ideen/Lösungen sind willkommen. Was sind Ihrer Meinung nach die besten Optionen?
Beachten Sie, dass die JBoss-App zwar WS_AT unterstützen könnte, das eigentliche Problem jedoch der Transaktionsfluss von dieser zur COM-Komponente (App A -> App B) wäre. Soweit ich weiß, gibt es keine MS DTC-Unterstützung für MySQL. Das bedeutet, dass die JBoss-App den lokalen Transaktionskontext über einen anderen Transaktionskoordinator erstellen muss, der mit MS DTC kommunizieren kann, und diesen an MySQL weitergeben, damit er sich ebenfalls darin eintragen kann. Das würde die Komplexität erhöhen. Obwohl es durchaus möglich ist, hat JBoss bereits einen Transaktionskoordinator, der mit DTC arbeiten kann. –
danke für die antwort. Es ist mssql auf beiden Seiten. Ich habe die Frage bearbeitet. – yioann