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

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

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

так writinig к файлу должен быть выполнен в путь.

Я выбрал Apache Commons Сделки lib.
И есть проблема,которая не позволяет мне идти дальше, потому что не нашли соответствующей документации или примеров.

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

FileResourceManager frm = новый FileResourceManager("c:cur", "c:cur", правда, регистратор);

как я понимаю из этого Apache Commons Transaction tutorial,Я должен реализовать следующие шаги:

  1. запуск сделки:
    frm.start();

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

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

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

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

1 ответов


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

полезная documentataion:
Пример 2(.ppt)

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

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

код, я использовал:

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");
    }
}