日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

深入淺出 jackrabbit_1

 koolboy2015 2015-07-20
話說很久以前,江湖上出了一個(gè)叫作jcr的兵器,這個(gè)東西呢確實(shí)有那么一點(diǎn)點(diǎn)的用處,于是他們就在小眾的圈子里開始流行,于是各門各派都開發(fā)出來屬于自己的jcr,但是后來發(fā)現(xiàn),問題來了,由于各門派都有自己的jcr,使得俺們這些小程序員需要不停的學(xué)習(xí)各個(gè)jcr的api。顯然這個(gè)時(shí)候需要盟主出來貢獻(xiàn)點(diǎn)力量,于是,sun盟就出來說話啦:同志們啊,你們這些瞎搞是不行的,我來給你們制定一個(gè)規(guī)范,你們按照我的標(biāo)準(zhǔn)來搞,怎么樣。顯然江湖人士都習(xí)慣了老大的作風(fēng),于是紛紛同意。后來經(jīng)過很多磚家的研究,終于制定出來一份規(guī)范,內(nèi)部代號(hào)170. 

說了半天光說歷史了,這玩意究竟是個(gè)什么鳥東西,好不好使呀。那么來一段盟主官方發(fā)言人的聲明: 
內(nèi)容倉庫是一個(gè)高級(jí)的信息管理系統(tǒng),該系統(tǒng)是是傳統(tǒng)的數(shù)據(jù)倉庫的擴(kuò)展,它提供了諸如版本控制、全文檢索,訪問控制,內(nèi)容分類、訪問控制、內(nèi)容事件監(jiān)視等內(nèi)容服務(wù)。第一次看到官方解釋之后,ahuaxuan好像有個(gè)初步的概念,但是有點(diǎn)抽象,不夠具體化,于是又上網(wǎng)找啊找啊找啊,代碼看啊看啊看啊,終于,讓我找到j(luò)ackrabbit(后述)里面有一個(gè)DataStore類,該類有兩個(gè)實(shí)現(xiàn),DbDataStore,和FileDataStore,于是,終于有點(diǎn)明白了,原來內(nèi)容倉庫可以保存元數(shù)據(jù),還有二進(jìn)制數(shù)據(jù),那么是不是我們應(yīng)用中的類似數(shù)據(jù)都可以放進(jìn)去呢,正如一些文章中講到的,我們可以把圖片啊,文檔啊,文本啊等等都放到內(nèi)容管理系統(tǒng)中去呢。 

歷史也知道了,功能也大概明白了(說得不夠全面,歡迎大家糾正),下面我們得找一個(gè)實(shí)現(xiàn)了,要找個(gè)開源的東西嗎,當(dāng)然首先考慮考慮apache的項(xiàng)目了。哦,有一個(gè),jackrabbit(http://jackrabbit./),下載下來研究研究先。 

學(xué)習(xí)任何新的框架都離不開例子,可運(yùn)行的例子可以加深我們對(duì)框架的理解。下面我們就把jackrabbit給download下來,跑一個(gè)例子試試看。 
這個(gè)例子是官方的例子,這個(gè)例子形象的說明了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.         // 創(chuàng)建一個(gè)倉庫  
  28.         Repository repository = new TransientRepository();  
  29.   
  30.         // 創(chuàng)建一個(gè)session  
  31.         Session session = repository.login(new SimpleCredentials("username",  
  32.                 "password".toCharArray()));  
  33.         try {  
  34.             // 得到根節(jié)點(diǎn)(發(fā)現(xiàn)root變量,root,一般樹結(jié)構(gòu)的頂層節(jié)點(diǎn)叫做root)  
  35.             Node root = session.getRootNode();  
  36.   
  37.             // 添加節(jié)點(diǎn)數(shù)據(jù)(仔細(xì)看hello節(jié)點(diǎn)和world節(jié)點(diǎn)的組織方式,可以發(fā)現(xiàn)它是一顆樹形結(jié)構(gòu))  
  38.             Node hello = root.addNode("hello");  
  39.             Node world = hello.addNode("world");  
  40.             world.setProperty("message""Hello, World!");  
  41.   
  42.             // 保存數(shù)據(jù)  
  43.             session.save();  
  44.   
  45.             // 數(shù)據(jù)查詢  
  46.             Node node = root.getNode("hello/world");  
  47.             System.out.println(node.getPath());  
  48.             System.out.println(node.getProperty("message").getString());  
  49.   
  50.             // 數(shù)據(jù)刪除  
  51.             root.getNode("hello").remove();  
  52.             session.save();  
  53.         } finally {  
  54.             session.logout();  
  55.         }  
  56.     }  
  57.   
  58. }  


看完這個(gè)例子(項(xiàng)目打包到附件中),有什么收獲呢,從ahuaxuan看來,有三個(gè)收獲: 
1, 明確了jackrabbit做crud的一般流程,從而為以后使用jackrabbit打下了不夠堅(jiān)實(shí)的基礎(chǔ) 
2, 明確了jackrabbit中存儲(chǔ)數(shù)據(jù)的一般結(jié)構(gòu),顯然是一顆m叉樹。 
3, Session的用法和db connection頗為類似,和hibernate中的session更為類似(后面的文章中我們還可以看到和hibernate session更為類似的設(shè)計(jì)理念)。 

例子雖然簡(jiǎn)單,而且也有一定的含金量,但是事實(shí)上還是過于膚淺,作為技術(shù)人員是要有點(diǎn)追求的,要深入理解jackrabbit,那么下面的有兩步必須要做: 
一, 分析jcr的域模型,和關(guān)鍵類的繼承體系 
二, 分解jcr的crud主體流程,遞歸深入下去,這樣才能深刻理解其設(shè)計(jì)理念 
三,    關(guān)鍵邏輯的算法 

Ahuaxuan將會(huì)在后續(xù)的文章中和大家一起深入分析這些知識(shí)點(diǎn)。 

最后附上可運(yùn)行的例子代碼,下載后直接導(dǎo)入項(xiàng)目 

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多