儲存各種資訊對於應用程式來說非常平常,大多數時候它們是儲存在關係資料 庫中。資料庫處理規範資料類型十分在行,但是在處理如映像、文檔等位元 據時卻不是那麼得心應手。儘管可以用檔案系統作為替代——而且它們還提供了 更好的效能。但它們既沒有提供用於搜尋資訊的查詢語言,也沒有提供表示關係 或事務的概念。
在很多情況下,允許第三方訪問這些儲存資料(隨著應用程式的不斷擴充,這 成為一個典型的需求)是一個漫長而複雜的過程(它們不會在一夜之間完成)。 內部儲存結構很容易影響API架構,以及資訊檢索與遍曆的方式。
什麼是JSR-170
幸運的是,被稱為Java內容倉庫(Java Content Repository,JCR)的JSR- 170,試圖以獨立於具體實現的方式解決這些(以及其它)問題。即,不論底層資 源(如,資料庫,本地或虛擬檔案系統)是什麼,API都將相同。在資料存放區之上 ,JCR提供諸如訪問粒度控制、版本控制、內容事件、全文檢索索引和過濾等內容服務 。由Day Software領導的JSR-170背後的專家組令人印象深刻,包括內容管理系統 (CMS)供應商Vignette、Hummingbird Ltd.、Stellent和通用Java驅動解決方案 供應商,如BEA Systems、IBM和Oracle。該規範很可能成為內容管理和文檔儲存 方面事實上的標準。
經過幾乎2年半的努力,工作最終於2005年6月完成,在javax.jcr包中,API包 含了大約50個類(主要是介面和異常)。2006年早些時候,發布了初始1.0版本的 參考實現(JackRabbit)。
JSR-170概覽
Java內容倉庫建立在倉庫(除了是“用於安全地儲存貨物的地點”的通常含義 之外)概念之上,它提供了幾個操作資料的特性。倉庫使用“樹結構”儲存資訊 ,如下圖,樹由節點和屬性群組成。圓圈代表節點,方框代表屬性。1個節點有且只 有1個父親,有任意數目的孩子(子節點)和任意數目的屬性。1個屬性有且只有 一個父親(它是節點),它沒有子節點,由一個名字和一個或多個值組成。屬性 值的類型可以是:布爾(Boolean)、日期(Date)、雙精(Double),長整 (Long),字串(String)或流(Stream)。只有屬性可以被用來儲存資訊, 節點則被用來建立樹內部的“路徑”。在某種程度上,這棵樹類似檔案系統的結 構,節點是目錄,屬性是實際的檔案。