Jackrabbit仓库的运维管理

文章目录

    • 一、简介
    • 二、创建Jackrabbit仓库
      • 1. 通过WebApp
      • 2. 通过程序
    • 三、访问Jackrabbit
      • 1.通过WebDav
      • 2.通过第三方工具管理
        • 残留问题

一、简介

JCR(Java Content Repository),即Java内容仓库规范,定义了一套规范API,用于文件和元数据的存储管理、全文检索等。JBoss ModeShape、Apache Jackrabbit等都是JCR规范的具体实现,还有很多开源或商业化的文档管理系统、CMS系统使用JCR。
我的项目中使用了Apache Jackrabbit实现文件存储管理。因为Jackrabbit仓库在磁盘上的文件组织方式无法直观查看和维护,像个黑盒子,只能通过它的对外接口访问,开发调试和运维管理都很不方便。本文介绍两种方法来对仓库进行查看和管理。

二、创建Jackrabbit仓库

先简单说明一下如何创建Jackrabbit仓库,有两种途径。

1. 通过WebApp

从Apache Jackrabbit下载webapp,放到Tomcat里运行,然后访问主页面,可以选择创建一个新仓库,也可以选择一个已经存在的本地仓库。
Jackrabbit仓库的运维管理_第1张图片
这里我创建一个新仓库吧。顺便说一下,在Tomcat里运行webapp,所配置的仓库信息会存在Tomcat\bin\jackrabbit\bootstrap.properties文件中,如果你只删除webapps下的jackrabbit webapp部署包并重新发布一个新版本,会发现原先配置的仓库信息还在。

2. 通过程序

调用Jackrabbit的API,写程序自己创建仓库。这不是本文重点,就不介绍了。

三、访问Jackrabbit

1.通过WebDav

在启动jackrabbit webapp后,直接通过其界面左侧的导航栏:Default workspace -> Browser,就可以在浏览器中查看文件了,如下图所示:
Jackrabbit仓库的运维管理_第2张图片
这个只能看,不能删改。所以我们还是看看WebDav方式吧。

首先,在webapp的页面中拷贝webdav地址:
Jackrabbit仓库的运维管理_第3张图片

然后,在Windows系统中添加WebDav网络驱动器:
Jackrabbit仓库的运维管理_第4张图片
Jackrabbit仓库的运维管理_第5张图片
连续两次“下一步”后,在下面这个对话框中粘贴WebDav地址:
Jackrabbit仓库的运维管理_第6张图片
啊来,出现错误了:
Jackrabbit仓库的运维管理_第7张图片
这个错误的原因是Windows为了安全起见,禁止连接非HTTPS的网络驱动器,需要修改下面的注册表项,把值从1改成2,即支持HTTP和HTTPS两种协议。当然,在生产环境中,还是应该使用HTTPS协议的。
Jackrabbit仓库的运维管理_第8张图片
修改注册表后,需要重启系统服务"WebClient"才能生效。回到前面的WebDab对话框,下一步,这次弹出了账号密码对话框。jackrabbit默认的账号密码是admin/admin,输入账号密码后会弹出下面对话框,给网络驱动器起个名字:
Jackrabbit仓库的运维管理_第9张图片
现在终于能在资源管理器里看到这个驱动器了:
Jackrabbit仓库的运维管理_第10张图片
试试看拖放、修改、删除文件吧!整个操作体验跟本地文件夹没什么区别。

通过WebDav方式能非常方便的查看Jackrabbit仓库中的文件,并进行管理。但缺点是看不到Jackrabbit本身所支持的一些其他特性,例如元数据、全文检索。如果你用到了这些特性,那么就需要更专业的第三方工具来查看和管理。

2.通过第三方工具管理

调研了若干第三方工具,基本都早就停止更新了,有的配置起来很麻烦,有的版本太老压根连不上(相信我,真的试了很多个,我也奇怪怎么就找不到一个比较新的好工具)。目前只推荐这个:jackrabbitexplorer(要翻Q)。

下载后,直接部署到Tomcat里,什么都不用配,直接访问,会看到这个:
Jackrabbit仓库的运维管理_第11张图片
注意这个页面,其实上面截图用的版本不是我刚才让你下载的版本(对不起我骗了你!),而是从GitHub上找到的源码编译生成的(我也不知道这版本为什么跟前面准官方的不一样),连接方式多了一个Local,而从前面提供的链接中下载的只能使用RMI方式。然并卵,这个Local方式实测无法连接…等有时间再研究研究源码吧。所以你就用直接下载的版本就可以了。
这里要输入Jackrabbit的RMI地址。既然是RMI地址,当然是有个独立的Jackrabbit服务咯,这个服务就是上面我们已经启动的jackrabbit webapp。你可以从webapp的页面中得到RMI地址:
Jackrabbit仓库的运维管理_第12张图片
把这个地址粘贴到RMI URL输入框,就可以登录进去了。
登录进去后的页面如下:
Jackrabbit仓库的运维管理_第13张图片
能看出来,相比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方式的性能不如本地版,官方并不推荐使用。

这个问题等以后再研究吧。

你可能感兴趣的:(开发技术)