Двухфазная фиксация между разными технологиями (COM +, Java) - PullRequest
0 голосов
/ 08 декабря 2010

Позвольте мне сначала немного описать текущую архитектуру:

Приложение A - это Java-приложение, работающее в JBOSS и имеющее собственную базу данных (mssql).

Приложение B - это приложение COM +, работающее на компьютере с Windows, которое также поддерживается собственной базой данных (mssql).

Для определенных бизнес-требований приложение A должно вызывать приложение B. Для этой цели COM-прокси устанавливается на одном компьютере с приложением A (то есть на компьютере JBOSS). Интерфейс JNI позволяет нам совершать вызов из Приложения A -> B.

Это то, что мы имеем сегодня, и оно отлично работает. Теперь появилось новое бизнес-требование, и необходимо реализовать функциональность двухфазной фиксации следующим образом:

Будет создано новое приложение C (возможно, приложение .net), которое будет поддерживаться своей собственной базой данных. Приложение C будет находиться на третьем сервере (не на нашем сайте).

Приложение C вызывает приложение A в транзакции. Приложение A должно выполнить некоторые действия после учета встроенной бизнес-логики. Действия включают записи в базу данных приложения A и вызов приложения B. Приложение B выполняет дополнительные действия (для базы данных приложения B). Приложение C обновляет свою базу данных на основе полученных отзывов. Теперь, если все действия выполнены успешно, изменения фиксируются в базах данных, в противном случае эти действия являются откатом.

Вопрос прост (думаю, ответ более сложный). Возможно ли это, учитывая различные технологии, поддерживающие каждое приложение? Я прекрасно понимаю, что если все приложения были написаны в .Net или как приложения COM +, это возможно. Замена компонентов Java другой технологией на данный момент невозможна. Есть идеи?

Мы проверили JNBridge, но я не думаю, что он может обеспечить то, что мы хотим. Было бы хорошо, если бы приложение C не было проблемой.

Любые идеи / решения приветствуются. Какие, по вашему мнению, лучшие варианты?

1 Ответ

2 голосов
/ 08 декабря 2010

Могут ли ваши платформы поддерживать интерфейс веб-службы WS-AtomicTransaction?Взаимодействие Java / .NET с этим стандартом возможно с продуктами некоторых производителей.Это может дать истинный 2PC.

Однако, как бы вы ни делали 2PC, не будет затрат на производительность и сложность.Посмотрите очень внимательно на сопутствующие последствия этой архитектуры: особенно на решение проблем, когда сбои происходят во время фазы разрешения 2PC.Блокировки не могут быть безопасно удалены до тех пор, пока не разрешатся сомнительные транзакции - в некоторых сценариях сбоев это может быть довольно длительный период.

Очень часто вы можете перестроить проблему так, что вам фактически не нужен 2PC -там очень много дел без 2PC.

...