Jackrabbit 体系结构
- How Jackrabbit works Jackrabbit如何运作
- Repository lifecycle 储存库生命周期
- Search implementation 搜索实现
- Index readers 索引阅读器
- Concurrency control 并发控制
Jackrabbit的一般体系结构可以描述为三层:内容应用层,API层和内容存储库实现层。
内容应用
内容应用程序通过JSR-170 API与Content Repository(内容存储库)实现进行交互。有许多应用程序可用于JSR-170存储库,其中一些是非常通用的(例如WebDAV服务器),其他应用程序可以非常具体,并利用内容存储库作为应用程序使用的信息的存储库。 Java应用程序可以使用JSR-170内容存储库来代替从属性文件,XML配置,关系数据库功能的某些部分到直接文件系统或BLOB管理之类的任何内容。使用内容存储库允许应用程序以可伸缩的方式处理任意大的分层空间,从而自动受益于诸如版本控制,查询,事务或名称空间之类的存储库服务,这些内容使内容存储库成为许多应用程序的理想数据存储。
“通用内容应用程序”(不具有特定功能重点,而仅允许通用自省和操作存储库的应用程序)使用节点类型,访问控制和其他功能的功能向最终用户显示用户界面或网络协议,似乎独立于存储在存储库中存储的内容。此类通用应用程序的示例是“The Content Explorer”, “WebDAV Server” or a “Subversion Server”。 (或通用Portal,CMS或DMS应用程序)。
“特殊内容应用程序”的操作假设是,它有特定的节点类型,并且至少部分熟悉所定义的节点类型公开的数据模型。大多数情况下,这些节点类型通常由应用程序本身定义并随应用程序一起发布的。这些应用程序使用内容存储库作为它们的持久性层,这是从使用RDBMS或文件系统自然而来的发展。 “特殊内容应用程序”的示例范围很广,从“ DVD Collection Management(DVD收集管理)”到“Message Board(留言板)”再到“Workflow and BPM(工作流和BPM)”,还可能包括下一代“Enterprise Resource Planning Systems(企业资源计划系统)”。
专用内容应用程序”的操作假设是,它有特定的节点类型,并且至少部分熟悉由定义的节点类型公开的数据模型。大多数情况下,这些节点类型是由应用程序本身定义并随应用程序一起发布的。这些应用程序使用内容存储库作为它们的持久性层,作为使用RDBMS或文件系统的自然发展。“专门内容应用程序”的例子范围很广,从“DVD收藏管理”到“留言板”,到“工作流和BPM”,但也有可能完成下一代的“企业资源规划系统”。
内容存储库API
Content Repository API层分为两个主要部分:
- JSR-170定义的Content Repository API
- 内容存储库的许多功能已从JSR-170规范中删除,因为它们难以在现有的非基于Java的内容存储库和管理存储库任务上实现,这些功能也已故意从JSR-170中排除
只有极少数(大多数是管理应用程序)使用Jackrabbit提供的非JSR-170 API。
架构图中的框并不直接表示表示包名或类名,而主要是按语义分组的功能块。
内容存储库实现
体系结构图的内容存储库实现部分反映了jackrabbit内容存储库实现的主要构建块。
块的大小大致象征着代码量,因此也象征着单个功能块的复杂性。同样,功能块不会直接映射到包名或类名。
内容存储库中有三个作用域:存储库作用域、工作区作用域和会话范围。
针对存储库操作的每个功能都可以归因于这些作用域中的至少一个,某些功能可以在多个作用域中进行操作。
- Repository
- Nodetype
- Version
- NamespaceRegistry
- Workspace
- Query
- Observation
- State
- Xml
- Session
- Path
- HierarchyManager
- QName
- ItemImpl, PropertyImpl, NodeImpl
- ItemId, PropertyId, NodeId
- ItemManager
这不是完整列表,但包含内容存储库实现中的一些最重要的组件。
原文地址:http://jackrabbit.apache.org/jcr/jackrabbit-architecture.html