2016-07-16 7 views
0

Мне нужно написать код, который использует сторонний код (не может изменить код). В моем коде я хочу использовать JTA (на JBoss), чтобы обеспечить все или ничего для всех операций в моем коде (методе). Одна из этих операций - это вызов стороннего API, который выполняет фактическую операцию сохранения/обновления в БД с локальной транзакцией и с собственным подключением к SQL. После этого у меня есть другие операции, такие как запись в поток вывода и многое другое, но я хочу иметь возможность откатить работу БД (стороннего API), если не все последующие операции выполняются. Могу ли я это сделать? Я имею в виду, может ли моя пользовательская транзакция взять под контроль локальную транзакцию третьей стороны?может пользовательская транзакция берет контроль над локальной транзакцией

ответ

0

Внутри области JTA Я вызову сторонний API, который выполняет фактическую операцию сохранения/обновления в БД с локальной транзакцией и своим собственным SQL-соединением. Я могу сделать это ?

Я думаю, что это возможно, но если это одна и та же таблица и те же таблицы, которые используются в обоих случаях, вам может потребоваться обновить данные в транзакции JTA.

Я имею в виду, может ли моя пользовательская транзакция взять под контроль стороннюю локальную транзакцию?

Это зависит от того, создает ли ваш сторонний код обязательную собственную транзакцию (начало и фиксация). Если это так, JTA не может взять под контроль транзакцию третьей стороны, потому что спецификация не позволяет это делать.

Однако менеджер транзакций Java EE имеет одно ограничение: он не поддерживает вложенные транзакции. Другими словами, он не может запустить транзакцию для экземпляра до окончания предыдущей транзакции. https://docs.oracle.com/cd/E19798-01/821-1841/bnciz/index.html

 Смежные вопросы

  • Нет связанных вопросов^_^