Java和Spring中的JCR是什么?

3

我已经学习了3个月的Java Spring Hibernate MVC,并且对此有了很好的理解。但是,我不明白JCR是什么意思。

我的意思是,在我的简单Spring MVC网站中,哪些部分可以使用JCR来完成。

3个回答

7
JCR是替代JPA(Hibernate)的另一种持久性机制,它将JDBC隐藏在应用程序之外。理论上,您现有模型中的Java类可能保持不变。但是,如果您的模型中有任何类仅因为需要为JPA建模一些较低级别的数据结构而产生,则这些类在使用JCR时可能不再需要。
您需要一个充分的理由来用JCR取代现有的JPA。例如,您可能已经发现使用JPA需要跳过很多额外的步骤并做一些您实际上不需要做的事情。
话虽如此,JCR确实具有一些优点和功能,这些优点和功能在JPA中没有:
  1. JCR支持结构化数据、非结构化数据和介于两者之间的所有内容。JCR允许灵活的架构,并且可以非常类似于NoSQL。而JPA则非常结构化,具有固定的架构。
  2. JCR是分层的——某些用例非常分层,用关系模型实现这一点可能非常困难和昂贵。
  3. JCR内置事件
  4. 大多数JCR实现可以将内容存储在各种系统中。有些甚至可以访问和联合其他系统中的现有内容。
  5. 字符串值没有长度限制
  6. JCR支持全文搜索
  7. JCR具有多种查询语言,包括JCR-SQL2(非常类似于SQL)
  8. 有一些库将Java类映射到节点结构中,因此非常类似于JPA/Hibernate
一切都取决于这些特性是否对您的应用程序有益。

Randall:你能告诉我更多关于你在第8点提到的API的信息吗?那些将Java类映射到节点的API。 - Oliver
1
有一些库可以映射Java对象和JCR节点:Chromattic(https://code.google.com/p/chromattic/)和Jackrabbit OCM(http://jackrabbit.apache.org/object-content-mapping.html)是我熟悉的两个。个人而言,我不喜欢或推荐这种框架,因为它基本上将您的节点模式绑定到Java代码,使得在JCR中使用强大的模式灵活性非常困难(参见上面的第1点)。 - Randall Hauch

4
Java内容库(JCR)试图以一种与实现无关的方式解决这些问题(以及其他许多问题); 也就是说,API将不受基础资源(例如数据库,本地或虚拟文件系统等)的影响而保持相同。作为数据存储的顶层,JCR提供内容服务,如细粒度访问控制、版本控制、内容事件、全文搜索和过滤等。在由Day Software领导的JSR-170背后有一个令人印象深刻的专家小组,包括Vignette、Hummingbird Ltd.、Stellent等内容管理系统(CMS)供应商以及BEA Systems、IBM和Oracle等通常的Java驱动解决方案提供商,该规范很可能成为内容管理和文档存储的事实标准。

抱歉,我无法完全理解你的意思。我的意思是,例如我使用Spring MVC、MySQL和Hibernate构建了一个简单的5页网站,并且它正在运行。在这种情况下,JCR的作用是什么?我的意思是,如果我想要使用它,它会为我的当前网站增加哪些额外功能? - John

4

关于何时使用JCR和关系型数据模型的决策,请查看david's model。对我来说,这是一次启发性的经历...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接