2010-12-07 6 views
0

Laissez-moi tout d'abord décrire un peu l'architecture actuelle:en deux phases entre les différentes technologies (COM +, Java)

application A est une application java en cours d'exécution dans JBOSS et a sa propre base de données (MSSQL).

L'application B est une application COM + s'exécutant sur une machine Windows qui est également prise en charge par sa propre base de données (mssql).

Pour certaines exigences métier, l'application A doit appeler l'application B. Dans ce but, un proxy COM est installé sur la même machine avec l'application A (c'est-à-dire la machine JBOSS). Une interface JNI nous permet d'appeler depuis l'application A -> B.

C'est ce que nous avons aujourd'hui et cela fonctionne parfaitement. Maintenant, une nouvelle exigence métier a émergé, et il est nécessaire de mettre en œuvre une fonctionnalité de validation en deux phases:

Une nouvelle application C va être créée (éventuellement une application .net) qui va être supportée par sa propre base de données. L'application C va reposer sur un troisième serveur (pas sur notre site).

L'application C appelle l'application A dans une transaction. L'application A doit effectuer certaines actions après avoir pris en compte la logique métier intégrée. Les actions incluent des écritures dans l'application Une base de données et un appel à l'application B. L'application B effectue des actions supplémentaires (dans la base de données de l'application B). L'application C met à jour sa base de données en fonction des commentaires reçus. Maintenant, si toutes les actions réussissent, les modifications sont validées dans les bases de données, sinon les actions sont annulées.

La question est simple (la réponse est plus compliquée je pense). Est-ce faisable, compte tenu des différentes technologies supportant chaque application? Je comprends parfaitement que si toutes les applications ont été écrites en .Net ou en tant qu'applications COM +, c'est faisable. Le remplacement des composants Java par une autre technologie n'est pas une option viable à ce stade. Des idées?

Nous avons vérifié JNBridge mais je ne pense pas qu'il puisse fournir ce que nous voulons. Ce serait bien si l'application C n'était pas un problème.

Toutes les idées/solutions sont les bienvenues. Quelles sont les meilleures options à votre avis?

Répondre

2

Vos plates-formes peuvent-elles prendre en charge une interface de service Web WS-AtomicTransaction? Java/.NET interop avec cette norme est possible avec certains produits des fournisseurs. Cela pourrait donner vrai 2PC.

Cependant, peu importe comment vous faites 2PC il y aura des coûts de performance et de complexité. Regardez très attentivement les implications de couplage de cette architecture: en particulier à la résolution de problèmes lorsque des défaillances se produisent pendant la phase de résolution 2PC. Les verrous ne peuvent pas être supprimés en toute sécurité tant que les transactions en attente ne sont pas résolues - dans certains scénarios de défaillance, cette période peut être assez longue.

Très souvent, vous pouvez réorganiser un problème de sorte que vous n'avez pas vraiment besoin de 2PC - il y a énormément de choses à faire sans 2PC.

+1

Notez que bien que l'application JBoss puisse prendre en charge WS_AT, le véritable problème serait le flux de la transaction vers le composant COM (application A -> application B). Pour autant que je sache, il n'y a pas de support MS DTC pour MySQL. Cela signifie que l'application JBoss devra créer le contexte de la transaction locale par le biais d'un autre coordinateur de transactions capable de dialoguer avec MS DTC, et de le passer à MySQL pour qu'il puisse également s'enrôler. Cela augmenterait la complexité. Bien qu'il soit tout à fait possible, JBoss a déjà un coordinateur de transaction qui peut travailler avec DTC. –

+0

merci de répondre. c'est mssql des deux côtés. J'ai édité la question. – yioann