JCR
引用:http://baike.baidu.com/view/486400.htm
JAVA內容倉庫
Java Content Repository API(JSR-170)試圖建立一套標準的API去訪問內容倉庫。如果你對內容管理系統(CMS)不熟悉的話,你一定會對內容倉庫是什么感到疑惑。你可以這樣去理解,把內容倉庫理解為一個用來存儲文本和二進制數據(圖片,word文檔,PDF等等)的數據存儲應用程序。一個顯著的特點是你不用關心你真正的數據到底存儲在什么地方,是關系數據庫?是文件系統?還是XML?不僅僅是數據的存儲和讀取,大多數的內容倉庫還提供了更加高級的功能,例如訪問控制,查找,版本控制,鎖定內容等等。
一段時間以來市場上出現了各個廠家開發的不同的CMS系統,這些系統都建立在他們各自的內容倉庫之上。
問題出現了,每個CMS開發商都提供了他們自己的API來訪問內容倉庫。這對應用程序的開發者帶來了困擾,因為他們要學習不同的開發商提供的API,同時,他們的代碼也與這些特定的API產生了綁定。
JSR-170正是為解決這一問題而出現的,它提供了一套標準的API來訪問任何數據倉庫。通過JSR-170,你開發代碼只需要引用 javax.jcr.* 這些類和接口。它適用于任何兼容JSR-170規范的內容倉庫。
我們將通過一個例子來逐步了解JSR-170。
為什么需要 Java Content Repository API
隨著各個廠家各自的內容倉庫實現數量的增長,人們越來越需要一組通用的編程接口來使用這些內容倉庫,這就是JSR-170所要做的東西。它提供一組通用的編程接口來連接內容倉庫。你可以把JSR-170理解為和JDBC類似的API,這樣你可以不依賴任何具體的內容倉庫實現來開發你的程序。你可以直接使用支持JSR-170的內容倉庫;或者如果一些廠家的內容倉庫不支持JSR-170則可以通過這些廠家提供的JSR-170驅動來完成從JSR-170與廠家特定的內容倉庫的轉換。
JSR-170 API對不同的人員提供了不同的好處。
●對于開發者無需了解廠家的倉庫特定的API,只要兼容JSR-170就可以通過JSR-170訪問其倉庫。
●對于使用CMS的公司則無需花費資金用于在不同種類CMS的內容倉庫之間進行轉換。
●對于CMS廠家,無需自己開發內容倉庫,而專注于開發CMS應用。\
JCR定義的內容倉庫模型是一個樹狀結構,樹上的元素(Item)分為兩類:節點(node)和屬性(property)。整棵樹具有單根結構。從根開始,內容元素的定位采用UNIX文件系統風格,例如“/A/B/ccc”(根下面A節點的B子節點的ccc屬性),相對定位符(“.”和“..”)也是可用的。每個屬性有且僅有一個父節點,不能有子元素。每個節點可以有一個或多個父節點(根節點無父節點),也可以有任意多個子節點或屬性。注意,節點可以有多個父節點,也就是說可以從不同的路徑導航獲得同一內容,這是網站常見的一個需求(來自不同欄目的兩個鏈接指向同一篇文章)。
除了Node和Property之外,API中還有幾個重要的對象。Repository代表整個內容倉庫,Credentials代表一個用戶身份,Ticket代表進入該內容倉庫的門票。獲得內容根節點的代碼大致如下:
Repository repository = (Repository)java.rmi.Naming.lookup("MyRepo");
Credentials credentials = new SimpleCredentials("MyName", "MyPassword".toCharArray());
Ticket myTicket = repository.login(credentials, "MyWorkspace");
Node root = myTicket.getRootNode();
從root節點就可以遍歷訪問整課內容樹。Ticket對象也支持通過絕對路徑或者UUID直接獲得某一內容元素(節點或屬性)。
總結
- 上一篇: 什么是JCR
- 下一篇: 微信小程序点击地址,跳转到地图导航