|
|
1
15
另一种选择是完全跳过OCM框架,直接使用
想象一下,你想在应用程序的生命周期后期向现有节点/对象添加一个新属性——使用OCM框架,你也必须修改它,并确保它仍然正常工作。通过直接访问节点,它只是一个单一的变化点。我知道,这是解决例如房产名称拼写错误问题的好方法;但这种担忧并没有得到现实的支持,因为在大多数情况下,当你测试你的应用程序时,你会很快注意到拼写错误或名称不匹配。一个好的解决方案是为公共节点或属性名称使用字符串常量,即使是作为API的一部分,如果您在它们之间公开JCR API。这仍然为您提供了快速添加新属性的灵活性,而无需采用OCM层。 对于允许什么或强制什么有一些约束(即“半模式”),您可以使用节点类型和混入(自JCR 2.0以来,您还可以更改现有内容的节点类型):因此,您可以在存储库级别完全处理这一点,而不必关心应用程序代码中的类型和约束——除了捕获异常;-) 但是,当然,这个选择取决于你的要求和个人喜好。 |
|
|
2
2
你可能想看看 Jackrabbit OCM 那是活着的,踢球的。当然,另一种方法是手动序列化/反序列化POJO。为此,有许多不同的选择。问题是您是否需要修复模式来查询JCR中的对象。如果你只想序列化为XML,那么 XStream 这是一种非常无痛的方法。如果你需要一个更固定的模式,还有 Betwixt Apache Commons。 |
|
|
3
1
这取决于你的需求。当您直接使用javax.jcr.node时,这意味着您的代码与底层机制严重耦合。在中型甚至一些小型项目中,这不是一个好主意。显然,问题将是如何从节点转到自己的域模型。这个问题与从Jdbc ResultSet到您自己的域模型非常相似。请注意,从技术角度来看,问题是相似的。从功能的角度来看,使用JDBC和JCR之间存在巨大差异。 另一个决定因素是您是否可以在JCR内容中强加一个结构。一些应用程序域可以(但仍然比JDBC更好地与JCR匹配),在其他域中,内容本质上可能是高度非结构化的。在这种情况下,OCM显然是矫枉过正。我仍然建议围绕javax.jcr.*类编写自己的包装层。 |
|
|
4
1
还有 https://github.com/ilikeorangutans/omf ,JCR映射器的一个非常灵活的对象。不幸的是,它还没有写支持。然而,我们在大型CMS安装中成功地使用了这个框架。 |
|
|
5
1
还有JCROM项目 http://code.google.com/p/jcrom/ 该项目沉寂了几年,但截至2013年夏天,已经有了一些新版本。 |
|
|
reencode · Magnolia CMS 5.5全文搜索 9 年前 |
|
|
Syed · JCR(JackRabbit)查询返回空结果 11 年前 |
|
|
nico1510 · 上传/下载博客Jackrabbit 13 年前 |