2011-01-13 14 views
6

Si alguien implementó la escritura transaccional en el archivo, por favor, ayúdeme.
El tema relacionado se trató en el hilo anterior (transactional write).Apache Transaction: escribir archivo de forma transaccional: cómo usar resourceId

Caso de uso es el siguiente:
si escribir el archivo de registro se falla, esa transacción DB apropiada shoud ser revertido.

Por lo tanto, la escritura en el archivo debe realizarse de forma transaccional.

He elegido Apache Commons Transaction lib.
Y tienen un problema, eso no me deja ir más allá, porque no he encontrado la documentación adecuada o ejemplos.

He creado instancia de FileResourceManager:

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

Según entiendo de esta Apache Commons Transaction tutorial, I deberían cumplir los siguientes pasos: transacción

  1. inicio:
    frm.start();

  2. transacción get Id por ella:
    transactionId = frm.generatedUniqueTxId();

  3. llamada método, que es necesario, por ejemplo WriteResource con transactionId y resourceId:
    frm.writeResource(transactionId, resourceId);

Y aquí es la ambigüedad:
a) ¿cómo puedo conectar con resourceId real de recursos, que debería escribir transactioanally?
b) ¿cómo mi archivo, que voy a escribir de forma transaccional ahora será de aproximadamente resourceId?

Gracias por su asesoramiento.

Respuesta

4

Como nadie responde, trato de hacerlo desde mi última experiencia.

documentataion útil:
example2(.ppt)

algoritmo simplificado parece (en realidad, representado en example2):
1. inicializar FileResourceManager
2. inicio FileResourceManager
3. transacción get Id de instancia de FileResourceManager
4. iniciar la transacción con la transacción Id del paso 3
5. escriba recurso que necesita - aquí se lo menciona escríbalo transaccionalmente
, ¡así que parece que es el paso más importante!
6. confirmación o retrotracción de transacciones

Nota: ResourceID, le pregunté acerca de, mi pregunta, es simplemente nombre de archivos transaccional. Esta denominación no representa muy bien este atributo.

Código, he utilizado:

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

Cada enlace está muerto! Por favor, actualiza si puedes. Gracias. –

+0

example2 (.ppt) está bien FileResourceManager actualizado – sergionni

Cuestiones relacionadas