Jackrabbit配置
Apache Jackrabbit需要两条信息来设置运行时内容存储库实例:
- 主目录存储库:
目录的文件系统路径,其中包含由Jackrabbit的运行时实例访问的内容存储库。该目录通常包含所有存储库内容,搜索索引,内部配置以及内容存储库内管理的其他持久性信息。请注意,这不是绝对必需的,某些持久性管理器和其他Jackrabbit组件很可能被配置为访问存储库主目录之外的文件甚至其他资源(例如远程数据库)。然而,即使某些组件选择不使用该目录,也始终需要指定的存储库主目录。当首次实例化存储库时,Jackrabbit会自动将所有必需的文件和子目录填充到存储库主目录中。 - 储存库配置文件:
存储库配置XML文件的文件系统路径。该文件指定用于管理和访问内容存储库的各种Jackrabbit组件的类名和属性。创建运行时内容存储库实例时,Jackrabbit会解析此配置文件并实例化指定的组件。
这两个配置参数在创建存储库实例时直接传递给Jackrabbit,或者通过JNDI对象工厂或某些其他组件管理系统的设置间接传递给Jackrabbit。
对于创建的每个工作空间,还将在工作空间主目录中创建一个workspace.xml
主文件,该文件将用于该工作空间-这些文件也必须更改,因为在repository.xml中特定于工作空间的配置是仅用作新工作空间的模板,即如果您使用Jackrabbit API的createWorkspace()
方法,那么workspace.xml
只是repository.xml内Workspace元素的副本。您也可以使用workspace.xml
文件手动创建工作空间文件夹,以自己创建一个新的工作空间(请注意,根据持久性管理器的不同,您还必须设置数据库并配置对数据库的访问权限)。
存储库配置
存储库配置文件(通常称为repository.xml
)指定了诸如安全性,版本控制和集群设置之类的全局选项。存储库配置文件中还包含一个默认的工作区配置模板。该XML配置文件的确切格式在Apache Jackrabbit项目发布的以下文档类型定义(DTD)文件中定义。
- -//The Apache Software Foundation//DTD Jackrabbit 1.5//EN
- -//The Apache Software Foundation//DTD Jackrabbit 1.4//EN
- -//The Apache Software Foundation//DTD Jackrabbit 1.2//EN
- -//The Apache Software Foundation//DTD Jackrabbit 1.0//EN
所有Jackrabbit 1.x版本都完全向后兼容,因此您可以使用最新的Jackrabbit版本,而不必修改现有存储库配置。当然,如果要启用新特性(如Jackrabbit 1.4中引入的数据存储),则需要进行配置更改。
存储库配置文件的顶级结构如下所示。 <!DOCTYPE>
声明是可选的,但是如果包含它,Jackrabbit 1.5将使用XML验证来确保配置文件的格式正确。
<!DOCTYPE Repository
PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.5//EN"
"http://jackrabbit.apache.org/dtd/repository-1.5.dtd">
<Repository>
<FileSystem .../>
<Security .../>
<Workspaces .../>
<Workspace .../>
<Versioning .../>
<SearchIndex .../> <!-- optional -->
<Cluster .../> <!-- optional, available since 1.2 -->
<DataStore .../> <!-- optional, available since 1.4 -->
</Repository>
从JackRaby1.5开始,下面的配置元素的顺序是固定的-。
存储库配置元素是:
- FileSystem: 存储库用于存储诸如注册的名称空间和节点类型等内容的的虚拟文件系统。
- Security: 身份验证和授权配置。
- Workspaces: 有关在何处以及如何管理工作空间的配置。
- Workspace: 默认工作空间配置模板。
- Versioning: 存储库范围内版本存储的配置。
- SearchIndex: 覆盖整个存储库范围的
/jcr:system
内容树的搜索索引的配置。 - Cluster: Clustering configuration.
- DataStore: 数据存储配置。
有关示例存储库配置文件,请参阅Jackrabbit 1.5默认配置。
最好将
repository.xml
文件放在存储库主目录中,这样可以使您的存储库及其配置很好地包含在一个目录树中。
Bean配置元素
配置文件中的大多数条目都基于以下通用JavaBean配置模式。这种配置指定存储库应该使用指定类的实例,并为指定的功能提供指定的属性。
<ConfigurationElement class="fully.qualified.ClassName">
<param name="property1" value="...">
<param name="property2" value="...">
<ConfigurationElement>
配置变量
Jackrabbit支持${name}
形式的配置变量。这些变量可用于避免对配置文件中的特定选项进行硬编码。以下变量在所有Jackrabbit版本中均可用:
${rep.home}
: 存储库主目录。${wsp.name}
: 工作区名称。仅在工作空间配置中可用。${wsp.home}
: 工作区主目录。仅在工作空间配置中可用。
从Jackrabbit 1.4(请参阅JCR-1304)开始,就可以使用系统属性或任何特定于应用程序的设置作为配置变量。
安全配置
安全配置元素用于指定存储库的认证和授权设置。安全配置元素的结构为:
<Security appName="Jackrabbit">
<SecurityManager .../> <!-- optional, available since 1.5 -->
<AccessManager .../> <!-- mandatory until 1.4, optional since 1.5 -->
<LoginModule .../> <!-- optional -->
</Security>
默认情况下,Jackrabbit使用Java身份验证和授权服务(Java Authentication and Authorization Service JAAS)对尝试访问存储库的用户进行身份验证。 在<Security/>
元素中使用appName
参数用作存储库的JAAS应用程序名称。
如果JAAS身份验证不可用或(通常)太复杂而无法设置,Jackrabbit允许您指定特定于资源库的JAAS LoginModule,然后将其用于身份验证资源库用户。 Jackrabbit中包含的默认SimpleLoginModule类实现了一种简单的身份验证机制,该机制接受任何用户名和任何密码作为有效身份验证凭据。
用户通过身份验证后,Jackrabbit将使用配置的AccessManager来控制允许用户访问和修改存储库内容的哪些部分。 Jackrabbit中包含的默认SimpleAccessManager类实现了一种非常简单的授权机制,授予所有用户完全读取权限,并对除匿名用户以外的所有人进行写入访问。
在Jackrabbit 1.3中添加了稍微高级一些的SimpleJBossAccessManager类(请参阅JCR-650)。
此类设计用于JBoss Application Server,它将JBoss角色映射到Jackrabbit权限。
工作空间配置
Jackrabbit存储库包含一个或多个工作空间,每个工作空间均在单独的workspace.xml
配置文件中进行配置。存储库配置的Workspaces
元素指定在何处以及如何管理工作空间。存储库配置还包含一个默认的工作空间配置模板,用于创建新工作空间的workspace.xml
文件,除非在创建工作空间时给出了更具体的配置。有关创建工作空间的工作空间的更多详细信息,请参见JackrabbitWorkspace接口中的createWorkspace
方法。
存储库配置文件中的工作空间设置为:
<Workspaces rootPath="${rep.home}/workspaces"
defaultWorkspace="default"
configRootPath="..." <!-- optional -->
maxIdleTime="..."/> <!-- optional -->
<Workspace .../> <!-- default workspace configuration template -->
在Workspaces
元素中指定了以下全局工作区配置选项:
rootPath
:
工作空间的本机文件系统目录。将为每个工作空间自动创建一个子目录,该子目录的路径可以在工作空间配置中用作${wsp.path}
变量。defaultWorkspace
:
默认工作区的名称。这个工作区是在第一次启动存储库时自动创建的。configRootPath
:
默认情况下,每个工作空间的配置都存储在rootPath
目录中工作空间目录内的workspace.xml
文件中。如果指定了此选项,那么工作空间配置文件将存储在为存储库配置的虚拟文件系统(请参见上文)中的指定路径内。maxIdleTime
:
默认情况下,Jackrabbit仅在整个存储库关闭时才释放与打开的工作空间关联的资源。
如果指定此选项,则设置在自动关闭工作空间之前,该工作空间可以保持闲置状态的最大秒数。
工作区配置模板和所有工作区.xml配置文件具有以下结构:
<Workspace name="${wsp.name}">
<FileSystem .../>
<PersistenceManager .../>
<SearchIndex .../> <!-- optional -->
<ISMLocking .../> <!-- optional, available since 1.4 -->
</Workspace>
工作空间配置元素是:
- FileSystem: 虚拟文件系统传递给持久性管理器和搜索索引。
- PersistenceManager: 工作空间内容的持久性配置。
- SearchIndex: 工作空间搜索索引的配置。
- ISMLocking: 用于并发访问工作区内容的锁定配置。
要修改现有工作空间的配置,您需要更改该工作空间的
workspace.xml
文件。在存储库配置文件中更改<Workspace/>
元素不会影响现有的工作空间。
版本化配置
所有可版本控制节点的版本历史记录存储在存储库范围的版本存储中,该存储库范围的版本存储在存储库配置的Versioning
元素中配置。版本控制配置与工作空间配置非常相似,因为Jackrabbit都使用它们来存储内容。版本控制和工作空间配置之间的主要区别在于,当使用存储库范围的搜索索引对版本历史进行索引和搜索时,没有为版本存储指定搜索索引。另一个区别是版本控制配置没有${wsp.name}
或${wsp.path}
变量。而是在配置中显式指定版本存储的本机文件系统路径。
版本控制配置的结构为:
<Versioning rootPath="${rep.home}/version">
<FileSystem .../>
<PersistenceManager .../>
<ISMLocking .../> <!-- optional, available since 1.4 -->
</Versioning>
版本控制配置元素是:
- FileSystem: 虚拟文件系统传递给持久性管理器。
- PersistenceManager: 版本存储的持久性配置。
- ISMLocking: 锁定配置以同时访问工作空间内容。
搜索配置
请参阅Jackrabbit Wiki上的“搜索”页面。
持久性配置
持久性管理器是配置中最重要的部分之一,因为它实际上负责存储节点和属性。有很多种非常不同的实现,但是大多数实现都使用数据库来存储数据。如果您使用数据库PM并希望连接到外部数据库,则可能还必须设置数据库。这可能包括允许Jackrabbit数据库用户创建表的访问权限,因为表的名称通常取决于工作区名称(有关更多信息,请参见各个PM的javadoc)。
对于大型二进制属性,可以选择使用DataStore而不是Persistence Manager。
有关更多详细信息和可用PM的概述,请参阅Jackrabbit Wiki上的PersistenceManagerFAQ页面。
如果使用数据库持久性管理器,则配置的数据库连接不得处于外部事务管理器的控制之下。
Jackrabbit在更高级别上实现了分布式XA事务支持,并希望完全控制基础数据库连接。
文件系统配置
Jackrabbit的早期版本旨在使用FileSystem接口中定义的虚拟文件系统层抽象其持久性机制。这种低层次的方法在实践中效果不佳,因此大多数持久性抽象现在都在更高层次上进行了处理。但是,Jackrabbit的某些部分仍使用此文件系统抽象。
在 bean配置元素中配置了虚拟文件系统。有关可用选项,请参阅主要文件系统实现LocalFileSystem,DatabaseFileSystem(包括子类)和MemoryFileSystem。推荐的替代方法是使用LocalFileSystem
实现,该实现仅将抽象文件系统访问映射到本机文件系统中的指定目录。
集群配置
请参阅Jackrabbit Wiki上的“集群”页面。
数据存储配置
请参阅Jackrabbit Wiki上的“数据存储”页面。
项目状态锁定配置
TODO
配置密码 (从Jackrabbit 2.3开始)
当使用数据库支持的持久性管理器或其他组件时,通常需要在Jackrabbit配置中包括数据库密码。
如果您不想在配置文件中以纯文本形式存储此类密码,则可以将密码编码为base64,并以{base64}
作为前缀。
在将密码传递给基础数据库之前,Jackrabbit将自动对其进行解码。
<param name="password" value="test"/>
<param name="password" value="{base64}dGVzdA=="/>
原文地址:http://jackrabbit.apache.org/jcr/jackrabbit-configuration.html