[exo-jcr-commits] exo-jcr SVN: r1881 - in jcr/trunk/docs/reference/en/src/main/docbook/en-US: modules and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Feb 17 12:07:52 EST 2010


Author: sergiykarpenko
Date: 2010-02-17 12:07:52 -0500 (Wed, 17 Feb 2010)
New Revision: 1881

Modified:
   jcr/trunk/docs/reference/en/src/main/docbook/en-US/master.xml
   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/lock-manager-config.xml
Log:
EXOJCR-490: few links added

Modified: jcr/trunk/docs/reference/en/src/main/docbook/en-US/master.xml
===================================================================
--- jcr/trunk/docs/reference/en/src/main/docbook/en-US/master.xml	2010-02-17 16:53:26 UTC (rev 1880)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/master.xml	2010-02-17 17:07:52 UTC (rev 1881)
@@ -63,6 +63,9 @@
   <xi:include href="modules/configuration.xml"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
+  <xi:include href="modules/cluster-config.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
   <xi:include href="modules/lock-manager-config.xml"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 

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-17 16:53:26 UTC (rev 1880)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/cluster-config.xml	2010-02-17 17:07:52 UTC (rev 1881)
@@ -64,7 +64,7 @@
       </orderedlist>
     </section>
 
-    <section>
+    <section id="sect_conf_cluster_jcr">
       <title>Configuring JCR to use external configuration</title>
 
       <itemizedlist>
@@ -92,7 +92,7 @@
                      &lt;property name="swap-directory" value="../temp/swap/production" /&gt;
                   &lt;/properties&gt;
                   &lt;value-storages&gt;
-                     see "Value storage configuration" part.
+                     see "<link linkend="conf_value_storage">Value storage configuration</link>" part.
                   &lt;/value-storages&gt;
                &lt;/container&gt;
                &lt;initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer"&gt;
@@ -101,13 +101,13 @@
                   &lt;/properties&gt;
                &lt;/initializer&gt;
                &lt;cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache"&gt;
-                     see "Cache configuration" part.
+                     see  "<link linkend="conf_cache">Cache configuration</link>" part.
                &lt;/cache&gt;
                &lt;query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex"&gt;
-                  see "Indexer configuration" part.
+                  see  "<link linkend="conf_indexer">Indexer configuration</link>" part.
                &lt;/query-handler&gt;
                &lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;
-                  see "Lock Manager configuration" part.
+                  see  "<link linkend="conf_lock_manager">Lock Manager configuration</link>" part.
                &lt;/lock-manager&gt;
             &lt;/workspace&gt;
             &lt;workspace name="ws2"&gt;
@@ -176,7 +176,7 @@
       such parts:</para>
 
       <itemizedlist>
-        <listitem>
+        <listitem id="conf_value_storage">
           <para>Value Storage configuration:</para>
 
           <programlisting>&lt;value-storages&gt;
@@ -190,10 +190,8 @@
    &lt;/value-storage&gt;
 &lt;/value-storages&gt;</programlisting>
         </listitem>
-      </itemizedlist>
 
-      <itemizedlist>
-        <listitem>
+        <listitem id="conf_cache">
           <para>Cache configuration:</para>
 
           <programlisting>&lt;cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache"&gt;
@@ -205,10 +203,8 @@
    &lt;/properties&gt;
 &lt;/cache&gt; </programlisting>
         </listitem>
-      </itemizedlist>
 
-      <itemizedlist>
-        <listitem>
+        <listitem id="conf_indexer">
           <para>Indexer configuration:</para>
 
           <programlisting>&lt;query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex"&gt;
@@ -223,7 +219,7 @@
 &lt;/query-handler&gt; </programlisting>
         </listitem>
 
-        <listitem>
+        <listitem id="conf_lock_manager">
           <para>Lock Manager configuration:</para>
 
           <programlisting>&lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;

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-17 16:53:26 UTC (rev 1880)
+++ jcr/trunk/docs/reference/en/src/main/docbook/en-US/modules/lock-manager-config.xml	2010-02-17 17:07:52 UTC (rev 1881)
@@ -1,437 +1,440 @@
-<?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">
-<article>
-  <articleinfo>
-    <title>LockManager configuration</title>
-  </articleinfo>
-
-  <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>&lt;workspace name="ws"&gt;
-   ...
-   &lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;
-      &lt;properties&gt;
-         &lt;property name="time-out" value="15m" /&gt;
-         ...
-      &lt;/properties&gt;
-   &lt;/lock-manager&gt;               
-   ...
-&lt;/workspace&gt;</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>&lt;properties&gt;
-   &lt;property name="time-out" value="10m" /&gt;
-   ...
-&lt;/properties&gt;</programlisting>
-
-    <section>
-      <title>Configuration</title>
-
-      <para>Replication requirements are same as for Cache</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>&lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;
-   &lt;properties&gt;
-     &lt;property name="time-out" value="15m" /&gt;
-     &lt;property name="jbosscache-configuration" value="conf/standalone/cluster/test-jbosscache-lock-config.xml" /&gt;
-   &lt;/properties&gt;
-&lt;/lock-manager&gt;</programlisting>
-
-      <para>test-jbosscache-lock-config.xml<programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.2"&gt;
-
- &lt;locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false" lockAcquisitionTimeout="20000" /&gt;
-
- &lt;clustering mode="replication" clusterName="JBoss-Cache-Lock-Cluster_Name"&gt;
-  &lt;stateRetrieval timeout="20000" fetchInMemoryState="false" nonBlocking="true" /&gt;
-  &lt;jgroupsConfig&gt;
-
-   &lt;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" /&gt;
-   &lt;MPING timeout="2000" num_initial_members="2" mcast_port="34540" bind_addr="127.0.0.1" mcast_addr="224.0.0.1" /&gt;
-
-
-   &lt;MERGE2 max_interval="30000" min_interval="10000" /&gt;
-   &lt;FD_SOCK /&gt;
-   &lt;FD max_tries="5" shun="true" timeout="10000" /&gt;
-   &lt;VERIFY_SUSPECT timeout="1500" /&gt;
-   &lt;pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800" use_mcast_xmit="false" /&gt;
-   &lt;UNICAST timeout="300,600,1200,2400,3600" /&gt;
-   &lt;pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000" /&gt;
-   &lt;pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000" view_bundling="true" /&gt;
-   &lt;FRAG2 frag_size="60000" /&gt;
-   &lt;pbcast.STREAMING_STATE_TRANSFER /&gt;
-  &lt;pbcast.FLUSH timeout="0" /&gt;
-
-  &lt;/jgroupsConfig
-
-  &lt;sync /&gt;
- &lt;/clustering&gt;
-
- &lt;loaders passivation="false" shared="true"&gt;
-  &lt;preload&gt;
-   &lt;node fqn="/" /&gt;
-  &lt;/preload&gt;
-  &lt;loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false"&gt;
-   &lt;properties&gt;
-    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=&lt;BLOB&gt;  
-    cache.jdbc.parent.column=parent
-    cache.jdbc.datasource=jdbcjcr
-   &lt;/properties&gt;
-  &lt;/loader&gt;
-
- &lt;/loaders&gt;
-
-&lt;/jbosscache&gt;</programlisting></para>
-
-      <para>Configuration requirements:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>&lt;clustering mode="replication"
-          clusterName="JBoss-Cache-Lock-Cluster_Name"&gt; - 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>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.1"&gt;
-
-   &lt;locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false"
-      lockAcquisitionTimeout="20000" /&gt;
-
-   &lt;clustering mode="replication" clusterName="${jbosscache-cluster-name}"&gt;
-      &lt;stateRetrieval timeout="20000" fetchInMemoryState="false" /&gt;
-      &lt;jgroupsConfig multiplexerStack="jcr.stack" /&gt;
-      &lt;sync /&gt;
-   &lt;/clustering&gt;
-
-   &lt;loaders passivation="false" shared="true"&gt;
-      &lt;!-- All the data of the JCR locks needs to be loaded at startup --&gt;
-      &lt;preload&gt;
-         &lt;node fqn="/" /&gt;
-      &lt;/preload&gt;  
-      &lt;!--
-      For another cache-loader class you should use another template with
-      cache-loader specific parameters
-      -&gt;
-      &lt;loader class="org.jboss.cache.loader.JDBCCacheLoader" async=q"false" fetchPersistentState="false"
-         ignoreModifications="false" purgeOnStartup="false"&gt;
-         &lt;properties&gt;
-            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}
-         &lt;/properties&gt;
-      &lt;/loader&gt;
-   &lt;/loaders&gt;
-&lt;/jbosscache&gt;</programlisting>
-
-      <para>As you see, all configurable paramaters filled by templates and
-      will be replaced by LockManagers conf parameters:</para>
-
-      <programlisting>&lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;
-   &lt;properties&gt;
-      &lt;property name="time-out" value="15m" /&gt;
-      &lt;property name="jbosscache-configuration" value="test-jbosscache-lock.xml" /&gt;
-      &lt;property name="jgroups-configuration" value="udp-mux.xml" /&gt;
-      &lt;property name="jgroups-multiplexer-stack" value="true" /&gt;
-      &lt;property name="jbosscache-cluster-name" value="JCR-cluster-locks-ws" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_ws" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.table.create" value="true" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.table.drop" value="false" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_ws_pk" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.fqn.type" value="AUTO"/&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.node.column" value="node" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.node.type" value="AUTO"/&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" /&gt;
-      &lt;property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" /&gt;
-   &lt;/properties&gt;
-&lt;/lock-manager&gt;</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>&lt;protocol_stacks&gt;
-   &lt;stack name="jcr.stack"&gt;
-      &lt;config&gt;
-         &lt;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" /&gt;
-
-         &lt;PING timeout="2000" num_initial_members="3" /&gt;
-         &lt;MERGE2 max_interval="30000" min_interval="10000" /&gt;
-         &lt;FD_SOCK /&gt;
-         &lt;FD timeout="10000" max_tries="5" shun="true" /&gt;
-         &lt;VERIFY_SUSPECT timeout="1500" /&gt;
-         &lt;BARRIER /&gt;
-         &lt;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" /&gt;
-         &lt;UNICAST timeout="300,600,1200" /&gt;
-         &lt;pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="1000000" /&gt;
-         &lt;VIEW_SYNC avg_send_interval="60000" /&gt;
-         &lt;pbcast.GMS print_local_addr="true" join_timeout="3000" shun="false" view_bundling="true" /&gt;
-         &lt;FC max_credits="500000" min_threshold="0.20" /&gt;
-         &lt;FRAG2 frag_size="60000" /&gt;
-         &lt;!--pbcast.STREAMING_STATE_TRANSFER /--&gt;
-         &lt;pbcast.STATE_TRANSFER /&gt;
-         &lt;!-- pbcast.FLUSH  /--&gt;
-      &lt;/config&gt;
-   &lt;/stack&gt;
-&lt;/protocol_stacks&gt; </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>
-</article>
+<?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">
+<article>
+  <articleinfo>
+    <title>LockManager configuration</title>
+  </articleinfo>
+
+  <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>&lt;workspace name="ws"&gt;
+   ...
+   &lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;
+      &lt;properties&gt;
+         &lt;property name="time-out" value="15m" /&gt;
+         ...
+      &lt;/properties&gt;
+   &lt;/lock-manager&gt;               
+   ...
+&lt;/workspace&gt;</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>&lt;properties&gt;
+   &lt;property name="time-out" value="10m" /&gt;
+   ...
+&lt;/properties&gt;</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>&lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;
+   &lt;properties&gt;
+     &lt;property name="time-out" value="15m" /&gt;
+     &lt;property name="jbosscache-configuration" value="conf/standalone/cluster/test-jbosscache-lock-config.xml" /&gt;
+   &lt;/properties&gt;
+&lt;/lock-manager&gt;</programlisting>
+
+      <para>test-jbosscache-lock-config.xml<programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.2"&gt;
+
+ &lt;locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false" lockAcquisitionTimeout="20000" /&gt;
+
+ &lt;clustering mode="replication" clusterName="JBoss-Cache-Lock-Cluster_Name"&gt;
+  &lt;stateRetrieval timeout="20000" fetchInMemoryState="false" nonBlocking="true" /&gt;
+  &lt;jgroupsConfig&gt;
+
+   &lt;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" /&gt;
+   &lt;MPING timeout="2000" num_initial_members="2" mcast_port="34540" bind_addr="127.0.0.1" mcast_addr="224.0.0.1" /&gt;
+
+
+   &lt;MERGE2 max_interval="30000" min_interval="10000" /&gt;
+   &lt;FD_SOCK /&gt;
+   &lt;FD max_tries="5" shun="true" timeout="10000" /&gt;
+   &lt;VERIFY_SUSPECT timeout="1500" /&gt;
+   &lt;pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800" use_mcast_xmit="false" /&gt;
+   &lt;UNICAST timeout="300,600,1200,2400,3600" /&gt;
+   &lt;pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000" /&gt;
+   &lt;pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000" view_bundling="true" /&gt;
+   &lt;FRAG2 frag_size="60000" /&gt;
+   &lt;pbcast.STREAMING_STATE_TRANSFER /&gt;
+  &lt;pbcast.FLUSH timeout="0" /&gt;
+
+  &lt;/jgroupsConfig
+
+  &lt;sync /&gt;
+ &lt;/clustering&gt;
+
+ &lt;loaders passivation="false" shared="true"&gt;
+  &lt;preload&gt;
+   &lt;node fqn="/" /&gt;
+  &lt;/preload&gt;
+  &lt;loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false"&gt;
+   &lt;properties&gt;
+    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=&lt;BLOB&gt;  
+    cache.jdbc.parent.column=parent
+    cache.jdbc.datasource=jdbcjcr
+   &lt;/properties&gt;
+  &lt;/loader&gt;
+
+ &lt;/loaders&gt;
+
+&lt;/jbosscache&gt;</programlisting></para>
+
+      <para>Configuration requirements:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>&lt;clustering mode="replication"
+          clusterName="JBoss-Cache-Lock-Cluster_Name"&gt; - 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>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.1"&gt;
+
+   &lt;locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false"
+      lockAcquisitionTimeout="20000" /&gt;
+
+   &lt;clustering mode="replication" clusterName="${jbosscache-cluster-name}"&gt;
+      &lt;stateRetrieval timeout="20000" fetchInMemoryState="false" /&gt;
+      &lt;jgroupsConfig multiplexerStack="jcr.stack" /&gt;
+      &lt;sync /&gt;
+   &lt;/clustering&gt;
+
+   &lt;loaders passivation="false" shared="true"&gt;
+      &lt;!-- All the data of the JCR locks needs to be loaded at startup --&gt;
+      &lt;preload&gt;
+         &lt;node fqn="/" /&gt;
+      &lt;/preload&gt;  
+      &lt;!--
+      For another cache-loader class you should use another template with
+      cache-loader specific parameters
+      -&gt;
+      &lt;loader class="org.jboss.cache.loader.JDBCCacheLoader" async=q"false" fetchPersistentState="false"
+         ignoreModifications="false" purgeOnStartup="false"&gt;
+         &lt;properties&gt;
+            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}
+         &lt;/properties&gt;
+      &lt;/loader&gt;
+   &lt;/loaders&gt;
+&lt;/jbosscache&gt;</programlisting>
+
+      <para>As you see, all configurable paramaters filled by templates and
+      will be replaced by LockManagers conf parameters:</para>
+
+      <programlisting>&lt;lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl"&gt;
+   &lt;properties&gt;
+      &lt;property name="time-out" value="15m" /&gt;
+      &lt;property name="jbosscache-configuration" value="test-jbosscache-lock.xml" /&gt;
+      &lt;property name="jgroups-configuration" value="udp-mux.xml" /&gt;
+      &lt;property name="jgroups-multiplexer-stack" value="true" /&gt;
+      &lt;property name="jbosscache-cluster-name" value="JCR-cluster-locks-ws" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_ws" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.table.create" value="true" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.table.drop" value="false" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_ws_pk" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.fqn.type" value="AUTO"/&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.node.column" value="node" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.node.type" value="AUTO"/&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" /&gt;
+   &lt;/properties&gt;
+&lt;/lock-manager&gt;</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>&lt;protocol_stacks&gt;
+   &lt;stack name="jcr.stack"&gt;
+      &lt;config&gt;
+         &lt;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" /&gt;
+
+         &lt;PING timeout="2000" num_initial_members="3" /&gt;
+         &lt;MERGE2 max_interval="30000" min_interval="10000" /&gt;
+         &lt;FD_SOCK /&gt;
+         &lt;FD timeout="10000" max_tries="5" shun="true" /&gt;
+         &lt;VERIFY_SUSPECT timeout="1500" /&gt;
+         &lt;BARRIER /&gt;
+         &lt;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" /&gt;
+         &lt;UNICAST timeout="300,600,1200" /&gt;
+         &lt;pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="1000000" /&gt;
+         &lt;VIEW_SYNC avg_send_interval="60000" /&gt;
+         &lt;pbcast.GMS print_local_addr="true" join_timeout="3000" shun="false" view_bundling="true" /&gt;
+         &lt;FC max_credits="500000" min_threshold="0.20" /&gt;
+         &lt;FRAG2 frag_size="60000" /&gt;
+         &lt;!--pbcast.STREAMING_STATE_TRANSFER /--&gt;
+         &lt;pbcast.STATE_TRANSFER /&gt;
+         &lt;!-- pbcast.FLUSH  /--&gt;
+      &lt;/config&gt;
+   &lt;/stack&gt;
+&lt;/protocol_stacks&gt; </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>
+</article>



More information about the exo-jcr-commits mailing list