分享

深入浅出 jackrabbit_1

 koolboy2015 2015-07-20
话说很久以前,江湖上出了一个叫作jcr的兵器,这个东西呢确实有那么一点点的用处,于是他们就在小众的圈子里开始流行,于是各门各派都开发出来属于自己的jcr,但是后来发现,问题来了,由于各门派都有自己的jcr,使得俺们这些小程序员需要不停的学习各个jcr的api。显然这个时候需要盟主出来贡献点力量,于是,sun盟就出来说话啦:同志们啊,你们这些瞎搞是不行的,我来给你们制定一个规范,你们按照我的标准来搞,怎么样。显然江湖人士都习惯了老大的作风,于是纷纷同意。后来经过很多砖家的研究,终于制定出来一份规范,内部代号170. 

说了半天光说历史了,这玩意究竟是个什么鸟东西,好不好使呀。那么来一段盟主官方发言人的声明: 
内容仓库是一个高级的信息管理系统,该系统是是传统的数据仓库的扩展,它提供了诸如版本控制、全文检索,访问控制,内容分类、访问控制、内容事件监视等内容服务。第一次看到官方解释之后,ahuaxuan好像有个初步的概念,但是有点抽象,不够具体化,于是又上网找啊找啊找啊,代码看啊看啊看啊,终于,让我找到jackrabbit(后述)里面有一个DataStore类,该类有两个实现,DbDataStore,和FileDataStore,于是,终于有点明白了,原来内容仓库可以保存元数据,还有二进制数据,那么是不是我们应用中的类似数据都可以放进去呢,正如一些文章中讲到的,我们可以把图片啊,文档啊,文本啊等等都放到内容管理系统中去呢。 

历史也知道了,功能也大概明白了(说得不够全面,欢迎大家纠正),下面我们得找一个实现了,要找个开源的东西吗,当然首先考虑考虑apache的项目了。哦,有一个,jackrabbit(http://jackrabbit./),下载下来研究研究先。 

学习任何新的框架都离不开例子,可运行的例子可以加深我们对框架的理解。下面我们就把jackrabbit给download下来,跑一个例子试试看。 
这个例子是官方的例子,这个例子形象的说明了jackrabbit的一般访问方法: 
Java代码  收藏代码
  1. import javax.jcr.Repository;  
  2. import javax.jcr.Session;  
  3. import javax.jcr.SimpleCredentials;  
  4. import javax.jcr.Node;  
  5. import org.apache.jackrabbit.core.TransientRepository;  
  6.   
  7. /** 
  8.  * @author not ahuaxuan 
  9.  * @since 2009-5-19 
  10.  * @version $Id$ 
  11.  */  
  12. public class HopFirst {  
  13.   
  14.     /** 
  15.      * Second hop example. Stores, retrieves, and removes example content. 
  16.      */  
  17.   
  18.     /** 
  19.      * The main entry point of the example application. 
  20.      *  
  21.      * @param args 
  22.      *            command line arguments (ignored) 
  23.      * @throws Exception 
  24.      *             if an error occurs 
  25.      */  
  26.     public static void main(String[] args) throws Exception {  
  27.         // 创建一个仓库  
  28.         Repository repository = new TransientRepository();  
  29.   
  30.         // 创建一个session  
  31.         Session session = repository.login(new SimpleCredentials("username",  
  32.                 "password".toCharArray()));  
  33.         try {  
  34.             // 得到根节点(发现root变量,root,一般树结构的顶层节点叫做root)  
  35.             Node root = session.getRootNode();  
  36.   
  37.             // 添加节点数据(仔细看hello节点和world节点的组织方式,可以发现它是一颗树形结构)  
  38.             Node hello = root.addNode("hello");  
  39.             Node world = hello.addNode("world");  
  40.             world.setProperty("message""Hello, World!");  
  41.   
  42.             // 保存数据  
  43.             session.save();  
  44.   
  45.             // 数据查询  
  46.             Node node = root.getNode("hello/world");  
  47.             System.out.println(node.getPath());  
  48.             System.out.println(node.getProperty("message").getString());  
  49.   
  50.             // 数据删除  
  51.             root.getNode("hello").remove();  
  52.             session.save();  
  53.         } finally {  
  54.             session.logout();  
  55.         }  
  56.     }  
  57.   
  58. }  


看完这个例子(项目打包到附件中),有什么收获呢,从ahuaxuan看来,有三个收获: 
1, 明确了jackrabbit做crud的一般流程,从而为以后使用jackrabbit打下了不够坚实的基础 
2, 明确了jackrabbit中存储数据的一般结构,显然是一颗m叉树。 
3, Session的用法和db connection颇为类似,和hibernate中的session更为类似(后面的文章中我们还可以看到和hibernate session更为类似的设计理念)。 

例子虽然简单,而且也有一定的含金量,但是事实上还是过于肤浅,作为技术人员是要有点追求的,要深入理解jackrabbit,那么下面的有两步必须要做: 
一, 分析jcr的域模型,和关键类的继承体系 
二, 分解jcr的crud主体流程,递归深入下去,这样才能深刻理解其设计理念 
三,    关键逻辑的算法 

Ahuaxuan将会在后续的文章中和大家一起深入分析这些知识点。 

最后附上可运行的例子代码,下载后直接导入项目 

http://dl2./upload/attachment/0010/5175/483f81ce-7e51-3c58-bbb7-868559f8e641.rar

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多