cancel
Showing results for 
Search instead for 
Did you mean: 

WCM Cluster Problem

fej
Champ in-the-making
Champ in-the-making
Hi guys,

I've two alfresco 2.1.0 enterprise in cluster with Oracle DB.
I've install WCM on both nodes.
When I create a Web Project on first node I haven't problem and I see new web project on second node, but if I create a new Web Project on second node I have this error on the last page when click Finish:
      Please correct the errors below then click Finish.
    * A system error happened during the operation: Could not execute JDBC batch update

and in catalina.out I've:
13:43:55,598 ERROR [ui.common.Utils] A system error happened during the operation: Could not execute JDBC batch update
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
….
Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (ALFRESCO.SYS_C0012181) violated


I've test cluster with MySQL DB and error is:
14:03:39,461 ERROR [ui.common.Utils] A system error happened during the operation: Could not execute JDBC batch update
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
. . .
Caused by: java.sql.BatchUpdateException: Duplicate entry '107' for key 1

Can you help me?

Thanks,
FEj
2 REPLIES 2

steve
Champ in-the-making
Champ in-the-making
Hi,

Can you state your full cluster config please:

e.g.
alfclust1 + alfclust2 using shared db / seperate db's clustered

Thanks,

Steve

fej
Champ in-the-making
Champ in-the-making
Hi,

in my cluster I configure follow files in "tomcat/shared/classes/alfresco/extension" on two server (A and B):

1) custom-repository.properties with:
dir.root = /var/alfresco/alf_data/alf_data
dir.root.replicated = /var/alfresco/alf_data/replicated/alfresco
dir.contentstore.replicated = ${dir.root.replicated}/contentstore

# The location for lucene indexes
dir.indexes = ${dir.root}/lucene-indexes

# The location for lucene index locks
dir.indexes.lock = ${dir.indexes}/lock

index.recovery.mode=VALIDATE

# Database connection properties
db.username=alfresco
db.password=XXXXX

# Oracle connection (requires ojdbc14_g.jar)
db.driver=oracle.jdbc.OracleDriver

# Service
db.url=jdbcSmiley Surprisedracle:thin:@mydb:1521:boffice
db.name=boffice

2) ehcache-custom.xml

<ehcache>
    <diskStore
      path="java.io.tmpdir"/>

<!– ================================================================= –>

    <cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=automatic,
                        multicastGroupAddress=230.0.0.1,
                        multicastGroupPort=4446"/>

<!–
    <cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=manual,
                        rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1|
                                //server1:40000/sampleCache2|//server2:40000/sampleCache2"/>
–>

<!– ================================================================= –>

    <cacheManagerPeerListenerFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

<!–
    <cacheManagerPeerListenerFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
            properties="port=40001, socketTimeoutMillis=5000"/>
–>

<!– ================================================================= –>

    <defaultCache
        maxElementsInMemory="5000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </defaultCache>

    <cache
        name="org.hibernate.cache.StandardQueryCache"
        maxElementsInMemory="50"
        eternal="true"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.hibernate.cache.UpdateTimestampsCache"
        maxElementsInMemory="2000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.NodeImpl"
        maxElementsInMemory="10000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.QNameEntityImpl"
        maxElementsInMemory="100"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.NodeStatusImpl"
        maxElementsInMemory="10000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.NodeImpl.aspects"
        maxElementsInMemory="10000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.NodeImpl.properties"
        maxElementsInMemory="10000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.ChildAssocImpl"
        maxElementsInMemory="200000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.NodeImpl.sourceNodeAssocs"
        maxElementsInMemory="10000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.NodeImpl.targetNodeAssocs"
        maxElementsInMemory="10000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.NodeAssocImpl"
        maxElementsInMemory="1000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.StoreImpl"
        maxElementsInMemory="100"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.VersionCountImpl"
        maxElementsInMemory="100"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.AppliedPatchImpl"
        maxElementsInMemory="100"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="60"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"
        maxElementsInMemory="1000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl.entries"
        maxElementsInMemory="1000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.DbAccessControlEntryImpl"
        maxElementsInMemory="5000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.DbPermissionImpl"
        maxElementsInMemory="500"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.DbAuthorityImpl"
        maxElementsInMemory="10000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.domain.hibernate.DbAuthorityImpl.externalKeys"
        maxElementsInMemory="5000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <!– Non-Hibernate –>
   
    <cache
        name="org.alfresco.repo.avm.lookupSharedCache"
        maxElementsInMemory="50"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.avm.storeLookupSharedCache"
        maxElementsInMemory="100"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.repo.webservices.querySessionSharedCache"
        maxElementsInMemory="1000"
        eternal="false"
        timeToLiveSeconds="300"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = true,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = true,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.cache.parentAssocsCache"
        maxElementsInMemory="10000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.cache.userToAuthorityCache"
        maxElementsInMemory="10000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.cache.permissionsAccessCache"
        maxElementsInMemory="50000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.cache.nodeOwnerCache"
        maxElementsInMemory="20000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.cache.personCache"
        maxElementsInMemory="1000"
        eternal="true"
        overflowToDisk="false">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = false,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = false,
                                replicateAsynchronously = false"/>
    </cache>

    <cache
        name="org.alfresco.cache.ticketsCache"
        maxElementsInMemory="1000"
        eternal="true"
        overflowToDisk="true">

            <cacheEventListenerFactory
                    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                    properties="replicatePuts = true,
                                replicateUpdates = true,
                                replicateRemovals = true,
                                replicateUpdatesViaCopy = true,
                                replicateAsynchronously = false"/>
    </cache>

</ehcache>

3) index-tracking-context.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

    <!– Schedule index tracking every 30s –>
    <bean id="indexTrackerTrigger" class="org.alfresco.util.CronTriggerBean">
        <property name="jobDetail">
            <bean class="org.springframework.scheduling.quartz.JobDetailBean">
                <property name="jobClass">
                    <value>org.alfresco.repo.node.index.IndexRecoveryJob</value>
                </property>
                <property name="jobDataAsMap">
                    <map>
                        <entry key="indexRecoveryComponent">
                            <ref bean="indexTrackerComponent" />
                        </entry>
                    </map>
                </property>
            </bean>
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        <property name="cronExpression">
            <value>0,10,20,30,40,50 * * * * ?</value>
        </property>
    </bean>
   
    <bean
          id="indexTrackerComponent"
          class="org.alfresco.repo.node.index.IndexRemoteTransactionTracker"
          parent="indexRecoveryComponentBase">
        <property name="remoteOnly">
            <value>true</value>
        </property>
    </bean>

    <!– Forces the reindexing of nodes where content may have been missing before –>
    <!–
       This component can be triggered at intervals where asynchronous content sharing
       between clustered servers has been set up.  If content sharing is synchronous
       (see ReplicatingContentStore.setOutboundThreadPoolExecutor) then this component
       is not required.
    –>
    <!–
    <bean id="missingContentReindexTrigger" class="org.alfresco.util.TriggerBean">
        <property name="jobDetail">
            <bean class="org.springframework.scheduling.quartz.JobDetailBean">
                <property name="jobClass">
                    <value>org.alfresco.repo.node.index.IndexRecoveryJob</value>
                </property>
                <property name="jobDataAsMap">
                    <map>
                        <entry key="indexRecoveryComponent">
                            <ref bean="missingContentReindexComponent" />
                        </entry>
                    </map>
                </property>
            </bean>
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        <property name="startDelayMinutes">
            <value>5</value>
        </property>
        <property name="repeatCount">
            <value>0</value>
        </property>
    </bean>
    –>

</beans>


4) replicating-content-services-context.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
   <!–
    This file is not included in the application context by default.
    If you include this file, please ensure that you review the sample
    beans contained here.
    –>
<!–
   <bean id="backupContentStore"
         class="org.alfresco.repo.content.filestore.FileContentStore">
      <constructor-arg>
         <value>${dir.contentstore}/../backups/alfresco</value>
      </constructor-arg>
   </bean>
–>

   <bean id="sharedContentStore"
         class="org.alfresco.repo.content.filestore.FileContentStore">
      <constructor-arg>
         <value>${dir.contentstore.replicated}</value>
      </constructor-arg>
   </bean>

<!– First we must configure the FileContentStore bean to point to the replicated content store-


   <bean id="contentStoreReplicator"
         class="org.alfresco.repo.content.replication.ContentStoreReplicator"
         depends-on="fileContentStore, backupContentStore" >
      <property name="sourceStore">
          <ref bean="fileContentStore" />
      </property>
      <property name="targetStore">
          <ref bean="backupContentStore" />
      </property>
   </bean>
–>

<!–
   <bean id="contentStoreBackupTrigger" class="org.alfresco.util.CronTriggerBean">
      <property name="jobDetail">
         <bean class="org.springframework.scheduling.quartz.JobDetailBean">
            <property name="jobClass">
               <value>org.alfresco.repo.content.replication.ContentStoreReplicator$ContentStoreReplicatorJob</value>
            </property>
            <property name="jobDataAsMap">
               <map>
                  <entry key="contentStoreReplicator">
                     <ref bean="contentStoreReplicator" />
                  </entry>
               </map>
            </property>
         </bean>
      </property>
      <property name="scheduler">
         <ref bean="schedulerFactory" />
      </property>
      <property name="cronExpression">
         <value>0 0 03 * * ?</value>
      </property>
   </bean>
–>

<!–
   <bean id="contentService" class="org.alfresco.repo.content.RoutingContentService" init-method="init">
      <property name="transactionService">
          <ref bean="transactionComponent" />
      </property>
      <property name="dictionaryService">
          <ref bean="dictionaryService" />
      </property>
      <property name="nodeService">
          <ref bean="nodeService" />
      </property>
      <property name="transformerRegistry">
          <ref bean="contentTransformerRegistry" />
      </property>
      <property name="store">
          <ref bean="replicatingContentStore" />
      </property>
      <property name="policyComponent">
          <ref bean="policyComponent" />
      </property>
   </bean>
–>

   <bean id="replicatingContentStore"
         class="org.alfresco.repo.content.replication.ReplicatingContentStore" >
      <!– the preferred store for reads and writes –>
      <property name="primaryStore">
         <ref bean="fileContentStore" />
      </property>
      <!– example of possible secondary store configuration –>
      <property name="secondaryStores">
         <list>
            <ref bean="sharedContentStore" />
         </list>
      </property>
      <!– enable content missing from the primary store to be pulled in from the secondary stores –>
      <property name="inbound">
         <value>true</value>
      </property>
      <!– enable replication from the primary to the secondary stores –>
      <property name="outbound">
         <value>true</value>
      </property>
      <!– this is required if outbound replication is active, otherwise not –>
      <property name="transactionService">
         <ref bean="transactionComponent" />
      </property>
      <!– set this to force outbound replication to be asynchronous –>
      <property name="outboundThreadPoolExecutor">
         <ref bean="threadPoolExecutor" />
      </property>
   </bean>

   <bean id="contentService" class="org.alfresco.repo.content.RoutingContentService" init-method="init">
      <property name="transactionService">
          <ref bean="transactionComponent" />
      </property>
      <property name="dictionaryService">
          <ref bean="dictionaryService" />
      </property>
      <property name="nodeService">
          <ref bean="nodeService" />
      </property>
      <property name="transformerRegistry">
          <ref bean="contentTransformerRegistry" />
      </property>
      <property name="store">
          <ref bean="replicatingContentStore" />
      </property>
      <property name="policyComponent">
          <ref bean="policyComponent" />
      </property>
   </bean>

</beans>

5) wcm-bootstrap-context.xml
  - provided by WCM installation

while database is one and shared between two servers (A and B).

Thanks,
FEj