Apache Transaction: транзакционная запись файла — как использовать resourceId

Если кто-нибудь внедрил транзакционную запись в файл, пожалуйста, помогите мне.
Связанная тема обсуждалась в предыдущем потоке (транзакционная запись).

Пример использования следующий:
если запись в файл журнала не удалась, необходимо отменить соответствующую транзакцию БД.

Таким образом, запись в файл должна выполняться транзакционным способом.

Я выбрал библиотеку Apache Commons Transaction.
я пойду дальше, потому что не нашел подходящей документации или примеров.

Я создал экземпляр FileResourceManager:

FileResourceManager frm = new FileResourceManager("c:\cur", "c:\cur", true, logger);

Насколько я понимаю из этого учебника по транзакциям Apache Commons, я должен выполнить следующие шаги:

  1. начать транзакцию:
    frm.start();

  2. получить для него идентификатор транзакции:
    transactionId = frm.generatedUniqueTxId();

  3. метод вызова, который необходим, например. writeResource с идентификатором транзакции и идентификатором ресурса:
    frm.writeResource(transactionId, resourceId);

И тут неясность:
а) как я могу связать resourceId с реальным ресурсом, который я должен писать транзакционно?
б) как мой файл, который я буду писать транзакционно, теперь будет примерно resourceId?

Спасибо за совет.


person sergionni    schedule 13.01.2011    source источник


Ответы (1)


Пока никто не отвечает, я пытаюсь сделать это из своего последнего опыта.

Полезная документация:
example2(.ppt )

Упрощенный алгоритм выглядит так (собственно, изображен в примере 2):
1. инициализировать
FileResourceManager
2. запустить FileResourceManager
3. получить идентификатор транзакции из экземпляра FileResourceManager
4. начать транзакцию с идентификатором транзакции из шага 3
5. написать нужный вам ресурс - здесь упоминается написать его транзакционно
, похоже, это главный шаг!
6. зафиксировать или откатить транзакцию

Примечание: resourceId, о том, что я задал, мой вопрос, это просто имя транзакционный файл. Это название не очень хорошо отражает этот атрибут.

Код, который я использовал:

private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(FileAppender.class);
private static LoggerFacade loggerFacade = new Log4jLogger(logger);

private static String tempDir = (String) System.getProperties().get("java.io.tmpdir");

private FileResourceManager frm = new FileResourceManager(tempDir, tempDir, false, loggerFacade);
private static OutputStream outputStream;

public void writeOut(E event) throws IOException {
    Object txId = null;
    try {
        frm.start();
        txId = frm.generatedUniqueTxId();
        frm.startTransaction(txId);
        outputStream = frm.writeResource(txId, fileName, true);
        frm.commitTransaction(txId);

    }

    catch (Exception e) {
        throw new IOException("DB rollback");
    }
}
person sergionni    schedule 18.01.2011
comment
Каждая ссылка мертва! Пожалуйста, обновите, если можете. Спасибо. - person Abdullah Khan; 27.07.2017