[exo-jcr-commits] exo-jcr SVN: r1904 - jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Feb 18 10:38:57 EST 2010
Author: sergiykarpenko
Date: 2010-02-18 10:38:57 -0500 (Thu, 18 Feb 2010)
New Revision: 1904
Modified:
jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/cluster-config.xml
jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/intro.xml
jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/jbosscache-configuration-templates.xml
jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/lock-manager-config.xml
jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/query-handler-config.xml
Log:
EXOJCR-490: links added
Modified: jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/cluster-config.xml
===================================================================
--- jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/cluster-config.xml 2010-02-18 15:27:16 UTC (rev 1903)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/cluster-config.xml 2010-02-18 15:38:57 UTC (rev 1904)
@@ -1,247 +1,262 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter>
- <?dbhtml filename="cluster-config.html"?>
-
- <title>Configuring JBoss AS with eXo JCR in cluster</title>
-
- <section>
- <title>Launching Cluster</title>
-
- <section>
- <title>Deploying eXo JCR to JBoss As</title>
-
- <para>To deploy eXo JCR to JBoss As follow next steps:</para>
-
- <orderedlist>
- <listitem>
- <para>Dowload the latest version of eXo JCR ear distribution from
- [LINK THERE]</para>
- </listitem>
-
- <listitem>
- <para>Copy <jcr.ear> into
- <%jboss_home%/server/default/deploy></para>
- </listitem>
-
- <listitem>
- <para>Put exo-configuration.xml to the root
- <%jboss_home%/exo-configuration.xml></para>
- </listitem>
-
- <listitem>
- <para>Configure JAAS by inserting XML fragment shown below into
- <%jboss_home%/server/default/conf/login-config.xml></para>
-
- <programlisting><application-policy name="exo-domain">
- <authentication>
- <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required"></login-module>
- </authentication>
-</application-policy></programlisting>
- </listitem>
-
- <listitem>
- <para>Start server:</para>
-
- <itemizedlist>
- <listitem>
- <para>bin/run.sh for Unix</para>
- </listitem>
-
- <listitem>
- <para>bin/run.bat for Windows</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para>Try accessing <ulink
- url="http://localhost:8080/browser">http://localhost:8080/browser</ulink>
- with root/exo as login/password if you have done everything right,
- you'll get access to repository browser.</para>
- </listitem>
- </orderedlist>
- </section>
-
- <section id="sect_conf_cluster_jcr">
- <title>Configuring JCR to use external configuration</title>
-
- <itemizedlist>
- <listitem>
- <para>To manually configure repository create a new configuration
- file (f.e. exo-jcr-configuration.xml). For details see <ulink
- url="http://wiki.exoplatform.org/xwiki/bin/view/JCR/#HConfiguration">JCR
- Configuration</ulink>. Your configuration must look like:</para>
-
- <programlisting><repository-service default-repository="repository1">
- <repositories>
- <repository name="repository1" system-workspace="ws1" default-workspace="ws1">
- <security-domain>exo-domain</security-domain>
- <access-control>optional</access-control>
- <authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
- <workspaces>
- <workspace name="ws1">
- <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
- <properties>
- <property name="source-name" value="jdbcjcr" />
- <property name="dialect" value="oracle" />
- <property name="multi-db" value="false" />
- <property name="update-storage" value="false" />
- <property name="max-buffer-size" value="200k" />
- <property name="swap-directory" value="../temp/swap/production" />
- </properties>
- <value-storages>
- see "<link linkend="conf_value_storage">Value storage configuration</link>" part.
- </value-storages>
- </container>
- <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
- <properties>
- <property name="root-nodetype" value="nt:unstructured" />
- </properties>
- </initializer>
- <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
- see "<link linkend="conf_cache">Cache configuration</link>" part.
- </cache>
- <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
- see "<link linkend="conf_indexer">Indexer configuration</link>" part.
- </query-handler>
- <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
- see "<link linkend="conf_lock_manager">Lock Manager configuration</link>" part.
- </lock-manager>
- </workspace>
- <workspace name="ws2">
- ...
- </workspace>
- <workspace name="wsN">
- ...
- </workspace>
- </workspaces>
- </repository>
- </repositories>
-</repository-service> </programlisting>
- </listitem>
-
- <listitem>
- <para>and update RepositoryServiceConfiguration configuration in
- exo-configuration.xml to use this file:<programlisting><component>
- <key>org.exoplatform.services.jcr.config.RepositoryServiceConfiguration</key>
- <type>org.exoplatform.services.jcr.impl.config.RepositoryServiceConfigurationImpl</type>
- <init-params>
- <value-param>
- <name>conf-path</name>
- <description>JCR configuration file</description>
- <value>exo-jcr-configuration.xml</value>
- </value-param>
- </init-params>
-</component></programlisting></para>
- </listitem>
- </itemizedlist>
- </section>
- </section>
-
- <section>
- <title>Requirements</title>
-
- <section>
- <title>Enviorenment requirements</title>
-
- <itemizedlist>
- <listitem>
- <para>Every node of cluster MUST have the same mounted Network File
- System with read and write permissions on it.</para>
-
- <para>"/mnt/tornado" - path to the mounted Network File System (all
- cluster nodes must use the same NFS)</para>
- </listitem>
-
- <listitem>
- <para>Every node of cluster MUST use the same database</para>
- </listitem>
-
- <listitem>
- <para>Same Clusters on different nodes MUST have the same cluster
- names (f.e if Indexer cluster in workspace production on the first
- node has name "production_indexer_cluster", then indexer clusters in
- workspace production on all other nodes MUST have the same name
- "production_indexer_cluster" )</para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section>
- <title>Enviorenment requirements</title>
-
- <para>Configuration of every workspace in repository must contains of
- such parts:</para>
-
- <itemizedlist>
- <listitem id="conf_value_storage">
- <para>Value Storage configuration:</para>
-
- <programlisting><value-storages>
- <value-storage id="system" class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
- <properties>
- <property name="path" value="/mnt/tornado/temp/values/production" /> <!--path within NFS where ValueStorage will hold it's data-->
- </properties>
- <filters>
- <filter property-type="Binary" />
- </filters>
- </value-storage>
-</value-storages></programlisting>
- </listitem>
-
- <listitem id="conf_cache">
- <para>Cache configuration:</para>
-
- <programlisting><cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
- <properties>
- <property name="jbosscache-configuration" value="jar:/conf/portal/test-jbosscache-data.xml" /> <!-- path to JBoss Cache configuration for data storage -->
- <property name="jgroups-configuration" value="jar:/conf/portal/udp-mux.xml" /> <!-- path to JGroups configuration -->
- <property name="jbosscache-cluster-name" value="JCR_Cluster_cache_production" /> <!-- JBoss Cache data storage cluster name -->
- <property name="jgroups-multiplexer-stack" value="true" />
- </properties>
-</cache> </programlisting>
- </listitem>
-
- <listitem id="conf_indexer">
- <para>Indexer configuration:</para>
-
- <programlisting><query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
- <properties>
- <property name="changesfilter-class" value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter" />
- <property name="index-dir" value="/mnt/tornado/temp/jcrlucenedb/production" /> <!-- path within NFS where ValueStorage will hold it's data -->
- <property name="jbosscache-configuration" value="jar:/conf/portal/test-jbosscache-indexer.xml" /> <!-- path to JBoss Cache configuration for indexer -->
- <property name="jgroups-configuration" value="jar:/conf/portal/udp-mux.xml" /> <!-- path to JGroups configuration -->
- <property name="jbosscache-cluster-name" value="JCR_Cluster_indexer_production" /> <!-- JBoss Cache indexer cluster name -->
- <property name="jgroups-multiplexer-stack" value="true" />
- </properties>
-</query-handler> </programlisting>
- </listitem>
-
- <listitem id="conf_lock_manager">
- <para>Lock Manager configuration:</para>
-
- <programlisting><lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
- <properties>
- <property name="time-out" value="15m" />
- <property name="jbosscache-configuration" value="jar:/conf/portal/test-jbosscache-lock.xml" /> <!-- path to JBoss Cache configuration for lock manager -->
- <property name="jgroups-configuration" value="jar:/conf/portal/udp-mux.xml" /> <!-- path to JGroups configuration -->
- <property name="jgroups-multiplexer-stack" value="true" />
- <property name="jbosscache-cluster-name" value="JCR_Cluster_lock_production" /> <!-- JBoss Cache locks cluster name -->
-
- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_production"/> <!-- the name of the DB table where lock's data will be stored -->
- <property name="jbosscache-cl-cache.jdbc.table.create" value="true"/>
- <property name="jbosscache-cl-cache.jdbc.table.drop" value="false"/>
- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_production_pk"/>
- <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn"/>
- <property name="jbosscache-cl-cache.jdbc.node.column" value="node"/>
- <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent"/>
- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr"/>
- </properties>
-</lock-manager></programlisting>
- </listitem>
- </itemizedlist>
- </section>
- </section>
-</chapter>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="ch_cluster_configuration">
+ <?dbhtml filename="cluster-config.html"?>
+
+ <title>Configuring JBoss AS with eXo JCR in cluster</title>
+
+ <section>
+ <title>Launching Cluster</title>
+
+ <section>
+ <title>Deploying eXo JCR to JBoss As</title>
+
+ <para>To deploy eXo JCR to JBoss As follow next steps:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Dowload the latest version of eXo JCR ear distribution from
+ [LINK THERE]</para>
+ </listitem>
+
+ <listitem>
+ <para>Copy <jcr.ear> into
+ <%jboss_home%/server/default/deploy></para>
+ </listitem>
+
+ <listitem>
+ <para>Put exo-configuration.xml to the root
+ <%jboss_home%/exo-configuration.xml></para>
+ </listitem>
+
+ <listitem>
+ <para>Configure JAAS by inserting XML fragment shown below into
+ <%jboss_home%/server/default/conf/login-config.xml></para>
+
+ <programlisting><application-policy name="exo-domain">
+ <authentication>
+ <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required"></login-module>
+ </authentication>
+</application-policy></programlisting>
+ </listitem>
+
+ <listitem>
+ <para>Start server:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>bin/run.sh for Unix</para>
+ </listitem>
+
+ <listitem>
+ <para>bin/run.bat for Windows</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>Try accessing <uri>http://localhost:8080/browser</uri> with
+ root/exo as login/password if you have done everything right, you'll
+ get access to repository browser.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section id="sect_conf_cluster_jcr">
+ <title>Configuring JCR to use external configuration</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>To manually configure repository create a new configuration
+ file (f.e. exo-jcr-configuration.xml). For details see <link
+ linkend="ch_configuration">JCR Configuration</link>. Your
+ configuration must look like:</para>
+
+ <programlisting><repository-service default-repository="repository1">
+ <repositories>
+ <repository name="repository1" system-workspace="ws1" default-workspace="ws1">
+ <security-domain>exo-domain</security-domain>
+ <access-control>optional</access-control>
+ <authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
+ <workspaces>
+ <workspace name="ws1">
+ <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+ <properties>
+ <property name="source-name" value="jdbcjcr" />
+ <property name="dialect" value="oracle" />
+ <property name="multi-db" value="false" />
+ <property name="update-storage" value="false" />
+ <property name="max-buffer-size" value="200k" />
+ <property name="swap-directory" value="../temp/swap/production" />
+ </properties>
+ <value-storages>
+ see "<link linkend="conf_value_storage">Value storage configuration</link>" part.
+ </value-storages>
+ </container>
+ <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+ <properties>
+ <property name="root-nodetype" value="nt:unstructured" />
+ </properties>
+ </initializer>
+ <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+ see "<link linkend="conf_cache">Cache configuration</link>" part.
+ </cache>
+ <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+ see "<link linkend="conf_indexer">Indexer configuration</link>" part.
+ </query-handler>
+ <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+ see "<link linkend="conf_lock_manager">Lock Manager configuration</link>" part.
+ </lock-manager>
+ </workspace>
+ <workspace name="ws2">
+ ...
+ </workspace>
+ <workspace name="wsN">
+ ...
+ </workspace>
+ </workspaces>
+ </repository>
+ </repositories>
+</repository-service> </programlisting>
+ </listitem>
+
+ <listitem>
+ <para>and update RepositoryServiceConfiguration configuration in
+ exo-configuration.xml to use this file:<programlisting><component>
+ <key>org.exoplatform.services.jcr.config.RepositoryServiceConfiguration</key>
+ <type>org.exoplatform.services.jcr.impl.config.RepositoryServiceConfigurationImpl</type>
+ <init-params>
+ <value-param>
+ <name>conf-path</name>
+ <description>JCR configuration file</description>
+ <value>exo-jcr-configuration.xml</value>
+ </value-param>
+ </init-params>
+</component></programlisting></para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
+
+ <section>
+ <title>Requirements</title>
+
+ <section>
+ <title>Enviorenment requirements</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Every node of cluster MUST have the same mounted Network File
+ System with read and write permissions on it.</para>
+
+ <para>"/mnt/tornado" - path to the mounted Network File System (all
+ cluster nodes must use the same NFS)</para>
+ </listitem>
+
+ <listitem>
+ <para>Every node of cluster MUST use the same database</para>
+ </listitem>
+
+ <listitem>
+ <para>Same Clusters on different nodes MUST have the same cluster
+ names (f.e if Indexer cluster in workspace production on the first
+ node has name "production_indexer_cluster", then indexer clusters in
+ workspace production on all other nodes MUST have the same name
+ "production_indexer_cluster" )</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section>
+ <title>Enviorenment requirements</title>
+
+ <para>Configuration of every workspace in repository must contains of
+ such parts:</para>
+
+ <itemizedlist>
+ <listitem id="conf_value_storage">
+ <para>Value Storage configuration:</para>
+
+ <programlisting><value-storages>
+ <value-storage id="system" class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+ <properties>
+ <property name="path" value="/mnt/tornado/temp/values/production" /> <!--path within NFS where ValueStorage will hold it's data-->
+ </properties>
+ <filters>
+ <filter property-type="Binary" />
+ </filters>
+ </value-storage>
+</value-storages></programlisting>
+
+ <para>See more about <link
+ linkend="ch_external_value_storages">ValueStorage
+ configuration</link>.</para>
+ </listitem>
+
+ <listitem id="conf_cache">
+ <para>Cache configuration:</para>
+
+ <programlisting><cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+ <properties>
+ <property name="jbosscache-configuration" value="jar:/conf/portal/test-jbosscache-data.xml" /> <!-- path to JBoss Cache configuration for data storage -->
+ <property name="jgroups-configuration" value="jar:/conf/portal/udp-mux.xml" /> <!-- path to JGroups configuration -->
+ <property name="jbosscache-cluster-name" value="JCR_Cluster_cache_production" /> <!-- JBoss Cache data storage cluster name -->
+ <property name="jgroups-multiplexer-stack" value="true" />
+ </properties>
+</cache> </programlisting>
+
+ <para>See more about <link
+ linkend="ch_jbosscache_config_templates">Cache
+ configuration</link>.</para>
+ </listitem>
+
+ <listitem id="conf_indexer">
+ <para>Indexer configuration:</para>
+
+ <programlisting><query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+ <properties>
+ <property name="changesfilter-class" value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter" />
+ <property name="index-dir" value="/mnt/tornado/temp/jcrlucenedb/production" /> <!-- path within NFS where ValueStorage will hold it's data -->
+ <property name="jbosscache-configuration" value="jar:/conf/portal/test-jbosscache-indexer.xml" /> <!-- path to JBoss Cache configuration for indexer -->
+ <property name="jgroups-configuration" value="jar:/conf/portal/udp-mux.xml" /> <!-- path to JGroups configuration -->
+ <property name="jbosscache-cluster-name" value="JCR_Cluster_indexer_production" /> <!-- JBoss Cache indexer cluster name -->
+ <property name="jgroups-multiplexer-stack" value="true" />
+ </properties>
+</query-handler> </programlisting>
+
+ <para>See more about <link
+ linkend="ch_query_handler_config">QueryHandler
+ configuration</link>.</para>
+ </listitem>
+
+ <listitem id="conf_lock_manager">
+ <para>Lock Manager configuration:</para>
+
+ <programlisting><lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="jar:/conf/portal/test-jbosscache-lock.xml" /> <!-- path to JBoss Cache configuration for lock manager -->
+ <property name="jgroups-configuration" value="jar:/conf/portal/udp-mux.xml" /> <!-- path to JGroups configuration -->
+ <property name="jgroups-multiplexer-stack" value="true" />
+ <property name="jbosscache-cluster-name" value="JCR_Cluster_lock_production" /> <!-- JBoss Cache locks cluster name -->
+
+ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_production"/> <!-- the name of the DB table where lock's data will be stored -->
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true"/>
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false"/>
+ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_production_pk"/>
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn"/>
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node"/>
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent"/>
+ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr"/>
+ </properties>
+</lock-manager></programlisting>
+
+ <para>See more about <link
+ linkend="ch_lock_manager_config">LockManager
+ configuration</link>.</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
+</chapter>
Modified: jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/intro.xml
===================================================================
--- jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/intro.xml 2010-02-18 15:27:16 UTC (rev 1903)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/intro.xml 2010-02-18 15:38:57 UTC (rev 1904)
@@ -1,70 +1,70 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter>
- <?dbhtml filename="intro.html"?>
- <title>Introduction in eXoJCR</title>
- <section>
- <title>JCR (JSR-170) API main concepts</title>
-
- <para>Java Content Repository API as well as other Java language related
- standards is created within the Java Community Process http://jcp.org/ as
- a result of collaboration of an expert group and the Java community and
- known as JSR-170 (Java Specification Request)
- http://www.jcp.org/en/jsr/detail?id=170.</para>
-
- <para></para>
-
- <section>
- <title>Data model</title>
-
- <para>As the main purpose of content repository is to maintain the data
- - the heart of CR is the data model:</para>
-
- <para><itemizedlist>
- <listitem>
- <para>The main data storage abstraction of JCR's data model is a
- workspace</para>
- </listitem>
-
- <listitem>
- <para>Each repository should have one or more workspaces</para>
- </listitem>
-
- <listitem>
- <para>The content is stored in a workspace as a hierarchy of
- items</para>
- </listitem>
-
- <listitem>
- <para>Each workspace has its own hierarchy of items</para>
- </listitem>
- </itemizedlist></para>
-
- <figure>
- <title>Item hierarchy</title>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/item-hierarchy.gif" />
- </imageobject>
- </mediaobject>
- </figure>
-
- <para>Node is intended to support the data hierarchy. They are typed
- using namespaced names which allows the content to be structured
- according to standardized constraints. A node may be versioned through
- an associated version graph (optional feature)</para>
-
- <para>Property stored data are values of predefined types (String,
- Binary, Long, Boolean, Double, Date, Reference, Path).</para>
-
- <para>It is important to note that the data model for the interface (the
- repository model) is rarely the same as the data models used by the
- repository's underlying storage subsystems. The repository knows how to
- make the client's changes persistent because that is part of the
- repository configuration, rather than part of the application
- programming task.</para>
- </section>
- </section>
-</chapter>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter>
+ <?dbhtml filename="intro.html"?>
+
+ <title>Introduction in eXoJCR</title>
+
+ <section>
+ <title>JCR (JSR-170) API main concepts</title>
+
+ <para>Java Content Repository API as well as other Java language related
+ standards is created within the Java Community Process http://jcp.org/ as
+ a result of collaboration of an expert group and the Java community and
+ known as JSR-170 (Java Specification Request)
+ http://www.jcp.org/en/jsr/detail?id=170.</para>
+
+ <section>
+ <title>Data model</title>
+
+ <para>As the main purpose of content repository is to maintain the data
+ - the heart of CR is the data model:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>The main data storage abstraction of JCR's data model is a
+ workspace</para>
+ </listitem>
+
+ <listitem>
+ <para>Each repository should have one or more workspaces</para>
+ </listitem>
+
+ <listitem>
+ <para>The content is stored in a workspace as a hierarchy of
+ items</para>
+ </listitem>
+
+ <listitem>
+ <para>Each workspace has its own hierarchy of items</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <figure>
+ <title>Item hierarchy</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/item-hierarchy.gif" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Node is intended to support the data hierarchy. They are typed
+ using namespaced names which allows the content to be structured
+ according to standardized constraints. A node may be versioned through
+ an associated version graph (optional feature)</para>
+
+ <para>Property stored data are values of predefined types (String,
+ Binary, Long, Boolean, Double, Date, Reference, Path).</para>
+
+ <para>It is important to note that the data model for the interface (the
+ repository model) is rarely the same as the data models used by the
+ repository's underlying storage subsystems. The repository knows how to
+ make the client's changes persistent because that is part of the
+ repository configuration, rather than part of the application
+ programming task.</para>
+ </section>
+ </section>
+</chapter>
Modified: jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/jbosscache-configuration-templates.xml
===================================================================
--- jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/jbosscache-configuration-templates.xml 2010-02-18 15:27:16 UTC (rev 1903)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/jbosscache-configuration-templates.xml 2010-02-18 15:38:57 UTC (rev 1904)
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter>
+<chapter id="ch_jbosscache_config_templates">
+
<?dbhtml filename="jbosscache-configuration-templates.html"?>
<title>JBoss Cache configuration</title>
Modified: jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/lock-manager-config.xml
===================================================================
--- jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/lock-manager-config.xml 2010-02-18 15:27:16 UTC (rev 1903)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/lock-manager-config.xml 2010-02-18 15:38:57 UTC (rev 1904)
@@ -1,440 +1,442 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter>
- <?dbhtml filename="lock-manager-config.html"?>
-
- <title>LockManager configuration</title>
-
- <section>
- <title>Introduction</title>
-
- <para>What LockManager does?</para>
-
- <para>In common words, LockManager stores lock objects, so it can give
- Lock object or can release it, etc.</para>
-
- <para>Also LockManager is responsible for removing Locks that live too
- long. This parameter may be configured with "time-out" property.</para>
-
- <para>JCR provide two base implementation of LockManager:</para>
-
- <itemizedlist>
- <listitem>
- <para>org.exoplatform.services.jcr.impl.core.lock.LockManagerImpl;</para>
- </listitem>
-
- <listitem>
- <para>org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl;</para>
- </listitem>
- </itemizedlist>
-
- <para>In this article we will talk mostly about
- CacheableLockManagerImpl.</para>
-
- <para>You can enable LockManager by adding lock-manager-configuration to
- workspace-configuration.</para>
-
- <para>For example:</para>
-
- <programlisting><workspace name="ws">
- ...
- <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
- <properties>
- <property name="time-out" value="15m" />
- ...
- </properties>
- </lock-manager>
- ...
-</workspace></programlisting>
- </section>
-
- <section>
- <title>LockManagerImpl</title>
-
- <para>LockManagerImpl is simple implementation of LockManager, and also
- faster than CacheableLockManager. It stores Lock objects in HashMap and
- may also persist Locks if LockPersister is configured. LockManagerImpl do
- not support replication in any way.</para>
-
- <para>See <ulink
- url="http://wiki.exoplatform.com/xwiki/bin/view/JCR/Configuration#HLockManagerconfiguration3A">LockManagerImpl
- configuration</ulink></para>
- </section>
-
- <section>
- <title>CacheableLockManagerImpl</title>
-
- <para>CacheableLockManagerImpl stores Lock object in JBoss-cache, so Locks
- are replicable and affects on cluster, not only a single node. Also
- JBoss-cache has JDBCCacheLoader, so locks will be stored to
- database.</para>
-
- <para>Both implementation supports Expired Locks removing. There is
- LockRemover - separate thread, that periodically ask LockManager for Locks
- that lives to much and must be removed. So, timeout for LockRemover may be
- set as follows, default value is 30m.</para>
-
- <programlisting><properties>
- <property name="time-out" value="10m" />
- ...
-</properties></programlisting>
-
- <section>
- <title>Configuration</title>
-
- <para>Replication requirements are same as for Cache</para>
-
- <para>Full JCR configuration example you can see there <xref
- linkend="sect_conf_cluster_jcr"/></para>
-
- <para>Common tips:</para>
-
- <itemizedlist>
- <listitem>
- <para>clusterName ("jbosscache-cluster-name") must be unique;</para>
- </listitem>
-
- <listitem>
- <para>cache.jdbc.table.name must be unique per datasource;</para>
- </listitem>
-
- <listitem>
- <para>cache.jdbc.fqn.type must and cache.jdbc.node.type must be
- configured according to used database;</para>
- </listitem>
- </itemizedlist>
-
- <para>There is few ways how to configure CacheableLockManagerImpl, and
- all of them configures JBoss-cache and JDBCCacheLoader.</para>
-
- <para>See <ulink
- url="http://community.jboss.org/wiki/JBossCacheJDBCCacheLoader">http://community.jboss.org/wiki/JBossCacheJDBCCacheLoader</ulink></para>
- </section>
-
- <section>
- <title>Simple JbossCache Configuraion</title>
-
- <para>First one is - put JbossCache configuraion file path to
- CacheableLockManagerImpl</para>
-
- <para><note>
- <para>This configuration is not so good, as you can think. Because
- repository may contain many workspaces, and each workspace must
- contain LockManager configuration, and LockManager config may
- contain JbossCache config file. So total configuration is growing
- up. But it is usefull if we want a single LockManager with special
- configuration.</para>
- </note></para>
-
- <para>Config is:</para>
-
- <programlisting><lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
- <properties>
- <property name="time-out" value="15m" />
- <property name="jbosscache-configuration" value="conf/standalone/cluster/test-jbosscache-lock-config.xml" />
- </properties>
-</lock-manager></programlisting>
-
- <para>test-jbosscache-lock-config.xml<programlisting><?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.2">
-
- <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false" lockAcquisitionTimeout="20000" />
-
- <clustering mode="replication" clusterName="JBoss-Cache-Lock-Cluster_Name">
- <stateRetrieval timeout="20000" fetchInMemoryState="false" nonBlocking="true" />
- <jgroupsConfig>
-
- <TCP bind_addr="127.0.0.1" start_port="9800" loopback="true" recv_buf_size="20000000" send_buf_size="640000" discard_incompatible_packets="true"
- max_bundle_size="64000" max_bundle_timeout="30" use_incoming_packet_handler="true" enable_bundling="false" use_send_queues="false" sock_conn_timeout="300"
- skip_suspected_members="true" use_concurrent_stack="true" thread_pool.enabled="true" thread_pool.min_threads="1" thread_pool.max_threads="25"
- thread_pool.keep_alive_time="5000" thread_pool.queue_enabled="false" thread_pool.queue_max_size="100" thread_pool.rejection_policy="run"
- oob_thread_pool.enabled="true" oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="8" oob_thread_pool.keep_alive_time="5000"
- oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="100" oob_thread_pool.rejection_policy="run" />
- <MPING timeout="2000" num_initial_members="2" mcast_port="34540" bind_addr="127.0.0.1" mcast_addr="224.0.0.1" />
-
-
- <MERGE2 max_interval="30000" min_interval="10000" />
- <FD_SOCK />
- <FD max_tries="5" shun="true" timeout="10000" />
- <VERIFY_SUSPECT timeout="1500" />
- <pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800" use_mcast_xmit="false" />
- <UNICAST timeout="300,600,1200,2400,3600" />
- <pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000" />
- <pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000" view_bundling="true" />
- <FRAG2 frag_size="60000" />
- <pbcast.STREAMING_STATE_TRANSFER />
- <pbcast.FLUSH timeout="0" />
-
- </jgroupsConfig
-
- <sync />
- </clustering>
-
- <loaders passivation="false" shared="true">
- <preload>
- <node fqn="/" />
- </preload>
- <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
- <properties>
- cache.jdbc.table.name=jcrlocks_ws
- cache.jdbc.table.create=true
- cache.jdbc.table.drop=false
- cache.jdbc.table.primarykey=jcrlocks_ws_pk
- cache.jdbc.fqn.column=fqn
- cache.jdbc.fqn.type=VARCHAR(512)
- cache.jdbc.node.column=node
- cache.jdbc.node.type=<BLOB>
- cache.jdbc.parent.column=parent
- cache.jdbc.datasource=jdbcjcr
- </properties>
- </loader>
-
- </loaders>
-
-</jbosscache></programlisting></para>
-
- <para>Configuration requirements:</para>
-
- <itemizedlist>
- <listitem>
- <para><clustering mode="replication"
- clusterName="JBoss-Cache-Lock-Cluster_Name"> - cluster name must
- be unique;</para>
- </listitem>
-
- <listitem>
- <para><quote>cache.jdbc.table.name</quote> must be unique per
- datasource;</para>
- </listitem>
-
- <listitem>
- <para><quote>cache.jdbc.node.type</quote> and
- <quote>cache.jdbc.fqn.type</quote> must be configured according to
- using database. See <link endterm="datatypes.title"
- linkend="datatypes"></link> .</para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section>
- <title>Template JBossCache Configuration</title>
-
- <para>Second one is - use template JBoss-cache configuration for all
- LockManagers</para>
-
- <para><citetitle>Lock template configuration</citetitle></para>
-
- <para>test-jbosscache-lock.xml</para>
-
- <programlisting><?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.1">
-
- <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false"
- lockAcquisitionTimeout="20000" />
-
- <clustering mode="replication" clusterName="${jbosscache-cluster-name}">
- <stateRetrieval timeout="20000" fetchInMemoryState="false" />
- <jgroupsConfig multiplexerStack="jcr.stack" />
- <sync />
- </clustering>
-
- <loaders passivation="false" shared="true">
- <!-- All the data of the JCR locks needs to be loaded at startup -->
- <preload>
- <node fqn="/" />
- </preload>
- <!--
- For another cache-loader class you should use another template with
- cache-loader specific parameters
- ->
- <loader class="org.jboss.cache.loader.JDBCCacheLoader" async=q"false" fetchPersistentState="false"
- ignoreModifications="false" purgeOnStartup="false">
- <properties>
- cache.jdbc.table.name=${jbosscache-cl-cache.jdbc.table.name}
- cache.jdbc.table.create=${jbosscache-cl-cache.jdbc.table.create}
- cache.jdbc.table.drop=${jbosscache-cl-cache.jdbc.table.drop}
- cache.jdbc.table.primarykey=${jbosscache-cl-cache.jdbc.table.primarykey}
- cache.jdbc.fqn.column=${jbosscache-cl-cache.jdbc.fqn.column}
- cache.jdbc.fqn.type=${jbosscache-cl-cache.jdbc.fqn.type}
- cache.jdbc.node.column=${jbosscache-cl-cache.jdbc.node.column}
- cache.jdbc.node.type=${jbosscache-cl-cache.jdbc.node.type}
- cache.jdbc.parent.column=${jbosscache-cl-cache.jdbc.parent.column}
- cache.jdbc.datasource=${jbosscache-cl-cache.jdbc.datasource}
- </properties>
- </loader>
- </loaders>
-</jbosscache></programlisting>
-
- <para>As you see, all configurable paramaters filled by templates and
- will be replaced by LockManagers conf parameters:</para>
-
- <programlisting><lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
- <properties>
- <property name="time-out" value="15m" />
- <property name="jbosscache-configuration" value="test-jbosscache-lock.xml" />
- <property name="jgroups-configuration" value="udp-mux.xml" />
- <property name="jgroups-multiplexer-stack" value="true" />
- <property name="jbosscache-cluster-name" value="JCR-cluster-locks-ws" />
- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_ws" />
- <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
- <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_ws_pk" />
- <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
- <property name="jbosscache-cl-cache.jdbc.fqn.type" value="AUTO"/>
- <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
- <property name="jbosscache-cl-cache.jdbc.node.type" value="AUTO"/>
- <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" />
- </properties>
-</lock-manager></programlisting>
-
- <para>Configuration requirements:<itemizedlist>
- <listitem>
- <para><quote>jbosscache-cl-cache.jdbc.fqn.column</quote> and
- <quote>jbosscache-cl-cache.jdbc.node.type</quote> is nothing else
- as cache.jdbc.fqn.type and cache.jdbc.node.type in JBoss-Cache
- configuration. You can set those data types according to database
- type (See <link endterm="datatypes.title"
- linkend="datatypes"></link>) or set it as AUTO (or do not set at
- all) and data type will by detected automaticaly.</para>
- </listitem>
-
- <listitem>
- <para>as you see, jgroups-configuration moved to separate config
- file - udp-mux.xml; In our case udp-mux.xml is common JGroup
- config for all components (QueryHandler, cache, LockManager). But
- we, still, can create own config.</para>
- </listitem>
- </itemizedlist></para>
-
- <para>our-udp-mux.xml<programlisting><protocol_stacks>
- <stack name="jcr.stack">
- <config>
- <UDP mcast_addr="228.10.10.10" mcast_port="45588" tos="8" ucast_recv_buf_size="20000000"
- ucast_send_buf_size="640000" mcast_recv_buf_size="25000000" mcast_send_buf_size="640000" loopback="false"
- discard_incompatible_packets="true" max_bundle_size="64000" max_bundle_timeout="30"
- use_incoming_packet_handler="true" ip_ttl="2" enable_bundling="true" enable_diagnostics="true"
- thread_naming_pattern="cl" use_concurrent_stack="true" thread_pool.enabled="true" thread_pool.min_threads="2"
- thread_pool.max_threads="8" thread_pool.keep_alive_time="5000" thread_pool.queue_enabled="true"
- thread_pool.queue_max_size="1000" thread_pool.rejection_policy="discard" oob_thread_pool.enabled="true"
- oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="8" oob_thread_pool.keep_alive_time="5000"
- oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="100" oob_thread_pool.rejection_policy="Run" />
-
- <PING timeout="2000" num_initial_members="3" />
- <MERGE2 max_interval="30000" min_interval="10000" />
- <FD_SOCK />
- <FD timeout="10000" max_tries="5" shun="true" />
- <VERIFY_SUSPECT timeout="1500" />
- <BARRIER />
- <pbcast.NAKACK use_stats_for_retransmission="false" exponential_backoff="150" use_mcast_xmit="true"
- gc_lag="0" retransmit_timeout="50,300,600,1200" discard_delivered_msgs="true" />
- <UNICAST timeout="300,600,1200" />
- <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="1000000" />
- <VIEW_SYNC avg_send_interval="60000" />
- <pbcast.GMS print_local_addr="true" join_timeout="3000" shun="false" view_bundling="true" />
- <FC max_credits="500000" min_threshold="0.20" />
- <FRAG2 frag_size="60000" />
- <!--pbcast.STREAMING_STATE_TRANSFER /-->
- <pbcast.STATE_TRANSFER />
- <!-- pbcast.FLUSH /-->
- </config>
- </stack>
-</protocol_stacks> </programlisting></para>
- </section>
-
- <section id="datatypes">
- <title id="datatypes.title">Data Types in Different Databases</title>
-
- <table>
- <title>Fqn type and node type in different databases</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>DataBase name</entry>
-
- <entry>Node data type</entry>
-
- <entry>FQN data type</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>default</entry>
-
- <entry>BLOB</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
-
- <row>
- <entry>HSSQL</entry>
-
- <entry>OBJECT</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
-
- <row>
- <entry>MySQL</entry>
-
- <entry>LONGBLOB</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
-
- <row>
- <entry>ORACLE</entry>
-
- <entry>BLOB</entry>
-
- <entry>VARCHAR2(512)</entry>
- </row>
-
- <row>
- <entry>PostgreSQL</entry>
-
- <entry>bytea</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
-
- <row>
- <entry>MSSQL</entry>
-
- <entry>VARBINARY(MAX)</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
-
- <row>
- <entry>DB2</entry>
-
- <entry>BLOB</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
-
- <row>
- <entry>Sybase</entry>
-
- <entry>IMAGE</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
-
- <row>
- <entry>Ingres</entry>
-
- <entry>long byte</entry>
-
- <entry>VARCHAR(512)</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </section>
- </section>
-</chapter>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="ch_lock_manager_config">
+ <?dbhtml filename="lock-manager-config.html"?>
+
+ <title>LockManager configuration</title>
+
+ <section>
+ <title>Introduction</title>
+
+ <para>What LockManager does?</para>
+
+ <para>In common words, LockManager stores lock objects, so it can give
+ Lock object or can release it, etc.</para>
+
+ <para>Also LockManager is responsible for removing Locks that live too
+ long. This parameter may be configured with "time-out" property.</para>
+
+ <para>JCR provide two base implementation of LockManager:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><classname>org.exoplatform.services.jcr.impl.core.lock.LockManagerImpl</classname>;</para>
+ </listitem>
+
+ <listitem>
+ <para><classname>org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl</classname>;</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>In this article we will talk mostly about
+ CacheableLockManagerImpl.</para>
+
+ <para>You can enable LockManager by adding lock-manager-configuration to
+ workspace-configuration.</para>
+
+ <para>For example:</para>
+
+ <programlisting><workspace name="ws">
+ ...
+ <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+ <properties>
+ <property name="time-out" value="15m" />
+ ...
+ </properties>
+ </lock-manager>
+ ...
+</workspace></programlisting>
+ </section>
+
+ <section>
+ <title>LockManagerImpl</title>
+
+ <para>LockManagerImpl is simple implementation of LockManager, and also
+ faster than CacheableLockManager. It stores Lock objects in HashMap and
+ may also persist Locks if LockPersister is configured. LockManagerImpl do
+ not support replication in any way.</para>
+
+ <para>See more about LockManager Configuration <link
+ linkend="ch_configuration">here</link>.</para>
+ </section>
+
+ <section>
+ <title>CacheableLockManagerImpl</title>
+
+ <para>CacheableLockManagerImpl stores Lock object in JBoss-cache, so Locks
+ are replicable and affects on cluster, not only a single node. Also
+ JBoss-cache has JDBCCacheLoader, so locks will be stored to
+ database.</para>
+
+ <para>Both implementation supports Expired Locks removing. There is
+ LockRemover - separate thread, that periodically ask LockManager for Locks
+ that lives to much and must be removed. So, timeout for LockRemover may be
+ set as follows, default value is 30m.</para>
+
+ <programlisting><properties>
+ <property name="time-out" value="10m" />
+ ...
+</properties></programlisting>
+
+ <section>
+ <title>Configuration</title>
+
+ <para>Replication requirements are same as for Cache</para>
+
+ <para>Full JCR configuration example you can see <link
+ linkend="sect_conf_cluster_jcr">here</link>.</para>
+
+ <para>Common tips:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><parameter>clusterName</parameter> ("jbosscache-cluster-name")
+ must be unique;</para>
+ </listitem>
+
+ <listitem>
+ <para><parameter>cache.jdbc.table.name</parameter> must be unique
+ per datasource;</para>
+ </listitem>
+
+ <listitem>
+ <para><parameter>cache.jdbc.fqn.type</parameter> must and
+ cache.jdbc.node.type must be configured according to used
+ database;</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>There is few ways how to configure CacheableLockManagerImpl, and
+ all of them configures JBoss-cache and JDBCCacheLoader.</para>
+
+ <para>See <ulink
+ url="http://community.jboss.org/wiki/JBossCacheJDBCCacheLoader">http://community.jboss.org/wiki/JBossCacheJDBCCacheLoader</ulink></para>
+ </section>
+
+ <section>
+ <title>Simple JbossCache Configuraion</title>
+
+ <para>First one is - put JbossCache configuraion file path to
+ CacheableLockManagerImpl</para>
+
+ <para><note>
+ <para>This configuration is not so good, as you can think. Because
+ repository may contain many workspaces, and each workspace must
+ contain LockManager configuration, and LockManager config may
+ contain JbossCache config file. So total configuration is growing
+ up. But it is usefull if we want a single LockManager with special
+ configuration.</para>
+ </note></para>
+
+ <para>Config is:</para>
+
+ <programlisting><lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/cluster/test-jbosscache-lock-config.xml" />
+ </properties>
+</lock-manager></programlisting>
+
+ <para><filename>test-jbosscache-lock-config.xml</filename><programlisting><?xml version="1.0" encoding="UTF-8"?>
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.2">
+
+ <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false" lockAcquisitionTimeout="20000" />
+
+ <clustering mode="replication" clusterName="JBoss-Cache-Lock-Cluster_Name">
+ <stateRetrieval timeout="20000" fetchInMemoryState="false" nonBlocking="true" />
+ <jgroupsConfig>
+
+ <TCP bind_addr="127.0.0.1" start_port="9800" loopback="true" recv_buf_size="20000000" send_buf_size="640000" discard_incompatible_packets="true"
+ max_bundle_size="64000" max_bundle_timeout="30" use_incoming_packet_handler="true" enable_bundling="false" use_send_queues="false" sock_conn_timeout="300"
+ skip_suspected_members="true" use_concurrent_stack="true" thread_pool.enabled="true" thread_pool.min_threads="1" thread_pool.max_threads="25"
+ thread_pool.keep_alive_time="5000" thread_pool.queue_enabled="false" thread_pool.queue_max_size="100" thread_pool.rejection_policy="run"
+ oob_thread_pool.enabled="true" oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="8" oob_thread_pool.keep_alive_time="5000"
+ oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="100" oob_thread_pool.rejection_policy="run" />
+ <MPING timeout="2000" num_initial_members="2" mcast_port="34540" bind_addr="127.0.0.1" mcast_addr="224.0.0.1" />
+
+
+ <MERGE2 max_interval="30000" min_interval="10000" />
+ <FD_SOCK />
+ <FD max_tries="5" shun="true" timeout="10000" />
+ <VERIFY_SUSPECT timeout="1500" />
+ <pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800" use_mcast_xmit="false" />
+ <UNICAST timeout="300,600,1200,2400,3600" />
+ <pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000" />
+ <pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000" view_bundling="true" />
+ <FRAG2 frag_size="60000" />
+ <pbcast.STREAMING_STATE_TRANSFER />
+ <pbcast.FLUSH timeout="0" />
+
+ </jgroupsConfig
+
+ <sync />
+ </clustering>
+
+ <loaders passivation="false" shared="true">
+ <preload>
+ <node fqn="/" />
+ </preload>
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.table.name=jcrlocks_ws
+ cache.jdbc.table.create=true
+ cache.jdbc.table.drop=false
+ cache.jdbc.table.primarykey=jcrlocks_ws_pk
+ cache.jdbc.fqn.column=fqn
+ cache.jdbc.fqn.type=VARCHAR(512)
+ cache.jdbc.node.column=node
+ cache.jdbc.node.type=<BLOB>
+ cache.jdbc.parent.column=parent
+ cache.jdbc.datasource=jdbcjcr
+ </properties>
+ </loader>
+
+ </loaders>
+
+</jbosscache></programlisting></para>
+
+ <para>Configuration requirements:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><clustering mode="replication"
+ clusterName="JBoss-Cache-Lock-Cluster_Name"> - cluster name must
+ be unique;</para>
+ </listitem>
+
+ <listitem>
+ <para><parameter>cache.jdbc.table.name</parameter> must be unique
+ per datasource;</para>
+ </listitem>
+
+ <listitem>
+ <para><parameter>cache.jdbc.node.type</parameter> and
+ <parameter>cache.jdbc.fqn.type</parameter> must be configured
+ according to using database. See <link endterm="datatypes.title"
+ linkend="datatypes"></link> .</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section>
+ <title>Template JBossCache Configuration</title>
+
+ <para>Second one is - use template JBoss-cache configuration for all
+ LockManagers</para>
+
+ <para><citetitle>Lock template configuration</citetitle></para>
+
+ <para><filename>test-jbosscache-lock.xml</filename></para>
+
+ <programlisting><?xml version="1.0" encoding="UTF-8"?>
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.1">
+
+ <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false"
+ lockAcquisitionTimeout="20000" />
+
+ <clustering mode="replication" clusterName="${jbosscache-cluster-name}">
+ <stateRetrieval timeout="20000" fetchInMemoryState="false" />
+ <jgroupsConfig multiplexerStack="jcr.stack" />
+ <sync />
+ </clustering>
+
+ <loaders passivation="false" shared="true">
+ <!-- All the data of the JCR locks needs to be loaded at startup -->
+ <preload>
+ <node fqn="/" />
+ </preload>
+ <!--
+ For another cache-loader class you should use another template with
+ cache-loader specific parameters
+ ->
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async=q"false" fetchPersistentState="false"
+ ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.table.name=${jbosscache-cl-cache.jdbc.table.name}
+ cache.jdbc.table.create=${jbosscache-cl-cache.jdbc.table.create}
+ cache.jdbc.table.drop=${jbosscache-cl-cache.jdbc.table.drop}
+ cache.jdbc.table.primarykey=${jbosscache-cl-cache.jdbc.table.primarykey}
+ cache.jdbc.fqn.column=${jbosscache-cl-cache.jdbc.fqn.column}
+ cache.jdbc.fqn.type=${jbosscache-cl-cache.jdbc.fqn.type}
+ cache.jdbc.node.column=${jbosscache-cl-cache.jdbc.node.column}
+ cache.jdbc.node.type=${jbosscache-cl-cache.jdbc.node.type}
+ cache.jdbc.parent.column=${jbosscache-cl-cache.jdbc.parent.column}
+ cache.jdbc.datasource=${jbosscache-cl-cache.jdbc.datasource}
+ </properties>
+ </loader>
+ </loaders>
+</jbosscache></programlisting>
+
+ <para>As you see, all configurable paramaters filled by templates and
+ will be replaced by LockManagers conf parameters:</para>
+
+ <programlisting><lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="test-jbosscache-lock.xml" />
+ <property name="jgroups-configuration" value="udp-mux.xml" />
+ <property name="jgroups-multiplexer-stack" value="true" />
+ <property name="jbosscache-cluster-name" value="JCR-cluster-locks-ws" />
+ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_ws" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_ws_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.type" value="AUTO"/>
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.node.type" value="AUTO"/>
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" />
+ </properties>
+</lock-manager></programlisting>
+
+ <para>Configuration requirements:<itemizedlist>
+ <listitem>
+ <para><parameter>jbosscache-cl-cache.jdbc.fqn.column</parameter>
+ and <parameter>jbosscache-cl-cache.jdbc.node.type</parameter> is
+ nothing else as cache.jdbc.fqn.type and cache.jdbc.node.type in
+ JBoss-Cache configuration. You can set those data types according
+ to database type (See <link endterm="datatypes.title"
+ linkend="datatypes"></link>) or set it as AUTO (or do not set at
+ all) and data type will by detected automaticaly.</para>
+ </listitem>
+
+ <listitem>
+ <para>as you see, jgroups-configuration moved to separate config
+ file - udp-mux.xml; In our case udp-mux.xml is common JGroup
+ config for all components (QueryHandler, cache, LockManager). But
+ we, still, can create own config.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para><filename>our-udp-mux.xml</filename><programlisting><protocol_stacks>
+ <stack name="jcr.stack">
+ <config>
+ <UDP mcast_addr="228.10.10.10" mcast_port="45588" tos="8" ucast_recv_buf_size="20000000"
+ ucast_send_buf_size="640000" mcast_recv_buf_size="25000000" mcast_send_buf_size="640000" loopback="false"
+ discard_incompatible_packets="true" max_bundle_size="64000" max_bundle_timeout="30"
+ use_incoming_packet_handler="true" ip_ttl="2" enable_bundling="true" enable_diagnostics="true"
+ thread_naming_pattern="cl" use_concurrent_stack="true" thread_pool.enabled="true" thread_pool.min_threads="2"
+ thread_pool.max_threads="8" thread_pool.keep_alive_time="5000" thread_pool.queue_enabled="true"
+ thread_pool.queue_max_size="1000" thread_pool.rejection_policy="discard" oob_thread_pool.enabled="true"
+ oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="8" oob_thread_pool.keep_alive_time="5000"
+ oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="100" oob_thread_pool.rejection_policy="Run" />
+
+ <PING timeout="2000" num_initial_members="3" />
+ <MERGE2 max_interval="30000" min_interval="10000" />
+ <FD_SOCK />
+ <FD timeout="10000" max_tries="5" shun="true" />
+ <VERIFY_SUSPECT timeout="1500" />
+ <BARRIER />
+ <pbcast.NAKACK use_stats_for_retransmission="false" exponential_backoff="150" use_mcast_xmit="true"
+ gc_lag="0" retransmit_timeout="50,300,600,1200" discard_delivered_msgs="true" />
+ <UNICAST timeout="300,600,1200" />
+ <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="1000000" />
+ <VIEW_SYNC avg_send_interval="60000" />
+ <pbcast.GMS print_local_addr="true" join_timeout="3000" shun="false" view_bundling="true" />
+ <FC max_credits="500000" min_threshold="0.20" />
+ <FRAG2 frag_size="60000" />
+ <!--pbcast.STREAMING_STATE_TRANSFER /-->
+ <pbcast.STATE_TRANSFER />
+ <!-- pbcast.FLUSH /-->
+ </config>
+ </stack>
+</protocol_stacks> </programlisting></para>
+ </section>
+
+ <section id="datatypes">
+ <title id="datatypes.title">Data Types in Different Databases</title>
+
+ <table>
+ <title>Fqn type and node type in different databases</title>
+
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>DataBase name</entry>
+
+ <entry>Node data type</entry>
+
+ <entry>FQN data type</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>default</entry>
+
+ <entry>BLOB</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+
+ <row>
+ <entry>HSSQL</entry>
+
+ <entry>OBJECT</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+
+ <row>
+ <entry>MySQL</entry>
+
+ <entry>LONGBLOB</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+
+ <row>
+ <entry>ORACLE</entry>
+
+ <entry>BLOB</entry>
+
+ <entry>VARCHAR2(512)</entry>
+ </row>
+
+ <row>
+ <entry>PostgreSQL</entry>
+
+ <entry>bytea</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+
+ <row>
+ <entry>MSSQL</entry>
+
+ <entry>VARBINARY(MAX)</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+
+ <row>
+ <entry>DB2</entry>
+
+ <entry>BLOB</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+
+ <row>
+ <entry>Sybase</entry>
+
+ <entry>IMAGE</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+
+ <row>
+ <entry>Ingres</entry>
+
+ <entry>long byte</entry>
+
+ <entry>VARCHAR(512)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </section>
+ </section>
+</chapter>
Modified: jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/query-handler-config.xml
===================================================================
--- jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/query-handler-config.xml 2010-02-18 15:27:16 UTC (rev 1903)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/query-handler-config.xml 2010-02-18 15:38:57 UTC (rev 1904)
@@ -1,187 +1,194 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter>
- <?dbhtml filename="query-handler-config.html"?>
- <title>QueryHandler configuration</title>
-
- <section>
- <title>How does it work?</title>
-
- <para>Lets talk about indexing content in cluster.</para>
-
- <para>For couple of reasons, we can't replicate index. That's means, some
- data added and indexed on one cluster node, will be replicated to another
- cluster node, but will not be indexed on that node.</para>
-
- <para><citetitle>So, how do the indexing works in cluster
- environment?</citetitle></para>
-
- <para>As, we can not index same data on all nodes of cluster, we must
- index it on one node. Node, that can index data and do changes on lucene
- index, is called "coordinator". Coordinator-node is choosen automaticaly,
- so we do not need special configuration for coordinator.</para>
-
- <para>But, how can another nodes save their changes to lucene
- index?</para>
-
- <para>First of all, data is already saved and replicated to another
- cluster-nodes, so we need only deliver message like "we need to index this
- data" to coordinator. Thats why Jboss-cache is used.</para>
-
- <para>All nodes of cluster writes messages into JBoss-cache but only
- coordinator takes those messages and makes changes Lucene index.</para>
-
- <para><citetitle>How do the search works in cluster
- environment?</citetitle></para>
-
- <para>Search engine do not works with indexer, coordinator, etc. Search
- needs only lucene index. But only one cluster node can change lucene index
- - asking you. Yes - lucene index is shared. So, all cluster nodes must be
- configured to use lucene index from shared directory.</para>
-
- <para>A little bit about indexing process (no matter, cluster or not)
- Indexer do not writes changes to FS lucene index immediately. At first,
- Indexer writes changes to Volatile index. If Volatile index size become
- 1Mb or more it is flushed to FS. Also there is timer, that flushes
- volatile index by timeout. Volatile index timeout configured by
- "max-volatile-time" paremeter.</para>
-
- <para>Common scheme of Shared Index<mediaobject>
- <imageobject>
- <imagedata fileref="images/diagram-shared-index.png" />
- </imageobject>
- </mediaobject></para>
- </section>
-
- <section>
- <title>Configuration</title>
-
- <section>
- <title>Common requirements</title>
-
- <para>Now, lets see what we need to run Search engine in cluster
- environment.<itemizedlist>
- <listitem>
- <para>shared directory for storing Lucene index (i.e. NFS);</para>
- </listitem>
-
- <listitem>
- <para>changes filter configured as
- org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter;</para>
-
- <note>
- <para>This filter ignore changes on non-coordinator nodes, and
- index changes on coordinator node.</para>
- </note>
- </listitem>
-
- <listitem>
- <para>configure JBoss-cache, course;</para>
- </listitem>
- </itemizedlist></para>
- </section>
-
- <section>
- <title>Query-handler configuration</title>
-
- <para>Configuration example:<programlisting><workspace name="ws">
- <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
- <properties>
- <property name="index-dir" value="shareddir/index/db1/ws" />
- <property name="changesfilter-class"
- value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter" />
- <property name="jbosscache-configuration" value="jbosscache-indexer.xml" />
- <property name="jgroups-configuration" value="udp-mux.xml" />
- <property name="jgroups-multiplexer-stack" value="true" />
- <property name="jbosscache-cluster-name" value="JCR-cluster-indexer-ws" />
- <property name="max-volatile-time" value="60" />
- </properties>
- </query-handler>
-</workspace></programlisting> <table>
- <title>Config properties description</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Property name</entry>
-
- <entry>Description</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>index-dir</entry>
-
- <entry>path to index</entry>
- </row>
-
- <row>
- <entry>jbosscache-configuration</entry>
-
- <entry>template of JBoss-cache configuration for all
- query-handlers in repository</entry>
- </row>
-
- <row>
- <entry>jgroups-configuration</entry>
-
- <entry>jgroups-configuration is template configuration for all
- components (search, cache, locks) [Add link to document
- describing template configurations]</entry>
- </row>
-
- <row>
- <entry>jgroups-multiplexer-stack</entry>
-
- <entry>[TODO about jgroups-multiplexer-stack - add link to
- JBoss doc]</entry>
- </row>
-
- <row>
- <entry>jbosscache-cluster-name</entry>
-
- <entry>cluster name (must be unique)</entry>
- </row>
-
- <row>
- <entry>max-volatile-time</entry>
-
- <entry>max time to live for Volatile Index</entry>
- </row>
- </tbody>
- </tgroup>
- </table></para>
- </section>
-
- <section>
- <title>JBoss-Cache template configuration</title>
-
- <para>JBoss-Cache template configuration for query handler.</para>
-
- <para>jbosscache-indexer.xml<programlisting><?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.1">
-
- <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false"
- lockAcquisitionTimeout="20000" />
- <!-- Configure the TransactionManager -->
- <transaction transactionManagerLookupClass="org.jboss.cache.transaction.JBossStandaloneJTAManagerLookup" />
-
- <clustering mode="replication" clusterName="${jbosscache-cluster-name}">
- <stateRetrieval timeout="20000" fetchInMemoryState="false" />
- <jgroupsConfig multiplexerStack="jcr.stack" />
- <sync />
- </clustering>
- <!-- Eviction configuration -->
- <eviction wakeUpInterval="5000">
- <default algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm" eventQueueSize="1000000">
- <property name="maxNodes" value="10000" />
- <property name="minTimeToLive" value="60000" />
- </default>
- </eviction>
-
-</jbosscache></programlisting></para>
- </section>
- </section>
-</chapter>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="ch_query_handler_config">
+ <?dbhtml filename="query-handler-config.html"?>
+
+ <title>QueryHandler configuration</title>
+
+ <section>
+ <title>How does it work?</title>
+
+ <para>Lets talk about indexing content in cluster.</para>
+
+ <para>For couple of reasons, we can't replicate index. That's means, some
+ data added and indexed on one cluster node, will be replicated to another
+ cluster node, but will not be indexed on that node.</para>
+
+ <para><citetitle>So, how do the indexing works in cluster
+ environment?</citetitle></para>
+
+ <para>As, we can not index same data on all nodes of cluster, we must
+ index it on one node. Node, that can index data and do changes on lucene
+ index, is called "coordinator". Coordinator-node is choosen automaticaly,
+ so we do not need special configuration for coordinator.</para>
+
+ <para>But, how can another nodes save their changes to lucene
+ index?</para>
+
+ <para>First of all, data is already saved and replicated to another
+ cluster-nodes, so we need only deliver message like "we need to index this
+ data" to coordinator. Thats why Jboss-cache is used.</para>
+
+ <para>All nodes of cluster writes messages into JBoss-cache but only
+ coordinator takes those messages and makes changes Lucene index.</para>
+
+ <para><citetitle>How do the search works in cluster
+ environment?</citetitle></para>
+
+ <para>Search engine do not works with indexer, coordinator, etc. Search
+ needs only lucene index. But only one cluster node can change lucene index
+ - asking you. Yes - lucene index is shared. So, all cluster nodes must be
+ configured to use lucene index from shared directory.</para>
+
+ <para>A little bit about indexing process (no matter, cluster or not)
+ Indexer do not writes changes to FS lucene index immediately. At first,
+ Indexer writes changes to Volatile index. If Volatile index size become
+ 1Mb or more it is flushed to FS. Also there is timer, that flushes
+ volatile index by timeout. Volatile index timeout configured by
+ "max-volatile-time" paremeter.</para>
+
+ <para>See more about <link linkend="ch_search_configuration">Search
+ Configuration</link>.</para>
+
+ <para>Common scheme of Shared Index<mediaobject>
+ <imageobject>
+ <imagedata fileref="images/diagram-shared-index.png" />
+ </imageobject>
+ </mediaobject></para>
+ </section>
+
+ <section>
+ <title>Configuration</title>
+
+ <section>
+ <title>Common requirements</title>
+
+ <para>Now, lets see what we need to run Search engine in cluster
+ environment.<itemizedlist>
+ <listitem>
+ <para>shared directory for storing Lucene index (i.e. NFS);</para>
+ </listitem>
+
+ <listitem>
+ <para>changes filter configured as
+ org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter;</para>
+
+ <note>
+ <para>This filter ignore changes on non-coordinator nodes, and
+ index changes on coordinator node.</para>
+ </note>
+ </listitem>
+
+ <listitem>
+ <para>configure JBoss-cache, course;</para>
+ </listitem>
+ </itemizedlist></para>
+ </section>
+
+ <section>
+ <title>Query-handler configuration</title>
+
+ <para>Configuration example:<programlisting><workspace name="ws">
+ <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+ <properties>
+ <property name="index-dir" value="shareddir/index/db1/ws" />
+ <property name="changesfilter-class"
+ value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter" />
+ <property name="jbosscache-configuration" value="jbosscache-indexer.xml" />
+ <property name="jgroups-configuration" value="udp-mux.xml" />
+ <property name="jgroups-multiplexer-stack" value="true" />
+ <property name="jbosscache-cluster-name" value="JCR-cluster-indexer-ws" />
+ <property name="max-volatile-time" value="60" />
+ </properties>
+ </query-handler>
+</workspace></programlisting> <table>
+ <title>Config properties description</title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Property name</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>index-dir</entry>
+
+ <entry>path to index</entry>
+ </row>
+
+ <row>
+ <entry>jbosscache-configuration</entry>
+
+ <entry>template of JBoss-cache configuration for all
+ query-handlers in repository</entry>
+ </row>
+
+ <row>
+ <entry>jgroups-configuration</entry>
+
+ <entry>jgroups-configuration is template configuration for all
+ components (search, cache, locks) [Add link to document
+ describing template configurations]</entry>
+ </row>
+
+ <row>
+ <entry>jgroups-multiplexer-stack</entry>
+
+ <entry>[TODO about jgroups-multiplexer-stack - add link to
+ JBoss doc]</entry>
+ </row>
+
+ <row>
+ <entry>jbosscache-cluster-name</entry>
+
+ <entry>cluster name (must be unique)</entry>
+ </row>
+
+ <row>
+ <entry>max-volatile-time</entry>
+
+ <entry>max time to live for Volatile Index</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </section>
+
+ <section>
+ <title>JBoss-Cache template configuration</title>
+
+ <para>JBoss-Cache template configuration for query handler.</para>
+
+ <para>jbosscache-indexer.xml<programlisting><?xml version="1.0" encoding="UTF-8"?>
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.1">
+
+ <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false"
+ lockAcquisitionTimeout="20000" />
+ <!-- Configure the TransactionManager -->
+ <transaction transactionManagerLookupClass="org.jboss.cache.transaction.JBossStandaloneJTAManagerLookup" />
+
+ <clustering mode="replication" clusterName="${jbosscache-cluster-name}">
+ <stateRetrieval timeout="20000" fetchInMemoryState="false" />
+ <jgroupsConfig multiplexerStack="jcr.stack" />
+ <sync />
+ </clustering>
+ <!-- Eviction configuration -->
+ <eviction wakeUpInterval="5000">
+ <default algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm" eventQueueSize="1000000">
+ <property name="maxNodes" value="10000" />
+ <property name="minTimeToLive" value="60000" />
+ </default>
+ </eviction>
+
+</jbosscache></programlisting></para>
+
+ <para>See more about template configurations <link
+ linkend="ch_jbosscache_config_templates">here</link>.</para>
+ </section>
+ </section>
+</chapter>
More information about the exo-jcr-commits
mailing list