JackRabbit的来源
题记
写这系列有点老调重弹的味道,比如ahuaxuan已经在他的博客里对于JackRabbit 1.0做了很详细的阐述。之所以再写,是因为JCR推出了JCR 2.0,个人觉得有必要将一些新的特性再罗列一下。
问题提出
存取各种信息对于任何应用程序来说非常平常,大多数时候我们会把数据保存在关系数据库中。数据库处理规范数据类型十分在行,但是在处理如图像、文档等二进制数据时却不是那么得心应手。
尽管可以用文件系统作为替代——而且它们还提供了更好的性能。但它们既没有提供用于搜索信息的查询语言,也没有提供表示关系或事务的概念。
什么是JSR-170
幸运的是,被称为Java内容仓库(Java Content Repository,JCR)的JSR-170,试图以独立于具体实现的方式解决这些(以及其它)问题。即,不论底层资源(如,数据库,本地或虚拟文件系统)是什么,API都将相同。在数据存储之上,JCR提供诸如访问粒度控制、版本控制、内容事件、全文检索和过滤等内容服务。
采用JCR能带来什么呢?包括如事务、伸缩性、数据库端的查询、使用超大文件带来的真正好处、流、访问控制和文件系统端的层次结构,以及诸如版本标定、全文检索,以及“数据优先”方法。
由Day Software领导的JSR-170背后的专家组付出了艰辛的劳动。2005年6月完成,在javax.jcr包中,API包含了大约50个类(主要是接口和异常)。
2006年早些时候,我们的主角JackRabbit登场了, 它是JCR 1.0版本的参考实现,除了JackRabbit之外,还有许多开源或者商业的JCR 1.0的不同实现。
JCR概览
JCR 建立在内容仓库的概念之上。仓库使用“树结构”保存信息。
树由节点和属性组成。1个节点有且只有1个父亲,有任意数目的孩子(子节点)和任意数目的属性。1个属性有且只有一个父亲(它是节点),它没有子节点,由一个名字和一个或多个值组成。
属性值的类型可以是:布尔(Boolean)、日期(Date)、双精(Double),长整(Long),字符串(String)或流(Stream)。在JCR里,只有属性可以被用来存储信息,节点则被用来创建树内部的“路径”。
你可以把JCR想成类似文件系统的目录结构,节点是目录,属性则是实际的文件。
JSR-170 提供了标准的JCR API接口包 -- javax.jcr包。API的核心类是Session,它代表客户端和仓库之间的连接。这个包还包含了那些组成仓库的接口的定义:Workspace,Credentials,Node,Property,Item(Node和Property的超类)和Value。
- javax.jcr.query包负责处理查询,
- javax.jcr.nodetype包负责定义节点类型。
- javax.jcr.version、javax.jcr.observation、javax.jcr.lock负责可选级别的功能。
JSR 283之后的JCR 2.0
JSR-283 旨在从以下几个方面改进JCR 1.0:
- 访问控制和节点类型的管理
- 通过新的标准节点类型(包括元信息和国际化)改进互操作性
- 扩展内容建模能力
- 联邦、交叉仓库和交叉工作区(Workspace)功能
- 积极发展现有查询语言、版本标定和观察
- Remoting和客户/服务器协议映射(译者注:Remoting是采用分布式进行编程的一种技术,主要用于管理跨应用程序域的同步和异步RPC会话。默认情况下,Remoting使用HTTP或TCP协议,并使用XML编码的SOAP或本机二进制消息格式进行通信。)
因此JCR 2.0的API和JCR 1.0有很大的不同。可以参考:
http://www.day.com/maven/jdiff-jcr1-jcr2/changes.html
JackRabbit与NoSQL
“NoSQL“这个有点浮泛的词现在代表着几大类数据库,比如key-value型数据库,面向文档的数据库等等。
面向文档的非关系数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能,一些传统的应用,比如博客、Wiki等等,都是很适合应用面向文档的数据库的场景。
JackRabbit就是一种面向文档的数据库,它和MongoDB,CouchDB的功能十分接近,优势在于JackRabbit遵从JCR标准,日后可以迁移到其他同样兼容JCR的性能更好的商业解决方案上。

JackRabbit的来源的更多相关文章
- Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索
Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索 1.1. Rss 简易信息聚合(也叫聚合内容 Really Simple Syndication1 1.1. Rss 简易信息 ...
- spider RPC框架的需求来源与特性介绍(一)
spider RPC 特性介绍 spider RPC 性能测试 spider RPC 入门指南 spider RPC 配置文件参考 spider RPC 开发指南 spider RPC 安全性 spi ...
- 捕获起英文名Edda的灵感来源,我的心愿是程序员这个行业能够男女人数平衡
在腾讯的暑期训练营结识过不少鹅厂的前辈,他们对我的成长提供了很大的帮助,可以说有着知遇之恩,大部分现在还保持着联系,请教问题时会不吝赐教,以至于就在前两天11号企鹅18岁的成年礼,朋友圈刷满了领腾讯总 ...
- 12月6日PHPCMS取内容发布管理中的来源
调取内容发布管理中的来源,如果直接写{$val['copyfrom']}调取出来的内容为 内容|0 ,要先根据"|"进行拆分,然后再写. 示例: <!--新闻开始--& ...
- mac显示任何来源
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Microsoft YaHei"; color: #333333; ba ...
- 建立jackrabbit内容仓库实例
jackrabbit需要内容仓库主目录和内容仓库配置文件这两部分的信息才能创建一个运行时内容仓库实例. 1.内容仓库主目录结构 2.Repository.xml的配置文件结构
- JackRabbit的前世今生
题记 写这系列有点老调重弹的味道,比如ahuaxuan已经在他的博客里对于JackRabbit 1.0做了很详细的阐述.之所以再写,是因为JCR推出了JCR 2.0,个人觉得有必要将一些新的特性再罗列 ...
- ASP.NET Core的配置(4):多样性的配置来源[下篇]
我们在上篇和中篇对配置模型中默认提供的各种ConfigurationProvider进行了深入详尽的介绍,如果它们依然不能满足项目中的配置需求,我们可以还可以通过自定义ConfigurationPro ...
- ASP.NET Core的配置(4):多样性的配置来源[中篇]
我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguat ...
随机推荐
- zTree 节点展开
var treeObj = $("#treeDemo"); $.fn.zTree.init(treeObj, setting, Znode1); zTree_Menu = $.fn ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 Find Integer
Find Integer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- luoguP1034 矩形覆盖 x
P1034 矩形覆盖 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4( ...
- LeetCode 141、142环形链表
141题: 首先,先看141题,这个题是比较初级也是比较经典的环形链表题: 给定一个链表,判断链表中是否有环. 进阶:你能否不使用额外空间解决此题? 那么,什么是有环的链表呢: 这个就是有环的链表 题 ...
- POJ 6621: K-th Closest Distance(主席树 + 二分)
K-th Closest Distance Time Limit: 20000/15000 MS (Java/Others) Memory Limit: 524288/524288 K (Jav ...
- Android_(控件)动态添加或删除Spinner下拉菜单
使用ArrayList动态数组的依赖性实现动态增减Spinner下拉菜单选项功能. 设置一个EditText输入框,当用户输入了文字并单击[添加]按钮的同时,就会将输入的值添加Spinner至下拉菜单 ...
- 2019新的开始,新的规划,庆祝CSDN访问量过千
刚刚看了下博客访问量六千八百七十多个,然后我就自己刷新了一下,留个截图做纪念吧. 每一年都会有很多计划,然而到了年末却发现,未完成的还剩一大半,而完成的却屈指可数. 不过该立的flag还是要立的,顺便 ...
- 【学习】SpringBoot之自定义拦截器
/** * 自定义拦截器 **/ @Configuration//声明这是一个拦截器 public class MyInterceptor extends WebMvcConfigurerAdapte ...
- JS Generator yield
function show() { console.log('a') console.log('b') } show() // 普通函数 function *show2() { console.log ...
- typescript 接口 interface
代码: // 接口:行为的抽象 // 一.对class类的约束 // 接口定义 // 打印机 interface Iprinter { Printing(msg:string):string; } i ...