Jackrabbit集群原理
Jackrabbit 的框架本身已经实现了集群部署。它的集群原理图如下:
Jackrabbit的集群原理:每个应用系统拥有各自的内容仓库,每个应用系统对本身的内容仓库做了增加、删除、修改的操作,都会在内容仓库集群汇聚点做个记录,然后其他的内容仓库会同步集群汇聚点上的操作。
比如由上图:应用系统1修改内容仓库1的某个节点信息(第1步骤),应用系统1同时在内容仓库集群汇聚点做了记录(第2步骤),然后内容仓库2会同步集群汇聚点上的操作(第3步骤)。
集群的必要条件
1. 必须保证每个集群节点的仓库persistence managers 保存数据到同一个地方、所有的集群节点都可以访问。
2. 每个集群节点要有唯一的id
3. 内容仓库集群汇聚点存储类型可以是数据库或者文件。
对于第一个条件,因为在集群汇聚点上只是保存了内容仓库修改项的唯一标识,只有别的集群点同步该修改项时,才会读取内容仓库修改项的实际数据。
对于第二个条件,集群汇聚点为了标识那个集群点做了修改。
对于第三个条件,一定要确保集群汇聚点上的信息能够给所有的集群点访问。
集群配置步骤
1、在repository.xml文件中增加
<Cluster id="node1" syncDelay="5" >
<Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal">
<param name="revision" value="${rep.home}/revision.log"/>
<param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<param name="url" value="jdbc:oracle:thin:@172.16.14.237:1521:ora10g64" />
<param name="user" value="exkm" />
<param name="password" value="exkm" />
<param name="schema" value="oracle"/>
<param name="schemaObjectPrefix" value="J_C_"/>
</Journal>
</Cluster>
上面表示集群汇聚点存储类型是存在oracle数据库。只要配置正确后,我们将在oracle数据库中找到两个表:J_C_GLOBAL_REVISION和J_C_JOURNAL。
例子:
比如你在应用系统1上的repository.xml增加了以下内容
<Cluster id="node1" syncDelay="5" >
<Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal">
<param name="revision" value="${rep.home}/revision.log"/>
<param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<param name="url" value="jdbc:oracle:thin:@172.16.14.237:1521:ora10g64" />
<param name="user" value="exkm" />
<param name="password" value="exkm" />
<param name="schema" value="oracle"/>
<param name="schemaObjectPrefix" value="J_C_"/>
</Journal>
</Cluster>
另外应用系统2的repository.xml可以增加了以下内容
<Cluster id="node2" syncDelay="5" >
<Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal">
<param name="revision" value="${rep.home}/revision.log"/>
<param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<param name="url" value="jdbc:oracle:thin:@172.16.14.237:1521:ora10g64" />
<param name="user" value="exkm" />
<param name="password" value="exkm" />
<param name="schema" value="oracle"/>
<param name="schemaObjectPrefix" value="J_C_"/>
</Journal>
</Cluster>
注意<Cluster >节点上的id不同。