Транзакции (свойство атомарности) в EJB 3 применяются только к операциям с базами данных. Я прав? - PullRequest
2 голосов
/ 01 июля 2010

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

Например, если methodOne() methodTwo() methodThree() объединены в одну транзакцию, в случае сбоя любого из методов вся операция откатывается.Откат приведет к откату уровня базы данных, и в результате база данных будет приведена в состояние, как это было до транзакции.

Но что, если методы внесли изменения в переменные состояния или статические переменные?переменные или записанные в некоторые файлы в файловой системе?Насколько я понимаю, «откат» не применяется для таких изменений, не связанных с базой данных, и что эти изменения не отменяются.Правильно ли мое понимание?

Ответы [ 3 ]

4 голосов
/ 01 июля 2010

Транзакции (свойство атомарности) в EJB 3 применяются только к операциям с базами данных - я прав?

Нет, ты не. Транзакции применяются к транзакционным ресурсам , спецификация Java EE распознает три типа транзакционных ресурсов: базы данных JDBC, места назначения JMS и «другие транзакционные сервисы, доступные через JCA».

Но что, если методы внесли изменения в переменные состояния или статические переменные или записали в некоторые файлы в файловой системе?

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

1 голос
/ 01 июля 2010

Ресурсы файловой системы не являются транзакционными.Так что вам придется откатить свои изменения обратно.Или вам нужно взглянуть на адаптеры ресурсов файловой системы, предоставляемые контейнерами.

0 голосов
/ 01 июля 2010

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

Хотя, если ваша СУБД вносит изменения в вашу файловую систему (например, через процедуру хранения), вы должны проверить документацию этой СУБД.1003 *

Итак, прочитайте ваш код, если у вас есть код после команды «START TRANSACTION», вы должны просмотреть его.

...