隨著內容管理應用普及,廠商私有倉庫引擎導致複雜性高、可維護性差、廠商鎖定嚴重。JSR-170 (Content Repository for Java Technology API) 在 `javax.jcr` 命名空間提供統一 API,實現廠商中立的倉庫訪問。核心優勢:不綁定底層架構(文件系統、WebDAV、XML、SQL 數據庫均可)、支援匯入匯出無縫切換後端、標準化版本控制、訪問控制、搜尋等複雜功能。
單一倉庫包含一或多工作區,每工作區含項目樹(節點與屬性)。節點有主節點類型(定義允許的屬性/子節點)與混合類型(`mix:versionable` 版本控制、`mix:lockable` 鎖定、`mix:referenceable` UUID)。預定義類型:`nt:unstructured`(最靈活)、`nt:file`/`nt:folder`/`nt:resource`(文件系統映射)、`nt:version`(版本控制)。命名空間防止衝突(如 `jcr:`、`mix:`、`nt:`、`wiki:`)。
所需庫:jackrabbit-core、commons-collections、concurrent、derby、jcr、log4j、lucene、slf4j、xerces。
手動配置:`repository.xml` 指定文件系統、安全管理、工作區、持久化管理器、搜尋索引、版本控制;`jaas.config` 配置認證;JNDI + `RegistryHelper` 獲取 Repository;`SimpleCredentials` 獲取 Session → Workspace → 根節點。
自動配置:`TransientRepository` 啟動首個 Session 時自動初始化,關閉最後 Session 時停止,犧牲移植性換取簡單性。
百科全書條目為 `nt:unstructured` 節點,三屬性:標題、內容、分類(單/多值)。
JSR-170 最終版已有商業實現,獲 SAP、Macromedia、IBM 等巨頭支持。如 ORM 改變資料庫編程,JCR API 將深度變革內容應用開發方式。Apache Jackrabbit 作為開源參考實現,為開發者提供了寶貴的學習與實踐平台。


