[exo-jcr-commits] exo-jcr SVN: r2880 - in jcr/branches/1.12.x/docs/reference/en: src/main/docbook/en-US and 2 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Aug 5 05:16:13 EDT 2010


Author: dkatayev
Date: 2010-08-05 05:16:13 -0400 (Thu, 05 Aug 2010)
New Revision: 2880

Added:
   jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq.xml
   jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq/
   jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq/jcr-faq.xml
Modified:
   jcr/branches/1.12.x/docs/reference/en/pom.xml
   jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/master.xml
Log:
EXOJCR-625 JCR FAQ ported to docbook format

Modified: jcr/branches/1.12.x/docs/reference/en/pom.xml
===================================================================
--- jcr/branches/1.12.x/docs/reference/en/pom.xml	2010-08-05 09:13:56 UTC (rev 2879)
+++ jcr/branches/1.12.x/docs/reference/en/pom.xml	2010-08-05 09:16:13 UTC (rev 2880)
@@ -99,11 +99,11 @@
                      <stylesheetResource>classpath:/xslt/org/exojcr/xhtml-single.xsl</stylesheetResource>
                      <finalName>index.html</finalName>
                   </format>
-                  <!-- format>
+                  <!--format>
                      <formatName>pdf</formatName>
                      <stylesheetResource>classpath://xslt/org/exojcr/pdf.xsl</stylesheetResource>
                      <finalName>${pom.name}.pdf</finalName>
-                  </format -->
+                  </format-->
                   <!-- format>
                      <formatName>eclipse</formatName>
                      <stylesheetResource>classpath:/xslt/org/exojcr/eclipse.xsl</stylesheetResource>

Modified: jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/master.xml
===================================================================
--- jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/master.xml	2010-08-05 09:13:56 UTC (rev 2879)
+++ jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/master.xml	2010-08-05 09:16:13 UTC (rev 2880)
@@ -66,9 +66,9 @@
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="modules/ws.xml"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+              
+  <xi:include href="modules/faq.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />              
 
-
-
-
 </book>

Added: jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq/jcr-faq.xml
===================================================================
--- jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq/jcr-faq.xml	                        (rev 0)
+++ jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq/jcr-faq.xml	2010-08-05 09:16:13 UTC (rev 2880)
@@ -0,0 +1,714 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="JCR.FAQ">
+  <?dbhtml filename="ch-jcr-faq.html"?>
+
+  <title>JCR FAQ</title>
+
+  <para>It's the draft for a future FAQ of JCR usage.</para>
+
+  <section>
+    <title>Kernel</title>
+
+    <section>
+      <title>What is the best, standardized way to get the instance of a
+      service ?</title>
+
+      <programlisting>container.getComponentInstanceOfType(ServiceName.class);</programlisting>
+    </section>
+  </section>
+
+  <section>
+    <title>JCR</title>
+
+    <section>
+      <title>JCR core</title>
+
+      <section>
+        <title>Is it better to use Session.getNodeByUUID or
+        Session.getItem?</title>
+
+        <para>Session.getNodeByUUID() about 2.5 times faster of
+        Session.getItem(String) and only 25% faster of Node.getNode(String).
+        See the daily tests results for such comparisons, e.g.</para>
+
+        <para><ulink
+        url="http://tests.exoplatform.org/JCR/1.12.2-GA/rev.2442/daily-performance-testing-results/jcr.core./index.html">http://tests.exoplatform.org/JCR/1.12.2-GA/rev.2442/daily-performance-testing-results/jcr.core./index.html</ulink></para>
+      </section>
+
+      <section>
+        <title>Does it make sense to have all the node referencable to use
+        getNodeByUUID all the time?</title>
+
+        <para>Until it's applicable for a business logic it can be. But take
+        in account the paths are human readable and lets you think in
+        hierarchy. If it's important a location based approach is
+        preferable.</para>
+      </section>
+
+      <section>
+        <title>What should I use to check if an Item exists before getting the
+        Value?</title>
+
+        <para>Use Session.itemExists(String absPath), Node.hasNode(String
+        relPath) or Property.hasProperty(String name). It's also is possible
+        to check Node.hasNodes() and Node.hasProprties().</para>
+      </section>
+
+      <section>
+        <title>How to use Observation properly?</title>
+
+        <para>JCR Observation it's a way to listen on persistence changes of a
+        Repository. It provides several options to configure the listener for
+        an interesting only changes. For proper use it's important to
+        understand concept of events filtering for a registered EventListener
+        (8.3.3 Observation Manager). An often confusing part it's the
+        <emphasis role="bold">absPath</emphasis>, it's an associated parent of
+        a location you want to observe events on. I.e. it's a parent of child
+        node(s) or this parent property(ies); if <emphasis
+        role="bold">isDeep</emphasis> is true then you'll get events of all
+        the subtree of child nodes also. Same actual for <emphasis
+        role="bold">uuid</emphasis> and <emphasis
+        role="bold">nodeTypeName</emphasis> parameters of
+        ObservationManager.addEventListener() method.</para>
+      </section>
+
+      <section>
+        <title>Is it better to use queries that to access the data by the JCR
+        API?</title>
+
+        <para>No, direct access to items via JCR API is more efficient. Search
+        will consume additional resources for index querying and only then
+        return the items.</para>
+      </section>
+
+      <section>
+        <title>What is default query ordering?</title>
+
+        <para>By default (if query do not contains any ordering statements)
+        result nodes is sorted by document order.</para>
+      </section>
+
+      <section>
+        <title>Is ordering by jcr:path or Item name supported?</title>
+
+        <para>No it does not supported There is two ways to ordering results,
+        when path may be used as criteria:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>order by property with value type NAME or PATH (jcr supports
+            it)</para>
+          </listitem>
+
+          <listitem>
+            <para>order by jcr:path - sort by exact path of node (jcr do not
+            supports it)</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Order by jcr:path</para>
+
+        <para>If no order specification is supplied in the query statement,
+        implementations may support document order on the result nodes (see
+        6.6.4.2 Document Order). And its sorted by order number.</para>
+
+        <para>By default (if query do not contains any ordering statements)
+        result nodes is sorted by document order.</para>
+
+        <programlisting>SELECT * FROM nt:unstructured WHERE jcr:path LIKE 'testRoot/%'</programlisting>
+
+        <para>For specified jcr:path ordering there is different proceeding in
+        XPath and SQL:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>SQL no matter ascending or descending - query returns result
+            nodes in random order: {code}SELECT * FROM nt:unstructured WHERE
+            jcr:path LIKE 'testRoot/%' ORDER BY jcr:path{code}</para>
+          </listitem>
+        </itemizedlist>
+
+        <itemizedlist>
+          <listitem>
+            <para>XPath - jcr:path order construction is ignored (so result is
+            not sorted according path); {code}/testRoot/* <ulink
+            url="@jcr:primaryType='nt:unstructured'">@jcr:primaryType='nt:unstructured'</ulink>
+            order by jcr:path{code}</para>
+          </listitem>
+        </itemizedlist>
+      </section>
+
+      <section>
+        <title>How eXo JCR indexer uses content encoding?</title>
+
+        <para>1. Indexer uses jcr:encoding property of nt:resource node (used
+        as jcr:content child node of nt:file) 2. if no jcr:encoding property
+        set the Document Service will use the one configured in the service
+        (defaultEncoding) 3. if has nothing configured a JVM default encoding
+        will be used</para>
+      </section>
+
+      <section>
+        <title>Which database server is better for eXo JCR?</title>
+
+        <para>If question is a performance it's difficult question, as each
+        database can be configured to be more (and more) faster for each
+        special case. MySQL with MyISAM engine will be faster. But MySQL has
+        limitations for indexes for multilingual columns (Item names
+        actually). So, with long Item names (larger ofOracle or PostgreSQL
+        also are good for performance. DB2 and MSSQL slower in default
+        configurations. Default configuration of Sybase leader of slowness.
+        But in this question take the database server maintenance in account.
+        MySQL and PostgreSQL are simple in installation and can works even on
+        limited hardware. Oracle, DB2, MSSQL or Sybase need more efforts. Same
+        actual for maintenance during the work. Note for Sybase:
+        "check-sns-new-connection" data container configuration parameter
+        should be set to "true". For testing or embedded use HSQLDB is the
+        best. Apache Derby and H2 also supported. But H2 surprisingly needs
+        "beta" feature enabled - MVCC=TRUE in JDBC url.</para>
+      </section>
+
+      <section>
+        <title>How to setup eXo JCR for mutilingial content on MySQL?</title>
+
+        <para>MySQL database should be configured to use single-byte encoding,
+        e.g. "latin1". eXo JCR application (e.g. GateIn) should use JCR
+        dialect "MySQL-UTF8".</para>
+
+        <para>In other words: MySQL database default encoding and JCR dialect
+        cannot be UTF8 both. Use single-byte encoding (e.g. "latin1") for
+        database and "mysql-utf8" dialect for eXo JCR.</para>
+
+        <para>Notice: "MySQL-UTF8" dialect cannot be auto-detected, it should
+        be set explicitly in configuration.</para>
+      </section>
+
+      <section>
+        <title>Does MySQL has limitation affecting eXo JCR features?</title>
+
+        <para>Index's key length of JCR_SITEM (JCR_MITEM) table for mysql-utf8
+        dialect is reduced to 765 bytes (or 255 chars).</para>
+      </section>
+
+      <section>
+        <title>Does use of Sybase database needs special options in eXo JCR
+        configuration?</title>
+
+        <para>For properly work JCR with Sybase need for each workspace data
+        container add new property "check-sns-new-connection" with false value
+        like this:</para>
+
+        <programlisting>&lt;container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer"&gt;
+  &lt;properties&gt;
+    &lt;property name="source-name" value="jdbcjcr" /&gt;
+    &lt;property name="dialect" value="auto" /&gt;
+    &lt;property name="multi-db" value="true" /&gt;
+    &lt;property name="update-storage" value="false" /&gt;
+    &lt;property name="max-buffer-size" value="200k" /&gt;
+    &lt;property name="swap-directory" value="target/temp/swap/ws" /&gt;
+    &lt;property name="swap-directory" value="target/temp/swap/ws" /&gt;
+    &lt;property name="check-sns-new-connection" value="false" /&gt;
+  &lt;/properties&gt;</programlisting>
+      </section>
+
+      <section>
+        <title>How to open and close a session properly to avoid memory
+        leaks?</title>
+
+        <programlisting>Session session = repository.login(credentials);
+try
+{
+// here your code
+}
+finally
+{
+session.logout();
+}</programlisting>
+      </section>
+
+      <section>
+        <title>Can I use Session after logout?</title>
+
+        <para>No. Any instance of Session or Node (acquired through session)
+        shouldn't be used after logout anymore. At least it is highly
+        recommended not to use.</para>
+      </section>
+
+      <section>
+        <title>How to configure jcr for cluster ?</title>
+
+        <para>So we have configured JCR in standalone mode and want to
+        reconfigure it for clustered environment. First of all let's check
+        whether all requirements are satisfied:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>Dedicated RDBMS anyone like MySQL, Postges, Oracle and etc.
+            but just not HSSQL;</para>
+          </listitem>
+
+          <listitem>
+            <para>Shared storage. The simples thing is to use shared FS like
+            NFS or SMB mounted in operation system, but they are rather slow.
+            The best thing is to use SAN (Storage Area Network);</para>
+          </listitem>
+
+          <listitem>
+            <para>Fast network between JCR nodes.</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>So now, need to configure Container a bit. Check
+        exo-configuration.xml to be sure You are using JBossTS Transaction
+        Service and JBossCache Transaction Manager, as shown below.</para>
+
+        <programlisting>&lt;component&gt;
+   &lt;key&gt;org.jboss.cache.transaction.TransactionManagerLookup&lt;/key&gt;
+   &lt;type&gt;org.jboss.cache.GenericTransactionManagerLookup&lt;/type&gt;
+&lt;/component&gt;
+
+&lt;component&gt;
+   &lt;key&gt;org.exoplatform.services.transaction.TransactionService&lt;/key&gt;
+   &lt;type&gt;org.exoplatform.services.transaction.jbosscache.JBossTransactionsService&lt;/type&gt;
+   &lt;init-params&gt;
+      &lt;value-param&gt;
+         &lt;name&gt;timeout&lt;/name&gt;
+         &lt;value&gt;300&lt;/value&gt;
+      &lt;/value-param&gt;
+   &lt;/init-params&gt;
+&lt;/component&gt;</programlisting>
+
+        <para>Next stage is actually the JCR configuration. We need JBossCache
+        configuration templates for : data-cache, indexer-cache and
+        lock-manager-cache. Later they will be used configuring JCR's core
+        components. There are pre-bundled templates in EAR or JAR in
+        conf/standalone/cluster. They can be used as is or re-written if
+        needed. And now time to re-configure a bit each workspace. Actually
+        need to change few parameters of &lt;cache&gt;, &lt;query-handler&gt;
+        and &lt;lock-manager&gt;.</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>&lt;cache&gt; configuration should looks like this:</para>
+
+            <programlisting>&lt;cache enabled="true"
+     class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache"&gt;
+     &lt;properties&gt;
+        &lt;property name="jbosscache-configuration" value="test-jbosscache-data.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-db1-ws" /&gt;
+     &lt;/properties&gt;
+&lt;/cache&gt;</programlisting>
+
+            <itemizedlist>
+              <listitem>
+                <para>"jbosscache-configuration" is the path to configuration
+                template;</para>
+              </listitem>
+
+              <listitem>
+                <para>"jgroups-configuration" is path to JGroups configuration
+                is multiplexer stack is used (default). This file is also
+                pre-bundled with templates and is recommended for use;</para>
+              </listitem>
+
+              <listitem>
+                <para>"jgroups-multiplexer-stack" just simply "true". Strongly
+                recommended;</para>
+              </listitem>
+
+              <listitem>
+                <para>"jbosscache-cluster-name" is the name of cluster group.
+                Should be different for each workspace and each workspace
+                component. I.e.:
+                &lt;repository_name&gt;-&lt;ws_name&gt;-&lt;component(cache\|lock\|index)&gt;</para>
+              </listitem>
+            </itemizedlist>
+          </listitem>
+        </itemizedlist>
+
+        <itemizedlist>
+          <listitem>
+            <para>&lt;query-handler&gt; configuration</para>
+
+            <itemizedlist>
+              <listitem>
+                <para>You must replace or add in &lt;query-handler&gt; block
+                the "changesfilter-class" parameter equals with:</para>
+
+                <programlisting>&lt;property name="changesfilter-class" value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter"/&gt;</programlisting>
+              </listitem>
+
+              <listitem>
+                <para>add JBossCache-oriented configuration:</para>
+
+                <programlisting>&lt;property name="jbosscache-configuration" value="test-jbosscache-indexer.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-indexer-db1-ws" /&gt;
+&lt;property name="max-volatile-time" value="60" /&gt;</programlisting>
+              </listitem>
+            </itemizedlist>
+          </listitem>
+        </itemizedlist>
+
+        <para>Those properties have the same meaning and restrictions as in
+        previous block. Last property "max-volatile-time" is not mandatory but
+        recommended. This notifies that latest changes in index will be
+        visible for each cluster node not later than in 60s.</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>&lt;lock-manager&gt; configuration</para>
+
+            <para>Maybe this is the hardest element to configure, because we
+            have to define access to DB where locks will be stored. Replace
+            exsiting lock-manager configuration with shown below.</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-db1-ws" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1_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_db1_ws_pk" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" /&gt;
+      &lt;property name="jbosscache-cl-cache.jdbc.node.column" value="node" /&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>First few properties are the same as in previous components,
+            but here you can see some strange "jbosscache-cl-cache.jdbc.*"
+            properties. They define access parameters for database where lock
+            are persisted.</para>
+
+            <itemizedlist>
+              <listitem>
+                <para>"jbosscache-cl-cache.jdbc.table.create" - whether to
+                create it or not. Usually "true";</para>
+              </listitem>
+
+              <listitem>
+                <para>"jbosscache-cl-cache.jdbc.table.drop" - whether to drop
+                on a start or not. Use "false";</para>
+              </listitem>
+
+              <listitem>
+                <para>"jbosscache-cl-cache.jdbc.table.primarykey" - name of
+                column with pk;</para>
+              </listitem>
+
+              <listitem>
+                <para>"jbosscache-cl-cache.jdbc.fqn.column" - name of one more
+                column, use as in example if not sure (if much interested,
+                please refer to JBossCache JDBCCacheLoader
+                documentation)</para>
+              </listitem>
+
+              <listitem>
+                <para>"jbosscache-cl-cache.jdbc.node.column" - name of one
+                more column, use as in example if not sure (if much
+                interested, please refer to JBossCache JDBCCacheLoader
+                documentation)</para>
+              </listitem>
+
+              <listitem>
+                <para>"jbosscache-cl-cache.jdbc.parent.column" - name of one
+                more column, use as in example if not sure (if much
+                interested, please refer to JBossCache JDBCCacheLoader
+                documentation)</para>
+              </listitem>
+
+              <listitem>
+                <para>"jbosscache-cl-cache.jdbc.datasource" - name of
+                configured in Container datasource, where you want to store
+                locks. Bets idea is to use the same as used for
+                workspace.</para>
+              </listitem>
+            </itemizedlist>
+          </listitem>
+        </itemizedlist>
+
+        <para>That's all. JCR is ready for running in a cluster.</para>
+      </section>
+
+      <section>
+        <title>Is JCR suitable for remote sites\* synchronization</title>
+
+        <itemizedlist>
+          <listitem>
+            <para>understand remote site as different buildings separated by a
+            WAN network.</para>
+          </listitem>
+        </itemizedlist>
+      </section>
+
+      <section>
+        <title>How to use lucene spellchecker?</title>
+
+        <para>There is few steps:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>enable lucene spellchecker in jcr QueryHandler
+            configuration:</para>
+
+            <programlisting>&lt;query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex"&gt;
+   &lt;properties&gt;
+      ...
+      &lt;property name="spellchecker-class" value="org.exoplatform.services.jcr.impl.core.query.lucene.spell.LuceneSpellChecker$FiveSecondsRefreshInterval" /&gt;
+      ...
+   &lt;/properties&gt;
+&lt;/query-handler&gt;</programlisting>
+          </listitem>
+        </itemizedlist>
+
+        <itemizedlist>
+          <listitem>
+            <para>execute query with rep:spellcheck function and word that is
+            checked:</para>
+
+            <programlisting>Query query = qm.createQuery("select rep:spellcheck() from nt:base where " + "jcr:path = '/' and spellcheck('word that is checked')", Query.SQL);
+RowIterator rows = query.execute().getRows();</programlisting>
+          </listitem>
+        </itemizedlist>
+
+        <itemizedlist>
+          <listitem>
+            <para>fetch a result:</para>
+
+            <programlisting>Row r = rows.nextRow();
+Value v = r.getValue("rep:spellcheck()");</programlisting>
+          </listitem>
+        </itemizedlist>
+
+        <para>If there is no any results, that means there is no suggestion,
+        so word is correct or spellcheckers dictionary do not contain any word
+        looking like checked word.</para>
+      </section>
+
+      <section>
+        <title>How can I affect to spellchecker results?</title>
+
+        <para>There is two parameters in jcr QueryHandler
+        configuration:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>minimal distance between checked word and proposed
+            suggestion;</para>
+          </listitem>
+
+          <listitem>
+            <para>search for more popular suggestions;</para>
+
+            <programlisting>&lt;query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex"&gt;
+   &lt;properties&gt;
+      ...
+      &lt;property name="spellchecker-class" value="org.exoplatform.services.jcr.impl.core.query.lucene.spell.LuceneSpellChecker$FiveSecondsRefreshInterval" /&gt;
+      &lt;property name="spellchecker-more-popular" value="false" /&gt;
+      &lt;property name="spellchecker-min-distance" value="0.55" /&gt;
+      ...
+   &lt;/properties&gt;
+&lt;/query-handler&gt;</programlisting>
+          </listitem>
+        </itemizedlist>
+
+        <para>Minimal distance is counted as Levenshtein distance between
+        checked word and spellchecker suggestion.</para>
+
+        <para>MorePopular paramter affects in next way: If "morePopular"
+        disabled:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>if the proposed word exist in the directory - no suggestion
+            given;</para>
+          </listitem>
+
+          <listitem>
+            <para>if the proposed word doesn't exist in the directory -
+            propose the closed word;</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>If "morePopular" enabled:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>no matter word exist or not, checker will propose the closed
+            word that is the most popular than checked word.</para>
+          </listitem>
+        </itemizedlist>
+      </section>
+    </section>
+
+    <section>
+      <title>JCR extensions</title>
+
+      <section>
+        <title>How to restore repository to existing repository ?</title>
+
+        <orderedlist>
+          <listitem>
+            <para>Remove existing repository, use :</para>
+
+            <programlisting>RepositoryService.removeRepository(String repositoryName)</programlisting>
+          </listitem>
+
+          <listitem>
+            <para>Restore repository, use</para>
+
+            <programlisting>BackupManager.restore(RepositoryBackupChainLog log, RepositoryEntry repositoryEntry, boolean asynchronous)</programlisting>
+          </listitem>
+        </orderedlist>
+      </section>
+
+      <section>
+        <title>How to restore workspace to existing worksapce ?</title>
+
+        <orderedlist>
+          <listitem>
+            <para>Remove existing workspace, use :</para>
+
+            <programlisting>ManageableRepository.removeWorkspace(String workspaceName)</programlisting>
+          </listitem>
+
+          <listitem>
+            <para>Restore workspace, use :</para>
+
+            <programlisting>BackupManager.restore(BackupChainLog log, String repositoryName, WorkspaceEntry workspaceEntry, boolean asynchronous)</programlisting>
+          </listitem>
+        </orderedlist>
+      </section>
+
+      <section>
+        <title>Does JCR support hot backup ?</title>
+
+        <para>Yes, JCR is support hot backup. Will use
+        org.exoplatform.services.jcr.ext.backup.BackupManager.</para>
+      </section>
+    </section>
+
+    <section>
+      <title>WebDAV</title>
+
+      <section>
+        <title>I uploaded a file to WebDAV server using Mac OS Finder, but the
+        file size is '0', what is wrong ?</title>
+
+        <para>This is a known finder bug started from Mac OS v.10.5.3 and not
+        yet fixed, .</para>
+
+        <para>for more details follow:&amp;nbsp; <ulink
+        url="http://discussions.apple.com/thread.jspa?threadID=1538882&amp;start=0&amp;tstart=0">Apple
+        Disscussion thread.</ulink></para>
+      </section>
+
+      <section>
+        <title>Can I manage 'cache-control' value for different media-types
+        from server configuration ?</title>
+
+        <para>Use "cache-control" configuration parameter.</para>
+
+        <para>The value of this parameter must contain colon-separated pairs
+        "MediaType:cache-control value"</para>
+
+        <para>For example if you need to cache all text/xml and text/plain
+        files for 5 minutes (300 sec.) and other text/\* files for 10 minutes
+        (600 sec.) use the next configuration:</para>
+
+        <programlisting>&lt;component&gt;
+   &lt;type&gt;org.exoplatform.services.jcr.webdav.WebDavServiceImpl&lt;/type&gt;
+   &lt;init-params&gt;
+      &lt;value-param&gt;
+         &lt;name&gt;cache-control&lt;/name&gt;
+         &lt;value&gt;text/xml,text/plain:max-age=300;text/*:max-age=600;&lt;/value&gt;
+      &lt;/value-param&gt;
+   &lt;init-params&gt;
+&lt;component&gt;
+</programlisting>
+      </section>
+
+      <section>
+        <title>How to perform WebDAV requests using curl ?</title>
+
+        <para>Simple Requests</para>
+
+        <para>For simple request such as: GET, HEAD, MKCOL, COPY, MOVE,
+        DELETE, CHECKIN, CHECKOUT, UNCHECKOUT, LOCK, UNLOCK, VERSIONCONTROL,
+        OPTIONS</para>
+
+        <para>perform:</para>
+
+        <programlisting>curl -i -u 'user:pass' -X 'METHOD_NAME' 'resource_url'</programlisting>
+
+        <para>for example to create a folder named test perform:</para>
+
+        <programlisting>curl -i -u 'root:exo' -X MKCOL 'http://localhost:8080/rest/jcr/repository/production/test</programlisting>
+
+        <para>to PUT a test.txt file from your current folder to "test "folder
+        on server perform:</para>
+
+        <programlisting>curl -i -u 'root:exo' -X PUT 'http://localhost:8080/rest/jcr/repository/production/test/test.txt' -d @test.txt</programlisting>
+
+        <para>Requests with XML body</para>
+
+        <para>For requests which contains xml body such as: ORDER, PROPFIND,
+        PROPPATCH, REPORT, SEARCH</para>
+
+        <para>add <emphasis role="bold">-d 'xml_body text'</emphasis> or
+        <emphasis role="bold">-d @body.xml</emphasis></para>
+
+        <para>(body.xml must contain a valid xml request bidy.) to you
+        curl-command:</para>
+
+        <programlisting>curl -i -u 'user:pass'  -X 'METHOD_NAME' -H 'Headers' 'resource_url' -d 'xml_body text'</programlisting>
+
+        <para>for example to find all files containing "test" perform:</para>
+
+        <programlisting>curl -i -u "root:exo" -X "SEARCH" "http://192.168.0.7:8080/rest/jcr/repository/production/" -d
+"&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
+   &lt;D:searchrequest xmlns:D='DAV:'&gt;
+      &lt;D:sql&gt;SELECT * FROM nt:base WHERE contains(*, 'text')&lt;/D:sql&gt;
+&lt;/D:searchrequest&gt;"</programlisting>
+
+        <para>if you need to add some headers to your request use \-H
+        key.</para>
+
+        <para>More information about methods parameters you can find in <ulink
+        url="http://www.ietf.org/rfc/rfc2518.txt">HTTP Extensions for
+        Distributed Authoring</ulink> specification.</para>
+      </section>
+
+      <section>
+        <title>How eXo JCR WebDAV server treats content encoding?</title>
+
+        <para>OS client (Windows, Linux etc) doesn't set an encoding in a
+        request. But eXo JCR WebDAV server looks for an encoding in a
+        Content-Type header and set it to jcr:encoding. See <ulink
+        url="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,</ulink>
+        14.17 Content-Type. e.g. Content-Type: text/html; charset=ISO-8859-4
+        So, if a client will set Content-Type header, e.g. JS code from a
+        page, it will works for a text file as expected.</para>
+
+        <para>If WebDAV request doesn't contain a content encoding it's
+        possible to write a dedicated action in a customer application. The
+        action will set jcr:encoding using its own logic, e.g. based on IP or
+        user preferences.</para>
+      </section>
+    </section>
+  </section>
+</chapter>

Added: jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq.xml
===================================================================
--- jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq.xml	                        (rev 0)
+++ jcr/branches/1.12.x/docs/reference/en/src/main/docbook/en-US/modules/faq.xml	2010-08-05 09:16:13 UTC (rev 2880)
@@ -0,0 +1,11 @@
+<?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">
+<part>
+  <?dbhtml filename="part-faq.html"?>
+
+  <title>Frequently Asked Question</title>
+
+  <xi:include href="faq/jcr-faq.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+</part>



More information about the exo-jcr-commits mailing list