Как справиться с транзакцией для системы баз данных и файловой системы в Java среда EE?

Я храню атрибуты файла (размер, обновляю время …) в базе данных. Таким образом, проблема состоит в том, как справиться с транзакцией для базы данных и файла.

В Java среда EE JTA просто может справиться с транзакцией базы данных. В случае, если, обновляя базу данных успешно, но операционные сбои файла, я должен записать метод отката файлов для этого? Кроме того, операция файла в контейнере EJB нарушает спецификацию EJB.

Каково Ваше мнение?

13
задан Arjan Tijms 10 March 2013 в 10:07
поделиться

4 ответа

Доступ к внешним ресурсам, таким как файловая система, в идеале должен осуществляться через соединитель JCA . Хотя вокруг этого обсуждается несколько сообщений, я так и не нашел готового к использованию соединителя JCA для транзакционного доступа к файловой системе, поэтому я начал писать его:

Что касается других проектов:

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

Другой упрощенный подход, который следует рассмотреть, - использовать SFSB , который записывает в файловую систему. Если вы реализуете интерфейс SessionSynchronization , вы получите обратные вызовы beforeCompletion и afterCompletion . Последний указывает, была ли транзакция зафиксирована или отменена, и при необходимости вы выполняете очистку. Затем вы можете реализовать транзакционное поведение.

5
ответ дан 2 December 2019 в 00:58
поделиться

JTA не просто для баз данных, его можно долго использовать с любым другим ресурсом, если этот ресурс поддерживает транзакцию XA. Например, XADisk позволяет одну такую ​​интеграцию файловых систем с транзакциями XA. Следовательно, он также может решить проблему согласованности файловой системы и базы данных, которую вы пытались решить.

Надеюсь, что это поможет.

Нитин

4
ответ дан 2 December 2019 в 00:58
поделиться

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

3
ответ дан 2 December 2019 в 00:58
поделиться

Возможно, посмотрите на commons-transaction для транзакционного доступа к файлам. См.:

В любом случае, вам придется писать файлы вне контейнера EJB или взаимодействовать с JCA-коннектором, как указал @ewernli.

0
ответ дан 2 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: