我们正在开发一个基于JCR/Sling/JSP/Felix/等的CMS。
到目前为止,我发现使用节点是非常直接和灵活的。但我担心的是,随着时间的推移,它可能会变得太难维护和管理。
那么,投资使用OCM是明智的吗?这会不会只是一层额外的复杂性?如果有的话,OCM的真正好处是什么?或者对我们来说,更好的做法是坚持使用节点?
最后,如果我们要沿着这条路走下去,Jackrabbit是不是我们的最佳选择?
谢谢。
发布于 2013-05-19 05:16:20
根据我的个人经验,我可以说这完全取决于你的情况,OCM对你的项目是否是一个有用的工具。
使用OCM的真正问题(根据我的个人经验)是,当存储库中现有持久化数据(作为对象)中使用的类的定义发生更改时。例如:您发现有必要更改类的某些成员和方法以与功能更改相匹配。我的意思是,存储库中持久化数据对象的类定义不再与实际类的定义相匹配。当持久化数据保存到jcr存储库时,它通常以java在序列化方面理解的格式保存。这意味着当所用类的定义发生变化时,java不能再正确地解释存储库中保存的数据。这个问题往往会导致复杂的部署,您需要将旧的持久化数据对象转换为新的定义,并将它们再次保存在存储库中,以确保您仍然可以使用“旧的”但仍然需要的持久化数据。
(在我看来)真正起作用的是使用一个框架,该框架允许将节点和节点属性直接映射到java对象(例如,通过使用注释),反之亦然(将java对象作为JCR节点持久存储到存储库,其中java成员字段是实际的节点属性)。这样,您就可以坚持使用jcr (带属性的节点)的数据表示形式,并且仍然可以将它们映射到java类的成员。
我以前在cms (Adobe的)中使用过这样的框架,尽管我必须指出这是在OSGI上下文中(但原理仍然存在)。所使用的框架基本上允许最大限度的灵活性,并将java对象持久化为JCR节点,反之亦然。因为它直接映射到jcr定义,所以类和成员中的代码更改只是更改注释,旧的持久化数据仍然是可用的,而不需要做太多工作。
https://stackoverflow.com/questions/16623514
复制相似问题