serialization - 将我的 POJO 保存到 Jackrabbit JCR 的最佳方法是什么?

标签 serialization jackrabbit jcr

在 Jackrabbit 中,我体验了两种将 POJO 保存到存储库节点以存储在 Jackrabbit JCR 中的方法:

  • 写我自己的层
  • 使用 Apache Graffito

  • 事实证明,编写我自己的代码既费时又费力(不得不编写和运行许多丑陋的自动化测试),但非常灵活。

    使用 Graffito 令人失望,因为它似乎是一个“死”的项目 stuck in 2006

    有哪些更好的选择?

    最佳答案

    另一种选择是完全跳过 OCM 框架并简单地使用 javax.jcr.Node作为一个非常灵活的 DAO 本身。 OCM 框架存在的根本原因是,使用 RDBMS,您需要从对象到关系模型的映射。使用 JCR,它已经非常面向对象(节点 ~= 对象),这个根本原因就没有了。剩下的就是使用 DAO,您可以限制程序员可以在其代码中访问的内容(包括自动完成的帮助)。但是这种方法并没有真正利用 JCR 概念,这意味着无模式和灵活的编程。直接在您的代码中使用 JCR API 是遵循该概念的最佳方式。

    想象一下,您想在应用程序生命周期的后期向现有节点/对象添加新属性 - 使用 OCM 框架,您还必须修改它并确保它仍然正常工作。通过直接访问节点,它只是一个单点更改。我知道,这是解决例如拼写错误问题的好方法。属性名称;但是这种恐惧并没有真正得到现实的支持,因为在大多数情况下,当您测试您的应用程序时,您会很快注意到拼写错误或不匹配的名称。一个好的解决方案是为公共(public)节点或属性名称使用字符串常量,即使您在它们之间公开 JCR API,也可以将其作为 API 的一部分。这仍然使您可以灵活地快速添加新属性,而无需采用 OCM 层。

    为了对允许或强制(即“半模式”)有一些限制,您可以使用节点类型和混合(从 JCR 2.0 开始,您还可以更改现有内容的节点类型):因此您可以完全处理这个在存储库级别,不必关心应用程序代码中的类型和约束——除了捕获异常;-)

    但是,当然,这种选择取决于您的要求和个人喜好。

    关于serialization - 将我的 POJO 保存到 Jackrabbit JCR 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/370557/

    相关文章:

    java - Apache Spark Lambda 表达式 - 序列化问题

    java - 反序列化对象时出现 StreamCorruptedException

    java - 如何学习使用内容存储库和 Apache JackRabbit?

    java - BeanWriter 不工作 - java.lang.NullPointerException

    java - 将 blob 从数据库迁移到 jackrabbit 中的文件系统

    java - ADOBE CQ5 JCR - 如何使用节点属性对查询生成器结果进行排序/排序

    php - 这个对象怎么可能是对象而不是对象呢?

    java - 如何将可序列化对象写入字符串而不写入文件?

    JackRabbit - 删除重复行

    java - Jackrabbit 2.6.0 与 Java 6 的兼容性