在事务文件I/O、Java语言方面是否有开源工具或框架?

在事务文件I/O、Java语言方面是否有开源工具或框架?,java,file-io,transactions,Java,File Io,Transactions,我的项目需要RandomAccessFile,我已经做到了。但是在测试多重访问时,发现了很多问题。它无法确保文件访问的安全性,没有酸性语义。因此我需要一个基于RandomAccessFile的框架来解决这个问题。如果您的模型处于正确的抽象级别,声明一些同步方法应该考虑完整性 如果您确实需要在JVM或繁重进程之间共享文件锁,您可能需要查看java.util.concurrent.locks.ReentrantReadWriteLock或java.nio.channels.FileLock(来自Ja

我的项目需要
RandomAccessFile
,我已经做到了。但是在测试多重访问时,发现了很多问题。它无法确保文件访问的安全性,没有酸性语义。因此我需要一个基于
RandomAccessFile
的框架来解决这个问题。

如果您的模型处于正确的抽象级别,声明一些同步方法应该考虑完整性

如果您确实需要在JVM或繁重进程之间共享文件锁,您可能需要查看java.util.concurrent.locks.ReentrantReadWriteLock或java.nio.channels.FileLock(来自JavaDoc):

此文件锁定API旨在 直接映射到本机锁定 基础运营商的贷款 系统。因此,文件上的锁 应该对所有 有权访问该文件,无论 这些程序使用的语言 这些都是书面的


哦,当然值得关注。

你到底遇到了什么问题?您是否需要具有并发事务隔离、回滚等功能的完整ACID支持,还是“只”需要更健壮一点来处理某些类型的故障?解决方案将取决于您的需求

不过,下面列出了一些解决事务性文件系统问题的框架

如果您的应用程序运行在Java EE应用程序服务器上,您可以查看

  • ,看起来很有希望
  • ,但我不认为这是交易
  • ,我自己的实现
对于纯Java,您可以查看

  • ,但我觉得这个项目已经失败了
  • 可能是(JSR-170和JSR-283),但它是一个高级API
一般来说,拥有事务性文件系统是复杂的。否则,您可以自行设计以提供一些健壮性。在这里,我绘制了一个设计图,它通常提供足够的健壮性。还要确保您了解flush(例如,
FileOutputStream.flush
)如何与java
File
API一起工作,以提高健壮性。如果您想要全酸健壮性,那么将数据存储在数据库中几乎更容易

同样,解决方案将取决于您需要的健壮性的确切级别。有些问题可以在设计级别解决(锁、刷新等),有些问题需要第三方库来实现真正的事务

相关的:


当您正在寻找通过文件系统进行事务(具有ACID属性)时,这可能会对您有所帮助。它在内部使用FileChannel(JavaNIO),而不是您提到的RandomAccessFile

如果你有任何问题,请告诉我

谢谢, 尼汀