[译]Jackrabbit是如何工作的

下面的图片解释了当一个用户使用JCR API修改内容仓库时,哪些Jackrabbit的部件会被使用到。这是一个简单而且常用的操作,但会涉及到Jackrabbit的大部分组件。请注意这些实现的架构JCR并没有授权,但是是直接基于JCR设计的

image

下面是写或修改内容仓库时依次使用到的组件和它们各自的功能

  • Transient Item State Manager 暂时项状态管理器
    一旦内容项被会话(session)读取,它们就会被Transient ISM缓存。当这些内容项被修改,在这个所谓的“暂时”空间里这些修改只对同一个session是可见的。

  • Transactional Item State Manager 事务项状态管理器
    当应用使用JCR的Item.save() 或Session.save() 对这些修改项持久化时。这些暂时项被会提升到Transactional ISM。这些修改仍然只在这事务中是可见的,这意味直到被提交前它们对其他session依然是不可见的。如果内容仓库不是运行在XA环境下,这些提交是隐形的。

  • Shared Item State Manager 共享项状态管理器
    一旦事务被提交,Shared ISM会接受到更新日志并把这些更新推送到所有登录到这一工作空间的session。这就意味被其他session缓存和引用到的所有项状态都被会通知,也可能会被更新或者变得无效。Shared ISM 也会触发观察机制并将更新日志传递给这个工作空间配置的持久化管理器。

  • Persistence Manager 持久化管理器
    Persistence Manager会将Shared ISM传递过来的更新日志中的所有项进行持久化操作。持久化管理器简单、快速,事务接口是低层次的不需要理解复杂的仓库操作,只需在底层上根据给定项的ID能够持久化和恢复

  • Observation 观察机制
    当事务被提交,Shared ISM会出发观察机制。这样允许应用在工作空间内异步订阅这些改变。Jackrabbit也提供了同步的观察机制,但这不属于JCR标准之内

  • Query Manager/Index 查询管理/索引
    通过异步观察事件,指示Query Manager索引到新添加项或修改项。内容仓库索引要比经典的关系型数据库索引要复杂的多,因为它要处理内容仓库的特性,比如项的层级,节点继承还有全文检索