2011-01-13 23 views
6

Nếu có ai đó thực hiện ghi giao dịch vào tệp, vui lòng, hỗ trợ tôi.
Chủ đề liên quan đã được thảo luận trong chủ đề trước (transactional write).Giao dịch Apache: ghi tệp giao dịch - cách sử dụng tài nguyênId

Sử dụng trường hợp là như sau:
nếu bằng văn bản cho đăng nhập tập tin được thất bại, mà giao dịch DB thích hợp shoud được cuộn lại.

Vì vậy, việc ghi tệp cần được thực hiện theo cách giao dịch.

Tôi đã chọn Apache Commons Transaction lib.
Và có vấn đề, điều đó không cho phép tôi đi xa hơn, bởi vì không tìm thấy tài liệu hoặc ví dụ thích hợp.

Tôi đã tạo ra thể hiện của FileResourceManager:

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

Theo tôi được biết từ Apache Commons Transaction tutorial này, tôi nên thực hiện theo các bước:

  1. bắt đầu giao dịch:
    frm.start();

  2. get giao dịch Id cho nó:
    transactionId = frm.generatedUniqueTxId();

  3. cuộc gọi phương pháp, đó là cần thiết, ví dụ writeResource với transactionId và RESOURCEID:
    frm.writeResource(transactionId, resourceId);

Và đây là mơ hồ:
a) làm thế nào tôi có thể kết nối resourceId với tài nguyên thực tế, rằng tôi nên viết transactioanally?
b) làm thế nào để tập tin của tôi, mà tôi sẽ viết giao dịch bây giờ sẽ về resourceId?

Cảm ơn bạn đã tư vấn.

Trả lời

4

Khi không có ai trả lời, tôi cố gắng làm điều đó từ trải nghiệm mới nhất của tôi.

documentataion hữu ích:
example2(.ppt)

thuật toán đơn giản trông giống như (trên thực tế, được miêu tả trong example2):
1. khởi FileResourceManager
2. bắt đầu FileResourceManager
3. get giao dịch Id từ phiên bản FileResourceManager
4. bắt đầu giao dịch với Id giao dịch từ bước 3
5. viết tài nguyên bạn cần - ở đây được đề cập viết nó giao dịch
, vì vậy có vẻ như đó là bước chính!
6. cam kết hoặc rollback giao dịch

Lưu ý: RESOURCEID, về tôi hỏi tại, câu hỏi của tôi, chỉ cần tên của tập tin giao dịch là. Việc đặt tên này không mô tả thuộc tính này rất tốt.

Mã, tôi đã sử dụng:

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

Mỗi liên kết duy nhất là chết! Vui lòng cập nhật nếu bạn có thể. Cảm ơn. –

+0

example2 (.ppt) là ok FileResourceManager cập nhật – sergionni