[exo-jcr-commits] exo-jcr SVN: r1829 - jcr/trunk/docs/reference/en/src/main/docbook/modules.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Feb 16 08:54:54 EST 2010


Author: sergiykarpenko
Date: 2010-02-16 08:54:54 -0500 (Tue, 16 Feb 2010)
New Revision: 1829

Added:
   jcr/trunk/docs/reference/en/src/main/docbook/modules/LockManagerConfig.xml
Log:
EXOJCR-490: LockManagerConfig.xml added

Added: jcr/trunk/docs/reference/en/src/main/docbook/modules/LockManagerConfig.xml
===================================================================
--- jcr/trunk/docs/reference/en/src/main/docbook/modules/LockManagerConfig.xml	                        (rev 0)
+++ jcr/trunk/docs/reference/en/src/main/docbook/modules/LockManagerConfig.xml	2010-02-16 13:54:54 UTC (rev 1829)
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3b2/docbookx.dtd">
+<article>
+  <articleinfo>
+    <title>LockManager configuration</title>
+  </articleinfo>
+
+  <sect1>
+    <title>LockManager configuration</title>
+
+    <sect2>
+      <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>
+    </sect2>
+
+    <sect2>
+      <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>
+    </sect2>
+
+    <sect2>
+      <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>
+
+      <para>Replication requirements are same as for Cache</para>
+
+      <warning>
+        <para>[TODO add link to replication configuration]</para>
+      </warning>
+
+      <sect3>
+        <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>
+      </sect3>
+
+      <sect3>
+        <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>"cache.jdbc.table.name" must be unique per
+            datasource;</para>
+          </listitem>
+
+          <listitem>
+            <para>"cache.jdbc.node.type" and "cache.jdbc.fqn.type" must be
+            configured according to using database. <ulink
+            url="#datatypes">DataTypes</ulink> or <link
+            linkend="datatypes">enother link to DataTypes</link>.</para>
+          </listitem>
+        </itemizedlist>
+      </sect3>
+
+      <sect3>
+        <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>"jbosscache-cl-cache.jdbc.fqn.column" and
+              "jbosscache-cl-cache.jdbc.node.type" 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 [TODO add link to blob types inf diff DB]) 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>
+      </sect3>
+
+      <sect3>
+        <title id="datatypes">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>
+      </sect3>
+    </sect2>
+  </sect1>
+</article>



More information about the exo-jcr-commits mailing list