Jackrabbit倉庫的運維管理

一、簡介

JCR(Java Content Repository),即Java內容倉庫規範,定義了一套規範API,用於文件和元數據的存儲管理、全文檢索等。JBoss ModeShape、Apache Jackrabbit等都是JCR規範的具體實現,還有很多開源或商業化的文檔管理系統、CMS系統使用JCR。
我的項目中使用了Apache Jackrabbit實現文件存儲管理。因爲Jackrabbit倉庫在磁盤上的文件組織方式無法直觀查看和維護,像個黑盒子,只能通過它的對外接口訪問,開發調試和運維管理都很不方便。本文介紹兩種方法來對倉庫進行查看和管理。

二、創建Jackrabbit倉庫

先簡單說明一下如何創建Jackrabbit倉庫,有兩種途徑。

1. 通過WebApp

Apache Jackrabbit下載webapp,放到Tomcat裏運行,然後訪問主頁面,可以選擇創建一個新倉庫,也可以選擇一個已經存在的本地倉庫。
創建倉庫
這裏我創建一個新倉庫吧。順便說一下,在Tomcat裏運行webapp,所配置的倉庫信息會存在Tomcat\bin\jackrabbit\bootstrap.properties文件中,如果你只刪除webapps下的jackrabbit webapp部署包並重新發佈一個新版本,會發現原先配置的倉庫信息還在。

2. 通過程序

調用Jackrabbit的API,寫程序自己創建倉庫。這不是本文重點,就不介紹了。

三、訪問Jackrabbit

1.通過WebDav

在啓動jackrabbit webapp後,直接通過其界面左側的導航欄:Default workspace -> Browser,就可以在瀏覽器中查看文件了,如下圖所示:
直接通過瀏覽器查看
這個只能看,不能刪改。所以我們還是看看WebDav方式吧。

首先,在webapp的頁面中拷貝webdav地址:
拷貝這個URL

然後,在Windows系統中添加WebDav網絡驅動器:
映射網絡驅動器
選擇最下方的鏈接
連續兩次“下一步”後,在下面這個對話框中粘貼WebDav地址:
在這裏插入圖片描述
啊來,出現錯誤了:
出現錯誤
這個錯誤的原因是Windows爲了安全起見,禁止連接非HTTPS的網絡驅動器,需要修改下面的註冊表項,把值從1改成2,即支持HTTP和HTTPS兩種協議。當然,在生產環境中,還是應該使用HTTPS協議的。
修改註冊表,支持HTTP
修改註冊表後,需要重啓系統服務"WebClient"才能生效。回到前面的WebDab對話框,下一步,這次彈出了賬號密碼對話框。jackrabbit默認的賬號密碼是admin/admin,輸入賬號密碼後會彈出下面對話框,給網絡驅動器起個名字:
起個名字
現在終於能在資源管理器裏看到這個驅動器了:
Windows中查看
試試看拖放、修改、刪除文件吧!整個操作體驗跟本地文件夾沒什麼區別。

通過WebDav方式能非常方便的查看Jackrabbit倉庫中的文件,並進行管理。但缺點是看不到Jackrabbit本身所支持的一些其他特性,例如元數據、全文檢索。如果你用到了這些特性,那麼就需要更專業的第三方工具來查看和管理。

2.通過第三方工具管理

調研了若干第三方工具,基本都早就停止更新了,有的配置起來很麻煩,有的版本太老壓根連不上(相信我,真的試了很多個,我也奇怪怎麼就找不到一個比較新的好工具)。目前只推薦這個:jackrabbitexplorer(要翻Q)。

下載後,直接部署到Tomcat裏,什麼都不用配,直接訪問,會看到這個:
登錄頁面
注意這個頁面,其實上面截圖用的版本不是我剛纔讓你下載的版本(對不起我騙了你!),而是從GitHub上找到的源碼編譯生成的(我也不知道這版本爲什麼跟前面準官方的不一樣),連接方式多了一個Local,而從前面提供的鏈接中下載的只能使用RMI方式。然並卵,這個Local方式實測無法連接…等有時間再研究研究源碼吧。所以你就用直接下載的版本就可以了。
這裏要輸入Jackrabbit的RMI地址。既然是RMI地址,當然是有個獨立的Jackrabbit服務咯,這個服務就是上面我們已經啓動的jackrabbit webapp。你可以從webapp的頁面中得到RMI地址:
查看RMI地址
把這個地址粘貼到RMI URL輸入框,就可以登錄進去了。
登錄進去後的頁面如下:
jackrabbit explorer界面
能看出來,相比WebDav方式,能看見更多的附加信息,還可以進行搜索等操作。不過這些操作都需要對JCR(Java內容倉庫)規範有相當的瞭解。
如果你基於Jackrabbit做開發,比如說開發一個文檔管理系統,肯定需要存儲一些文檔的元數據信息,例如作者、組織機構等等。作爲JCR規範的實現,Jackrabbit當然可以存放和管理這些元數據。因此,無論對於開發人員還是運維人員,都需要jackrabbit explorer這樣的可視化管理工具。

殘留問題

前面提到,目前這個工具只能以RMI方式連接倉庫,這在我的實際使用場景中導致一個問題:我們開發的系統使用的是嵌入式的本地倉庫,沒有使用獨立外部的jackrabbit webapp服務。如何連接查看這個本地倉庫呢?

目前用了一個很挫的方法:發佈一個jackrabbit webapp,並綁定本地倉庫,從而讓該工具能夠通過webapp所提供的RMI接口連接倉庫。這裏又有兩個小細節需要注意:
(1)程序生成的本地倉庫目錄下,可能是沒有repository.xml這個文件的(誰寫誰知道)。你需要拷貝代碼中生成倉庫時所使用的repository.xml文件到倉庫根目錄,否則jackrabbit webapp無法連接該倉庫。
(2)這是一個要命的問題:當你的程序包含着jackrabbit本地庫運行時,會生成一個文件鎖,此時webapp去連接這個本地庫會失敗。只有停止你的程序後,webapp才能連接成功。反過來也一樣。這就意味着,跑業務和運維管理不能同時進行,哪怕只是想通過工具看看內容也不行。因此,目前只適合在開發調試階段使用這種方法。解決思路有兩個:

  • 在業務系統中,參考webapp的實現方式,增加對外的RMI接口或webdav接口,方便工具連接管理。
  • 部署獨立的jackrabbit服務實例(用webapp或jackrabbit standalone版本),業務系統和第三方工具都使用RMI方式連接。缺點是:RMI方式的性能不如本地版,官方並不推薦使用。

這個問題等以後再研究吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章