在 Jackrabbit 中,我经历了两种将 POJO 保存到存储库节点中以存储在 Jackrabbit JCR 中的方法:
- 写我自己的层
和
- 使用 Apache Graffito
事实证明,编写我自己的代码既耗时又费力(必须编写并运行大量丑陋的自动化测试),尽管相当灵活。
使用 Graffito 令人失望,因为它似乎是一个“死”项目停留在2006年 http://incubator.apache.org/graffito/news.html
有哪些更好的选择?
另一种选择是完全跳过 OCM 框架并简单地使用javax.jcr.Node
作为一个非常灵活的 DAO 本身。 OCM 框架存在的根本原因是因为使用 RDBMS,您需要从对象到关系模型的映射。有了JCR,它已经非常面向对象(节点〜=对象),这个根本原因就消失了。剩下的就是,使用 DAO,您可以限制程序员可以在其代码中访问的内容(包括自动完成的帮助)。但这种方法并没有真正利用 JCR 概念,这意味着无模式且灵活的编程。直接在代码中使用 JCR API 是遵循该概念的最佳方式。
想象一下,您想要在应用程序生命周期的后期向现有节点/对象添加新属性 - 使用 OCM 框架,您还必须修改它并确保它仍然正常工作。通过直接访问节点,只需进行单点更改。我知道,这是解决例如拼写错误问题的好方法。财产名称;但这种担心并没有真正得到现实的支持,因为在大多数情况下,当您测试应用程序时,您很快就会注意到拼写错误或不匹配的名称。一个好的解决方案是使用字符串常量作为公共节点或属性名称,即使作为 API 的一部分(如果您在它们之间公开 JCR API)也是如此。这仍然使您可以灵活地快速添加新属性,而无需采用 OCM 层。
为了对允许的内容或强制的内容(即“半模式”)进行一些限制,您可以使用节点类型和混合(从 JCR 2.0 开始,您还可以更改现有内容的节点类型):因此您可以完全处理这个问题在存储库级别,除了捕获异常之外,不必关心应用程序代码中的类型和约束;-)
但是,当然,这种选择取决于您的要求和个人喜好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)