Mi proyecto necesita RandomAccessFile
, y lo he hecho.Pero al probar el acceso Mutiple, se encontraron muchos problemas.No se puede asegurar la seguridad de acceso al archivo, sin semántica ACID.Así que necesito un marco basado en RandomAccessFile
para resolver este problema .¿Existen herramientas o marcos de código abierto en E/S de archivos transaccionales, lenguaje Java?
¿Existen herramientas o marcos de código abierto en E/S de archivos transaccionales, lenguaje Java?
Respuesta
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.
¿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
- JBoss Transactional File I/O, parece prometedor.
- Filera: File resource adapter, pero no creo que sea transaccional
- JCA connector: a file system adapter, mi propia aplicación
Para llanura de Java, puede echar un vistazo a
- commons-transactions, pero me siento al igual que el proyecto está muerto
- tal vez Java Content Repository (JSR-170 y JSR-283), pero es una API de alto nivel
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:
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
- 1. ¿Existen marcos comparables a dynaTrace que sean de código abierto?
- 2. ¿Existe una solución de código abierto para el acceso a archivos transaccionales XA en Java?
- 3. ¿Qué marcos de pruebas de mutaciones existen?
- 4. ¿Mejores herramientas de maqueta (de código abierto/abierto)?
- 5. ¿Es C de código abierto?
- 6. Donaciones para herramientas de código abierto
- 7. ¿Existen servidores de imagen independientes de código abierto de descanso?
- 8. ¿Qué marcos de pruebas de mutaciones existen para C/C++?
- 9. ¿Existen sistemas expertos de código abierto con capacidades de razonamiento?
- 10. ¿Cuál es su herramienta de depuración de código abierto favorita?
- 11. ¿Hay utilidades o jarras de reflexión Java de código abierto?
- 12. ¿Existen herramientas para refactorizar el estilo de codificación de una base de código Java?
- 13. ¿Qué herramientas XSLT 2.0 existen?
- 14. Stemming - ejemplos de código o proyectos de código abierto
- 15. Herramientas de cobertura de código en Java
- 16. ¿Qué herramientas existen para probar el código .net multiproceso?
- 17. análisis de código estático para lenguaje de ensamblaje
- 18. ¿Java es un lenguaje de programación compilado o interpretado?
- 19. Herramientas de código abierto de minería de datos
- 20. ¿Hay algunas bibliotecas de código abierto de CAD en Java?
- 21. ¿ExtJS es de código abierto?
- 22. ¿Qué alternativas existen para la biblioteca de hash perceptual de código abierto de pHash?
- 23. Juegos grandes y/o de código abierto basados en SlimDX
- 24. ¿Existen herramientas de combinación para el control de código fuente que entienden el código?
- 25. Proyectos de código abierto escritos en un lenguaje de programación funcional
- 26. ¿Cuáles son algunas herramientas interesantes, gratuitas y de código abierto de análisis dinámico para Java?
- 27. ¿Existen herramientas que ayuden a organizar #includes?
- 28. ¿Proyectos de código abierto que usan pruebas de BDD?
- 29. ¿Qué herramientas de edición T4 existen?
- 30. ¿Qué herramientas SIG de código abierto usa/recomienda?