Question

Si quelqu'un a mis en œuvre l'écriture transactionnelle au dossier, s'il vous plaît, aidez-moi.
Sujet connexe a été discuté dans le fil plus tôt ( transactionnel écriture).

Cas d'utilisation est le suivant:
si l'écriture dans le fichier journal est échoué, cette transaction appropriée DB qui devraient être annulées.

Ainsi, le writinig au fichier doit être effectué de manière transactionnelle.

J'ai choisi Apache Commons Transaction lib.
Et avoir problème, cela ne me laisse pas aller plus loin, parce que n'ont pas trouvé de documents appropriés ou des exemples.

J'ai créé instance de FileResourceManager:

  

FileResourceManager FRM = new   FileResourceManager ( "c: \ roquet",   "C: \ cur", vrai, enregistreur);

Si je comprends bien tutoriel de cette Apache Commons Transaction , i devrait mettre en œuvre les étapes ci-dessous:

  1. démarrer la transaction:
    frm.start();

  2. get ID de transaction pour elle:
    transactionId = frm.generatedUniqueTxId();

  3. procédé d'appel, ce qui est nécessaire, par exemple, writeResource avec transactionId et resourceId:
    frm.writeResource(transactionId, resourceId);

Et voici l'ambiguïté:
a) comment puis-je resourceId connexion avec des ressources réelles, que je devrais écrire transactioanally?
b) comment faire mon dossier, que je vais écrire transactionnellement va maintenant au sujet resourceId?

Nous vous remercions de conseiller.

Était-ce utile?

La solution

En réponse loin de personne, j'essaie de faire ma dernière expérience.

documentataion utiles:
Example2 (.ppt)

algorithme simplifié ressemble (en fait, représenté en Example2):
1. initialize FileResourceManager
2. FileResourceManager commencer 3. transaction obtenir Id de
exemple FileResourceManager 4. transaction commencer par transaction Id de l'étape 3
. 5 write ressources dont vous avez besoin - ici est mentionné l'écrire transactionnellement , donc semble que ce soit la principale étape
6. commit ou rollback transaction

Remarque: resourceId , à propos de j'ai demandé, ma question, est tout simplement nom fichier transactionnel . Cette appellation ne représente pas très bien cet attribut.

Code, j'utilisé:

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");
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top