title: Setting up Jackrabbit in a cluster environment
body: <p>I want to set up Jackrabbit in a cluster (I am setting it up with Liferay).</p>
  
  <p>I read this document - <a href="http://wiki.apache.org/jackrabbit/Clustering" rel="nofollow">http://wiki.apache.org/jackrabbit/Clustering</a> , unfortunately it's very short, so I don't understand some of the concepts and best practices. Let me first explain what is my set up:</p>
  
  <p>we have 2 weblogic servers that share the same filesystem and we deploy the same war to both weblogics. I use Oracle as a db (I have connection pool configured in WL and want to connect using JNDI)</p>
  
  <p>As I understand from the docs each node has to have a separate configuration with it's own repository directory, workspace filesystem and search index. </p>
  
  <p>Both nodes share PersistranceManager, repository filesystem and datastore (if I have and)</p>
  
  <p>Here are the questions:</p>
  
  <ol>
  <li><p>what is workspace filesystem and how is it different from repository filesystem. And what is workspace - as I understand it's part of repository and repository can have multiple workspaces but what is workspace is not described in docs.</p></li>
  <li><p>I want performance to be the best, I won't have to much content and users (10s of simultaneous users), so I want to optimize page load time for faster rendering of the pages. What would be the best practice - should I configure PersistanceManager to go to db? </p></li>
  <li><p>where should repository filesystem point on each node? </p></li>
  <li><p>where should workspaces point to on each node?</p></li>
  <li><p>where should workspace filesystem point to? </p></li>
  </ol>
  
  <p>I tried to point all of them to my db, but I seem to have deadlocks (or db works too slow).</p>
  
  <p>And I enabled logging and I see a lot of unnecessary reads, looks like for each upload of the file jackrabbit opens connection, pre-caches all the files, closes and does it several times (takes about a minute) to upload very small file, most likely something is wrong with my config.</p>
  
  <p>Here is my config file:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;?xml version="1.0"?&gt;
  &lt;Repository&gt;
  &lt;FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem"&gt;
          &lt;param name="driver" value="javax.naming.InitialContext"/&gt;
          &lt;param name="url" value="ISG" /&gt;
  
      &lt;param name="schema" value="oracle"/&gt;
      &lt;param name="schemaObjectPrefix" value="J_R_FS_"/&gt;
  &lt;/FileSystem&gt;
  &lt;Security appName="Jackrabbit"&gt;
      &lt;AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" /&gt;
      &lt;LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule"&gt;
          &lt;param name="anonymousId" value="anonymous" /&gt;
      &lt;/LoginModule&gt;
  &lt;/Security&gt;
  &lt;Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="liferay" /&gt;
  &lt;Workspace name="${wsp.name}"&gt;
      &lt;PersistenceManager class="org.apache.jackrabbit.core.persistence.db.OraclePersistenceManager"&gt;
              &lt;param name="driver" value="javax.naming.InitialContext"/&gt;
              &lt;param name="url" value="ISG" /&gt;
          &lt;param name="tableSpace" value="" /&gt;
  
          &lt;param name="schema" value="oracle" /&gt;
          &lt;param name="schemaObjectPrefix" value="J_PM_${wsp.name}_" /&gt;
          &lt;param name="externalBLOBs" value="false" /&gt;
      &lt;/PersistenceManager&gt;
  
      &lt;FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem"&gt;
              &lt;param name="driver" value="javax.naming.InitialContext"/&gt;
              &lt;param name="url" value="ISG" /&gt;
          &lt;param name="tableSpace" value="" /&gt;
  
          &lt;param name="schema" value="oracle"/&gt;
          &lt;param name="schemaObjectPrefix" value="J_FS_${wsp.name}_"/&gt;
      &lt;/FileSystem&gt;
  &lt;/Workspace&gt;
  &lt;Versioning rootPath="${rep.home}/version"&gt;
      &lt;FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem"&gt;
              &lt;param name="driver" value="javax.naming.InitialContext"/&gt;
              &lt;param name="url" value="ISG" /&gt;
  
          &lt;param name="schema" value="oracle"/&gt;
          &lt;param name="schemaObjectPrefix" value="J_V_FS_"/&gt;
      &lt;/FileSystem&gt;
      &lt;PersistenceManager class="org.apache.jackrabbit.core.persistence.db.OraclePersistenceManager"&gt;
              &lt;param name="driver" value="javax.naming.InitialContext"/&gt;
              &lt;param name="url" value="ISG" /&gt;
          &lt;param name="tableSpace" value="" /&gt;
  
          &lt;param name="schema" value="oracle" /&gt;
          &lt;param name="schemaObjectPrefix" value="J_V_PM_" /&gt;
          &lt;param name="externalBLOBs" value="false" /&gt;
      &lt;/PersistenceManager&gt;
  &lt;/Versioning&gt;
  
  &lt;Cluster id="node_1" syncDelay="2000"&gt;
    &lt;Journal class="org.apache.jackrabbit.core.journal.OracleDatabaseJournal"&gt;
          &lt;param name="revision" value="${rep.home}/revision.log"/&gt;
              &lt;param name="driver" value="javax.naming.InitialContext"/&gt;
              &lt;param name="url" value="ISG" /&gt;
          &lt;param name="tableSpace" value="" /&gt;
  
          &lt;param name="schema" value="oracle"/&gt;
          &lt;param name="schemaObjectPrefix" value="J_C_"/&gt;
      &lt;/Journal&gt;
  &lt;/Cluster&gt;
  &lt;/Repository&gt;
  </code></pre>