2010-06-28 14 views

Respuesta

0

Si su modelo está en el nivel correcto de abstracción, declarar unos pocos métodos sincronizados debe cuidar la integridad.

Si es absolutamente necesario compartir bloqueos de archivos entre las JVM o procesos pesados, es posible que desee ver en java.util.concurrent.locks.ReentrantReadWriteLock o java.nio.channels.FileLock (desde el JavaDoc):

Esta API de bloqueo de archivos está destinada a asignar directamente a la instalación de bloqueo nativo del sistema operativo subyacente. Por lo tanto, los bloqueos retenidos en un archivo deben estar visibles para todos los programas que tienen acceso al archivo, independientemente de el idioma en el que se escriben esos programas .

Ah, y Java: thread-safe RandomAccessFile sin duda alguna merece atttention.

2

¿Cuáles son exactamente los problemas que ha encontrado? ¿Necesita soporte completo de ACID, con aislamiento de transacción concurrente, reversión, etc. ¿O solo "necesita" un poco más de solidez para lidiar con algunos tipos de fallas? La solución dependerá de sus requisitos.

Aquí hay, sin embargo, una lista de marcos que abordan el problema del sistema de archivos transaccional.

Si su aplicación se ejecuta en un servidor de aplicaciones Java EE , puede echar un vistazo a

Para llanura de Java, puede echar un vistazo a

En general, tener un sistema de archivos transaccional es complicado. De lo contrario, puede crear un diseño usted mismo para proporcionar cierta solidez. Aquí está an answer donde dibujo un diseño que proporciona generalmente suficiente robustez. Asegúrese también de comprender cómo funciona el lavado (por ejemplo, FileOutputStream.flush) con la API java File para aumentar la robustez. Si desea ACID completo solidez, es casi más fácil almacenar los datos en una base de datos.

Una vez más, la solución dependerá del nivel exacto de robustez que necesite.Algunos problemas pueden abordarse en el nivel de diseño (bloqueos, color, etc.), algunos requerirán que una biblioteca de terceros tenga transacciones reales.

relacionadas:

0

Como que busca tener transacciones (con propiedades ACID) más de los sistemas de archivos, XADisk puede ser útil para usted . En lugar del RandomAccessFile que mencionó, utiliza FileChannel (Java NIO) internamente.

Háganme saber si tiene alguna pregunta.

Gracias, Nitin

Cuestiones relacionadas