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方式的性能不如本地版,官方并不推荐使用。

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值