2011-01-13 10 views
6

Jeśli ktoś zaimplementował zapisywanie transakcyjne do pliku, proszę, pomóż mi.
Temat pokrewny został omówiony we wcześniejszym wątku (transactional write).Transakcja Apache: zapisz plik transakcyjnie - jak korzystać z resourceId

przypadków użycia jest następujący:
jeśli pisanie do pliku dziennika nie powiodła się, że właściwe transakcja DB Powinni zostać wycofana.

Tak więc zapis do pliku powinien być wykonany w sposób transakcyjny.

Wybrałem Apache Commons Transaction lib.
Mam problem, który nie pozwala mi pójść dalej, ponieważ nie znalazłem odpowiedniej dokumentacji lub przykładów.

Utworzono instancję FileResourceManager:

FileResourceManager frm = nowy FileResourceManager ("C: \ bież" "C: \ bież" prawda rejestrator);

Jak rozumiem z tego Apache Commons Transaction tutorial, należy wdrożyć następujące kroki: transakcja

  1. start:
    frm.start();

  2. transakcja get Id do niego:
    transactionId = frm.generatedUniqueTxId();

  3. wezwanie metoda, która jest potrzebna, np writeResource z transactionId i RESOURCEID:
    frm.writeResource(transactionId, resourceId);

I tu jest dwuznaczność:
a) w jaki sposób można połączyć resourceId z prawdziwym zasobem, że powinienem napisać transactioanally?
b) w jaki sposób mój plik, który będę pisać transakcyjnie, będzie teraz miał około resourceId?

Dziękujemy za udzielenie porady.

Odpowiedz

4

Jeśli nikt nie odpowiada, staram się to zrobić z mojego ostatniego doświadczenia.

Przydatne documentataion:
example2(.ppt)

Uproszczony algorytm wygląda (faktycznie, przedstawiony w przyklad2):
1. zainicjować FileResourceManager
2. rozpoczęcia FileResourceManager
3. transakcję get Id z instancji FileResourceManager
4. rozpoczyna transakcję z identyfikatorem transakcji od kroku 3
5. napisz zasób, którego potrzebujesz - tutaj wspomniano napisz to transakcyjnie
, więc wygląda na to, że to duży krok!
6. zobowiązania lub wycofania transakcja

Uwaga: RESOURCEID, o spytałem, moje pytanie jest po prostu nazwa z transakcyjnej pliku. To nazewnictwo nie przedstawia bardzo dobrze tego atrybutu.

kod użyłem:

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

Każdy link jest martwy! Zaktualizuj, jeśli możesz. Dzięki. –

+0

example2 (.ppt) jest ok. Zaktualizowano menedżer plików FileResourceManager – sergionni