【问题标题】:Application Data Persistence Framework/Library?应用程序数据持久性框架/库?
【发布时间】:2025-12-04 01:55:02
【问题描述】:

我们的 Java 桌面应用程序正在管理由用户编辑的多个文本文件。

目前,这些文件使用内部 Java 代码保存到文件系统中。我们希望摆脱这一点,转而使用现有的框架/库(最好是开源的);如果能够在运行时配置实际的持久存储,那就太好了:“文件系统”与“数据库”。

除了 JCR 实现(例如 JackRabbit)之外,还有其他可能的解决方案吗?关于将 JCR 用于我们的用例的任何反馈/建议?

谢谢。

【问题讨论】:

    标签: java jcr data-persistence


    【解决方案1】:

    JCR 存储库的一个好处是,它将应用程序从数据持久化的方式中抽象出来,但仍提供分层组织、查询、搜索、事件等。

    ModeShape 是一个 JCR 实现,它在数据存储方式方面提供了极大的灵活性。它的connectors 允许访问和/或存储文件系统上的内容(twochoices),relational database(支持许多 DBMS),data grid(例如,Infinispan),@ 987654327@,组合使用(通过federation),甚至in-memory(用于较小、不太重要的用途)。 ModeShape 可以使用fluent programmatic API 进行配置,但是一旦启动引擎,您就无法更改连接器。

    (完全披露:我是项目负责人。)

    因此,对于您在文件系统上存储文件的用例,通过 ModeShape 及其文件系统连接器,您的应用程序可以使用 JCR API 访问(和操作)文件和文件夹的现有结构,同时让其他应用程序仍然可以通过文件系统访问相同的文件和文件夹。使用此连接器,您的应用程序可以选择在文件和文件夹节点上store extra properties,但您只能创建文件和文件夹节点。

    您的用例的另一个选择是使用 ModeShape 的磁盘连接器,它允许您的应用程序创建文件、文件夹和其他内容并将信息存储在磁盘上。这个连接器比文件系统连接器功能强大得多,因为它可以存储任何内容(而且速度非常快)。它还将存储库内容作为文件保存在文件系统上,但它使用的结构与存储库的组织方式不同。 IOW,磁盘连接器的设计并不是为了让其他应用程序可以使用文件系统来访问您存储在存储库中的文件。如果后者并不重要,并且您只是在寻找一种在文件系统上管理和存储内容的方法,那么磁盘连接器将是一个很好的选择。

    【讨论】: