ModeShape旨在成为可嵌入的分层数据存储.
ModeShape是一个分层的、事务性的、一致的数据存储库,支持查询、全文搜索、事件、版本控制、引用和灵活的动态模式。它非常快,高可用性,高度可伸缩,并且是100%开源的,用Java编写的。客户端使用(JSR-283)标准的Java API或者ModeShape的Rest API,可以通过JDBC和SQL查询内容。
ModeShape engine是ModeShape中最核心的组件,负责管理所有仓库。在应用程序中,最好在应用程序的生命周期中合适的地方手动实现start(),deployRepository(…)和destroy()方法。
ModeShapeEngine 中的每个仓库都有一个为一个名字,应用程序可以通过名字来获取到仓库。如果应用程序环境中使用了JNDI,ModeShape可以把每个仓库注册到JNDI中。
每个仓库都有一个单独的json格式的配置文件,可以通过org.modeshape.jcr.RepositoryConfiguration
类来读取配置文件,其返回值可以传递给ModeShapeEngine.deployRepository(…)和ModeShapeEngine.updateRepository(…)。
ModeShape可以以仓库为单位部署集群。也就是说同样名称的仓库可以部署到多个引擎中,仓库实例之间会互相感知到变化。
集群有两个核心概念:
ModeShape由自己的持久化存储库,但是不是所有都可以处理集群配置,只有数据库持久化存储可以处理集群,也就是说ModeShape只能在共享持久化存储下集群。
每个仓库实例都可以使用索引来做查询。当集群化仓库时,仓库需要知道它是独有索引还是与其他仓库共享索引。
Each repository instance can use indexes to help answer queries. When clustering a repository, the repository needs to know whether it owns the indexes (in which case the repository will update the indexes to reflect all changes that originate from the local or remote repository instances) or whether indexes are shared (in which case the repository will update the indexes only when changes that are made with that repository instance).
本地索引配置起来更简单,但缺点是在发生变动时,所有仓库都要更新自己的索引。
共享索引配置起来更复杂,但能处理大量的更新请求。
ModeShape是以JAR文件发布的。以下是其核心模块。
所有的sequencers工件命名为:modeshape-sequencer-name。sequencers的使用是完全可选的。
所有的connector工件命名为:modeshape-connector-name。比如git的命名为 modeshape-connector-git。其使用也是完全可选的。
命名为 modeshape-name-index-provider,使用完全可选。
ModeShape有许多基于web的api,用于和仓库进行交互。
这些服务可以集成在web应用中,每个服务与一个本地的ModeShapeEngine实例通信,与此实例部署的所有仓库通信。
ModeShape支持一些查询语言,客户端应用可以通过查询语言来获取内容。JCR-SQL2语言是目前最强大的查询语言,ModeShape提供了一个JDBC驱动,应用程序可以通过其查询仓库。
除了集成在Java应用程序内部外,ModeShape也可以部署在Web或者服务器程序中。包括JCA Adapter和JBoss AS。