[jbosscache-commits] JBoss Cache SVN: r7002 - in core/trunk/src: main/docbook/userguide/en/modules and 15 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Oct 22 21:10:13 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-10-22 21:10:13 -0400 (Wed, 22 Oct 2008)
New Revision: 7002

Added:
   core/trunk/src/main/docbook/images/writeskew.png
   core/trunk/src/main/resources/config-samples/all.xml
   core/trunk/src/main/resources/config-samples/external-jgroups-file.xml
   core/trunk/src/main/resources/config-samples/string-property-replaced.xml
Removed:
   core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTest.java
   core/trunk/src/test/resources/configs/repl-with-cl.xml
   core/trunk/src/test/resources/configs/repl-with-cl2.xml
   core/trunk/src/test/resources/jbc2-registry-configs.xml
Modified:
   core/trunk/src/main/docbook/userguide/en/modules/architecture.xml
   core/trunk/src/main/docbook/userguide/en/modules/basic_api.xml
   core/trunk/src/main/docbook/userguide/en/modules/cache_loaders.xml
   core/trunk/src/main/docbook/userguide/en/modules/configuration.xml
   core/trunk/src/main/docbook/userguide/en/modules/configuration_reference.xml
   core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml
   core/trunk/src/main/docbook/userguide/en/modules/introduction.xml
   core/trunk/src/main/docbook/userguide/en/modules/preface.xml
   core/trunk/src/main/docbook/userguide/en/modules/replication.xml
   core/trunk/src/main/docbook/userguide/en/modules/transactions.xml
   core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
   core/trunk/src/main/java/org/jboss/cache/config/Configuration.java
   core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigHelper.java
   core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java
   core/trunk/src/main/java/org/jboss/cache/config/parsing/element/CustomInterceptorsElementParser.java
   core/trunk/src/main/java/org/jboss/cache/config/parsing/element/EvictionElementParser.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/base/CommandInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/util/FileLookup.java
   core/trunk/src/main/resources/config-samples/buddy-replication.xml
   core/trunk/src/main/resources/config-samples/cacheloader-enabled.xml
   core/trunk/src/main/resources/config-samples/eviction-enabled.xml
   core/trunk/src/main/resources/config-samples/invalidation-async.xml
   core/trunk/src/main/resources/config-samples/local.xml
   core/trunk/src/main/resources/config-samples/multiplexer-enabled.xml
   core/trunk/src/main/resources/config-samples/total-replication.xml
   core/trunk/src/main/resources/config2to3.xslt
   core/trunk/src/main/resources/schema/jbosscache-config-3.0.xsd
   core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTransformerTest.java
   core/trunk/src/test/java/org/jboss/cache/config/StringPropertyReplacementTest.java
   core/trunk/src/test/java/org/jboss/cache/config/parsing/CacheConfigsTest.java
   core/trunk/src/test/java/org/jboss/cache/config/parsing/Eviction2xto3xCompatibilityTest.java
   core/trunk/src/test/java/org/jboss/cache/config/parsing/EvictionElementParserTest.java
   core/trunk/src/test/java/org/jboss/cache/config/parsing/SampleConfigFilesCorrectnessTest.java
   core/trunk/src/test/java/org/jboss/cache/config/parsing/XmlConfigurationParserTest.java
   core/trunk/src/test/java/org/jboss/cache/loader/JDBCCacheLoaderStateTransferTest.java
   core/trunk/src/test/resources/configs/buddy-replication-cache.xml
   core/trunk/src/test/resources/configs/clonable-config.xml
   core/trunk/src/test/resources/configs/conf2x/clonable-config.xml
   core/trunk/src/test/resources/configs/conf2x/multiplexer-enabled-cache.xml
   core/trunk/src/test/resources/configs/conf2x/optimistically-locked-cache.xml
   core/trunk/src/test/resources/configs/conf2x/policyPerRegion-eviction.xml
   core/trunk/src/test/resources/configs/local-lru-eviction.xml
   core/trunk/src/test/resources/configs/local-passivation.xml
   core/trunk/src/test/resources/configs/local-tx.xml
   core/trunk/src/test/resources/configs/mixedPolicy-eviction.xml
   core/trunk/src/test/resources/configs/mux.xml
   core/trunk/src/test/resources/configs/mvcc-repl-sync-br.xml
   core/trunk/src/test/resources/configs/parser-test-async.xml
   core/trunk/src/test/resources/configs/parser-test.xml
   core/trunk/src/test/resources/configs/policyPerRegion-eviction.xml
   core/trunk/src/test/resources/configs/replSync.xml
   core/trunk/src/test/resources/configs/string-property-replaced.xml
   core/trunk/src/test/resources/jbc3-registry-configs.xml
   core/trunk/src/test/resources/log4j.xml
   core/trunk/src/test/resources/unit-test-cache-service.xml
Log:
- Updated docs
- Improved the XML file format
- Patched parser, XSLT transformer
- Updated sample configs we ship with


Added: core/trunk/src/main/docbook/images/writeskew.png
===================================================================
(Binary files differ)


Property changes on: core/trunk/src/main/docbook/images/writeskew.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: core/trunk/src/main/docbook/userguide/en/modules/architecture.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/architecture.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/architecture.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -227,7 +227,7 @@
       <section id="architecture.buddymanager">
          <title>BuddyManager</title>
          <para>
-            This class manages buddy groups and invokes group organisation remote calls to organise a cluster of
+            This class manages buddy groups and invokes group organization remote calls to organize a cluster of
             caches into smaller sub-groups.
          </para>
       </section>
@@ -260,7 +260,7 @@
          <literal>ObjectOutputStream</literal>
          during replication. Over various releases in the JBoss Cache 1.x.x series this approach was gradually
          deprecated
-         in favour of a more mature marshalling framework. In the JBoss Cache 2.x.x series, this is the only officially
+         in favor of a more mature marshalling framework. In the JBoss Cache 2.x.x series, this is the only officially
          supported and recommended mechanism for writing objects to datastreams.
       </para>
       <figure>

Modified: core/trunk/src/main/docbook/userguide/en/modules/basic_api.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/basic_api.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/basic_api.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -106,7 +106,7 @@
 
    // let's store some data in the node
    peterGriffin.put("isCartoonCharacter", Boolean.TRUE);
-   peterGriffin.put("favouriteDrink", new Beer());
+   peterGriffin.put("favoriteDrink", new Beer());
 
    // some tests (just assume this code is in a JUnit test case)
    assertTrue(peterGriffin.get("isCartoonCharacter"));
@@ -115,14 +115,14 @@
 
    Set keys = new HashSet();
    keys.add("isCartoonCharacter");
-   keys.add("favouriteDrink");
+   keys.add("favoriteDrink");
 
    assertEquals(keys, peterGriffin.getKeys());
 
    // let's remove some data from the node
-   peterGriffin.remove("favouriteDrink");
+   peterGriffin.remove("favoriteDrink");
 
-   assertNull(peterGriffin.get("favouriteDrink");
+   assertNull(peterGriffin.get("favoriteDrink");
 
    // let's remove the node altogether
    rootNode.removeChild(peterGriffinFqn);
@@ -139,14 +139,14 @@
    Fqn peterGriffinFqn = Fqn.fromString("/griffin/peter");
 
    cache.put(peterGriffinFqn, "isCartoonCharacter", Boolean.TRUE);
-   cache.put(peterGriffinFqn, "favouriteDrink", new Beer());
+   cache.put(peterGriffinFqn, "favoriteDrink", new Beer());
 
    assertTrue(peterGriffin.get(peterGriffinFqn, "isCartoonCharacter"));
    assertTrue(cache.getRootNode().hasChild(peterGriffinFqn));
 
-   cache.remove(peterGriffinFqn, "favouriteDrink");
+   cache.remove(peterGriffinFqn, "favoriteDrink");
 
-   assertNull(cache.get(peterGriffinFqn, "favouriteDrink");
+   assertNull(cache.get(peterGriffinFqn, "favoriteDrink");
 
    cache.removeNode(peterGriffinFqn);
 

Modified: core/trunk/src/main/docbook/userguide/en/modules/cache_loaders.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/cache_loaders.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/cache_loaders.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -125,8 +125,7 @@
       </para>
 
       <para>See the javadocs on this interface for a detailed explanation on each method and the contract
-         implementations
-         would need to fulfil.
+         implementations would need to fulfill.
       </para>
 
    </section>
@@ -299,7 +298,7 @@
          .
       </para>
 
-      <section>
+      <section id="sscl">
          <title>Singleton Store Configuration</title>
 
          <programlisting role="XML"><![CDATA[
@@ -364,7 +363,7 @@
          <para>
             The
             <literal>properties</literal>
-            subelement defines properties that allow changing the behaivour of the
+            subelement defines properties that allow changing the behavior of the
             class providing the singleton store functionality. By default,
             <literal>pushStateWhenCoordinator</literal>
             and
@@ -438,7 +437,7 @@
       <section>
          <title>File system based cache loaders</title>
          <para>
-            JBoss Cache ships with several cache loaders that utilise the file system as a data store. They all require
+            JBoss Cache ships with several cache loaders that utilize the file system as a data store. They all require
             that the
             <literal><![CDATA[<loader><properties>]]></literal>
             configuration element
@@ -926,7 +925,7 @@
                at runtime. This runtime library may be obtained through a Sourceforge Maven
                Repository. Include the following sections in your pom.xml file:
             </para>
-            <programlisting><![CDATA[
+            <programlisting role="XML"><![CDATA[
       <repository>
          <id>e-xml.sourceforge.net</id>
          <url>http://e-xml.sourceforge.net/maven2/repository</url>
@@ -1036,7 +1035,7 @@
                      <literal>cache.s3.location</literal>
                      -
                      This choses a primary storage location for your data
-                     to reduce loading and retrevial latency.
+                     to reduce loading and retrieval latency.
                      Set to <literal>EU</literal>
                      to store data in Europe.
                      The default is <literal>null</literal>, to store data in
@@ -1143,7 +1142,7 @@
             <literal>JDBCCacheLoader</literal>
             based cache stores has changed in JBoss Cache 2.0 in such way that
             these cache loaders now write and read data using the same marhalling framework used to replicate data
-            accross the network. Such change is trivial for replication purpouses as it just requires the rest of the
+            across the network. Such change is trivial for replication purposes as it just requires the rest of the
             nodes to understand this format. However, changing the format of the data in cache stores brings up a new
             problem: how do users, which have their data stored in JBoss Cache 1.x.x format, migrate their stores to
             JBoss Cache 2.0 format?
@@ -1514,7 +1513,7 @@
             is used, with references to each
             cache loader you have configured. Use cases vary depending on the type of cache loaders used in the chain.
             One example is
-            using a filesystem based cache loader, colocated on the same host as the JVM, used as an overflow for
+            using a filesystem based cache loader, co-located on the same host as the JVM, used as an overflow for
             memory. This ensures
             data is available relatively easily and with low cost. An additional remote cache loader, such as a
             <literal>TcpDelegatingCacheLoader</literal>

Modified: core/trunk/src/main/docbook/userguide/en/modules/configuration.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/configuration.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/configuration.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -308,12 +308,15 @@
             before invoking your method on the cache.
          </para>
          <para>
-            E.g., to override the default node versioning used with optimistic locking:
+            E.g., to force a write lock when reading data (when used in a transaction, this provides semantics
+            similar to SELECT FOR UPDATE in a database)
          </para>
          <programlisting role="JAVA"><![CDATA[
-      DataVersion v = new MyCustomDataVersion();
-      cache.getInvocationContext().getOptionOverrides().setDataVersion(v);
-      Node ch = cache.getRoot().addChild(Fqn.fromString("/a/b/c"));
+      // first start a transaction
+      cache.getInvocationContext().getOptionOverrides().setForceWriteLock(true);
+      Node n = cache.getNode(Fqn.fromString("/a/b/c"));
+      // make changes to the node
+      // commit transaction        
    ]]></programlisting>
 
          <para>

Modified: core/trunk/src/main/docbook/userguide/en/modules/configuration_reference.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/configuration_reference.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/configuration_reference.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -4,738 +4,3351 @@
       <title>Sample XML Configuration File</title>
       <para>
          This is what a typical XML configuration file looks like. It is recommended that you use one of the
-         configurations
-         shipped with the JBoss Cache distribution and tweak according to your needs rather than write one from scratch.
+         configurations shipped with the JBoss Cache distribution and tweak according to your needs rather than write
+         one from scratch.
       </para>
       <programlisting role="XML"><![CDATA[
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  Sample JBoss Cache Service Configuration                             -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-<server>
-   
-   <!-- ==================================================================== -->
-   <!-- Defines JBoss Cache configuration                                      -->
-   <!-- ==================================================================== -->
 
-   <!-- Note the value of the 'code' attribute has changed since JBC 1.x -->
-   <mbean code="org.jboss.cache.jmx.CacheJmxWrapper" name="jboss.cache:service=Cache">
-   
-      <!-- Ensure JNDI and the TransactionManager are started before the
-           cache.  Only works inside JBoss AS; ignored otherwise -->
-      <depends>jboss:service=Naming</depends>
-      <depends>jboss:service=TransactionManager</depends>
+   <!--
+      isolation levels supported: READ_COMMITTED and REPEATABLE_READ
+      nodeLockingSchemes: mvcc, pessimistic (deprecated), optimistic (deprecated)
+   -->
+   <locking
+         isolationLevel="REPEATABLE_READ"
+         lockParentForChildInsertRemove="false"
+         lockAcquisitionTimeout="20000"
+         nodeLockingScheme="mvcc"
+         writeSkewCheck="false"
+         concurrencyLevel="500"/>
 
-      <!-- Configure the TransactionManager -->
-      <attribute name="TransactionManagerLookupClass">
-         org.jboss.cache.transaction.GenericTransactionManagerLookup
-      </attribute>
+   <!--
+      Used to register a transaction manager and participate in ongoing transactions.
+      -->
+   <transaction
+         transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"
+         syncRollbackPhase="false"
+         syncCommitPhase="false"/>
 
-      <!-- Node locking level : SERIALIZABLE
-                                REPEATABLE_READ (default)
-                                READ_COMMITTED
-                                READ_UNCOMMITTED
-                                NONE             -->
-      <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
+   <!--
+      Used to register JMX statistics in any available MBean server
+      -->
+   <jmxStatistics
+         enabled="false"/>
 
-      <!-- Lock parent before doing node additions/removes -->
-      <attribute name="LockParentForChildInsertRemove">true</attribute>
+   <!--
+      If region based marshalling is used, defines whether new regions are inactive on startup.
+   -->
+   <startup
+         regionsInactiveOnStartup="true"/>
 
-      <!-- Valid modes are LOCAL (default)
-                           REPL_ASYNC
-                           REPL_SYNC
-                           INVALIDATION_ASYNC
-                           INVALIDATION_SYNC   -->
-      <attribute name="CacheMode">REPL_ASYNC</attribute>
+   <!--
+      Used to register JVM shutdown hooks.
+      hookBehavior: DEFAULT, REGISTER, DONT_REGISTER
+   -->
+   <shutdown
+         hookBehavior="DEFAULT"/>
 
-      <!-- Name of cluster. Needs to be the same for all JBoss Cache nodes in a
-           cluster in order to find each other. 
+   <!--
+      Used to define async listener notification thread pool size
+   -->
+   <listeners
+         asyncPoolSize="1"/>
+
+   <!--
+      Used to enable invocation batching and allow the use of Cache.startBatch()/endBatch() methods.
+   -->
+   <invocationBatching
+         enabled="false"/>
+
+   <!--
+      serialization related configuration, used for replication and cache loading
+   -->
+   <serialization
+         objectInputStreamPoolSize="12"
+         objectOutputStreamPoolSize="14"
+         version="3.0.0"
+         marshallerClass="org.jboss.cache.marshall.VersionAwareMarshaller"
+         useLazyDeserialization="false"
+         useRegionBasedMarshalling="false"/>
+
+   <!--
+      This element specifies that the cache is clustered.
+      modes supported: replication (r) or invalidation (i).
+   -->
+   <clustering mode="replication" clusterName="JBossCache-cluster">
+
+      <!--
+         Defines whether to retrieve state on startup
       -->
-      <attribute name="ClusterName">JBossCache-Cluster</attribute>
+      <stateRetrieval timeout="20000" fetchInMemoryState="false"/>
 
-      <!--Uncomment next three statements to use the JGroups multiplexer.
-         This configuration is dependent on the JGroups multiplexer being
-         registered in an MBean server such as JBossAS.  This type of
-         dependency injection only works in the AS; outside it's up to
-         your code to inject a ChannelFactory if you want to use one. 
+      <!--
+         Network calls are synchronous.
       -->
+      <sync replTimeout="20000"/>
       <!--
-      <depends optional-attribute-name="MultiplexerService" 
-      		proxy-type="attribute">jgroups.mux:name=Multiplexer</depends>
-      <attribute name="MultiplexerStack">tcp</attribute>
+         Uncomment this for async replication.
       -->
+      <!-- <async useReplQueue="true" replQueueInterval="10000" replQueueMaxElements="500" serializationExecutorPoolSize="20" /> -->
 
-      <!-- JGroups protocol stack properties.
-         ClusterConfig isn't used if the multiplexer is enabled above.
-      -->
-      <attribute name="ClusterConfig">
-         <config>
-            <!-- UDP: if you have a multihomed machine, set the bind_addr 
-                 attribute to the appropriate NIC IP address -->
-            <!-- UDP: On Windows machines, because of the media sense feature
-                 being broken with multicast (even after disabling media sense)
-                 set the loopback attribute to true -->
-            <UDP mcast_addr="228.1.2.3" mcast_port="48866"
-                 ip_ttl="64" ip_mcast="true"
-                 mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
-                 ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
-                 loopback="false"/>
-            <PING timeout="2000" num_initial_members="3"/>
-            <MERGE2 min_interval="10000" max_interval="20000"/>
-            <FD shun="true"/>
-            <FD_SOCK/>
-            <VERIFY_SUSPECT timeout="1500"/>
-            <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800" />
-            <UNICAST timeout="600,1200,2400",4800/>
-            <pbcast.STABLE desired_avg_gossip="400000"/>
-            <FC max_credits="2000000" min_threshold="0.10"/>
-            <FRAG2 frag_size="8192"/>
-            <pbcast.GMS join_timeout="5000" shun="true" print_local_addr="true"/>
-            <pbcast.STATE_TRANSFER/>
-         </config>
-      </attribute>
-      
+      <!-- Uncomment to use Buddy Replication -->
       <!--
-          The max amount of time (in milliseconds) we wait until the
-          initial state (ie. the contents of the cache) are retrieved from
-          existing members in a clustered environment
+      <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
+         <dataGravitation auto="true" removeOnFind="true" searchBackupTrees="true"/>
+         <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
+            <properties>
+               numBuddies = 1
+               ignoreColocatedBuddies = true
+            </properties>
+         </locator>
+      </buddy>
       -->
-      <attribute name="StateRetrievalTimeout">20000</attribute>
 
       <!--
-          Number of milliseconds to wait until all responses for a
-          synchronous call have been received.
+         Configures the JGroups channel.  Looks up a JGroups config file on the classpath or filesystem.  udp.xml
+         ships with jgroups.jar and will be picked up by the class loader.
       -->
-      <attribute name="SyncReplTimeout">20000</attribute>
+      <jgroupsConfig configFile="udp.xml">
+         <!-- uncomment to define a JGroups stack here
 
-      <!-- Max number of milliseconds to wait for a lock acquisition -->
-      <attribute name="LockAcquisitionTimeout">15000</attribute>
+         <PING timeout="2000" num_initial_members="3"/>
+         <MERGE2 max_interval="30000" min_interval="10000"/>
+         <FD_SOCK/>
+         <FD timeout="10000" max_tries="5" shun="true"/>
+         <VERIFY_SUSPECT timeout="1500"/>
+         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0"
+                        retransmit_timeout="300,600,1200,2400,4800"
+                        discard_delivered_msgs="true"/>
+         <UNICAST timeout="300,600,1200,2400,3600"/>
+         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+                        max_bytes="400000"/>
+         <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false"
+                     view_bundling="true" view_ack_collection_timeout="5000"/>
+         <FRAG2 frag_size="60000"/>
+         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
+         <pbcast.FLUSH timeout="0"/>
+          -->
+      </jgroupsConfig>
+   </clustering>
 
-      <!-- Shutdown hook behavior.  Valid choices are: DEFAULT, REGISTER and DONT_REGISTER.
-           If this element is omitted, DEFAULT is used.  -->
-      <attribute name="ShutdownHookBehavior">DEFAULT</attribute>
+   <!--
+      Eviction configuration.  WakeupInterval defines how often the eviction thread runs, in milliseconds.  0 means
+      the eviction thread will never run.
+   -->
+   <eviction wakeUpInterval="500">
+      <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000" />
+      </default>
+      <region name="/org/jboss/data1">
+         <property name="timeToLive" value="2000" />
+      </region>
+      <region name="/org/jboss/data2" algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm" eventQueueSize="100000">
+         <property name="maxNodes" value="3000" />
+         <property name="minTimeToLive" value="4000" />
+      </region>
+   </eviction>
 
-      <!-- Enables or disables lazy unmarshalling.  If omitted, the default is that lazy unmarshalling is enabled. -->
-      <attribute name="UseLazyDeserialization">true</attribute>      
+   <!--
+      Cache loaders.
 
-      <!-- Specific eviction policy configurations. This is LRU -->
-      <attribute name="EvictionConfig">
-         <config>
-            <attribute name="wakeUpIntervalSeconds">5</attribute>
-            <!-- This defaults to 200000 if not specified -->
-            <attribute name="eventQueueSize">200000</attribute>
-            <attribute name="policyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
+      If passivation is enabled, state is offloaded to the cache loaders ONLY when evicted.  Similarly, when the state
+      is accessed again, it is removed from the cache loader and loaded into memory.
 
-            <!-- Cache wide default -->
-            <region name="/_default_">
-               <attribute name="maxNodes">5000</attribute>
-               <attribute name="timeToLiveSeconds">1000</attribute>
-            </region>
-            <region name="/org/jboss/data">
-               <attribute name="maxNodes">5000</attribute>
-               <attribute name="timeToLiveSeconds">1000</attribute>
-            </region>
-            <region name="/org/jboss/test/data">
-               <attribute name="maxNodes">5</attribute>
-               <attribute name="timeToLiveSeconds">4</attribute>
-            </region>
-            <region name="/test">
-               <attribute name="maxNodes">10000</attribute>
-               <attribute name="timeToLiveSeconds">4</attribute>
-            </region>
-            <region name="/maxAgeTest">
-               <attribute name="maxNodes">10000</attribute>
-               <attribute name="timeToLiveSeconds">8</attribute>
-               <attribute name="maxAgeSeconds">10</attribute>
-            </region>
-         </config>
-      </attribute>
-   </mbean>
-</server>
+      Otherwise, state is always maintained in the cache loader as well as in memory.
+
+      Set 'shared' to true if all instances in the cluster use the same cache loader instance, e.g., are talking to the
+      same database.
+   -->
+   <loaders passivation="false" shared="false">
+      <preload>
+         <node fqn="/org/jboss"/>
+         <node fqn="/org/tempdata"/>
+      </preload>
+
+      <!--
+         we can have multiple cache loaders, which get chained
+      -->
+      <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="true" fetchPersistentState="true"
+              ignoreModifications="true" purgeOnStartup="true">
+         <properties>
+            cache.jdbc.table.name=jbosscache
+            cache.jdbc.table.create=true
+            cache.jdbc.table.drop=true
+         </properties>
+         <singletonStore enabled="true" class="org.jboss.cache.loader.SingletonStoreCacheLoader">
+            <properties>
+               pushStateWhenCoordinator=true
+               pushStateWhenCoordinatorTimeout=20000
+            </properties>
+         </singletonStore>
+      </loader>
+   </loaders>
+
+   <!--
+      Define custom interceptors.  All custom interceptors need to extend org.jboss.cache.interceptors.base.CommandInterceptor
+   -->
+   <!--
+   <customInterceptors>
+      <interceptor position="first" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor">
+         <property name="attrOne" value="value1" />
+         <property name="attrTwo" value="value2" />
+      </interceptor>
+      <interceptor position="last" class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
+      <interceptor index="3" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
+      <interceptor before="org.jboss.cache.interceptors.CallInterceptor"
+                   class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
+      <interceptor after="org.jboss.cache.interceptors.CallInterceptor"
+                   class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
+   </customInterceptors>
+   -->
+</jbosscache>
+
+
 ]]></programlisting>
+      <section>
+         <title>XML validation</title>
+         <para>
+            Configuration XML files are validated using an XSD schema.  This schema is included in
+            <literal>jbosscache-core.jar</literal> and is also available online: <literal>http://www.jboss.org/jbosscache/jbosscache-config-3.0.xsd</literal>.
+            Most IDEs and XML authoring tools will be able to use this schema to validate your configuration file as you
+            write it.
+         </para>
+         <para>
+            JBoss Cache also validates your configuration file when you start up, and will throw an exception if it
+            encounters an invalid file.  You can suppress this behavior by passing in <literal>-Djbosscache.config.validate=false</literal>
+            to your JVM when you start up.  Alternatively, you can point the validator to a different schema by
+            passing in <literal>-Djbosscache.config.schemaLocation=url</literal>.
+         </para>
+      </section>
    </section>
 
 
    <section id="configuration_reference">
       <title>
-         Reference table of XML attributes
+         Configuration File Quick Reference
       </title>
-      <para>A list of definitions of each of the XML attributes used above. If the
-         description of an attribute states that it is
-         <emphasis>dynamic</emphasis>
-         ,
+      <para>A list of definitions of each of the XML elements attributes used above, and their bean counterparts for
+         programmatic configuration. If the description of an attribute states that it is <emphasis>dynamic</emphasis>,
          that means it can be changed after the cache is created and started.
       </para>
 
-      <informaltable frame="all">
-         <tgroup cols="2">
-            <tbody>
+      <table id="element.jbosscache">
+         <title>The <literal><![CDATA[<jbosscache />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
                <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<jbosscache />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
                   <entry>
-                     <para>Name</para>
+                     <para><emphasis role="bold">Description</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Description</para>
+                     <para>
+                        This is the root element for the JBoss Cache configuration file.  This is the only mandatory
+                        element in a valid JBoss Cache configuration file.
+                     </para>
                   </entry>
                </row>
+
                <row>
                   <entry>
-                     <para>BuddyReplicationConfig</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>An XML element that contains detailed buddy replication
-                        configuration. See
-                        <link linkend="br">section on Buddy Replication</link>
-                        for details.
+                     <para>none (is root element)</para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>,
+                        <link linkend="element.customInterceptors"><literal><![CDATA[<customInterceptors />]]></literal></link>,
+                        <link linkend="element.eviction"><literal><![CDATA[<eviction />]]></literal></link>,
+                        <link linkend="element.invocationBatching"><literal><![CDATA[<invocationBatching />]]></literal></link>,
+                        <link linkend="element.jmxStatistics"><literal><![CDATA[<jmxStatistics />]]></literal></link>,
+                        <link linkend="element.listeners"><literal><![CDATA[<listeners />]]></literal></link>,
+                        <link linkend="element.loaders"><literal><![CDATA[<loaders />]]></literal></link>,
+                        <link linkend="element.locking"><literal><![CDATA[<locking />]]></literal></link>,
+                        <link linkend="element.serialization"><literal><![CDATA[<serialization />]]></literal></link>,
+                        <link linkend="element.shutdown"><literal><![CDATA[<shutdown />]]></literal></link>,
+                        <link linkend="element.startup"><literal><![CDATA[<startup />]]></literal></link>,
+                        <link linkend="element.transaction"><literal><![CDATA[<transaction />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>CacheLoaderConfig</para>
+                     <para><emphasis role="bold">Bean Equivalent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>An XML element that contains detailed cache loader
-                        configuration. See
-                        <link linkend="cache_loaders">chapter on Cache Loaders</link>
-                        for details.
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.jbosscache">
+         <title><literal><![CDATA[<jbosscache />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<jbosscache />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">xmlns</emphasis></entry>
+                  <entry> - </entry>
+                  <entry>urn:jboss:jbosscache-core:config:3.0</entry>
+                  <entry>urn:jboss:jbosscache-core:config:3.0</entry>
+                  <entry>No</entry>
+                  <entry>Defines the XML namespace for all configuration entries.</entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">xmlns:xsi</emphasis></entry>
+                  <entry> - </entry>
+                  <entry>http://www.w3.org/2001/XMLSchema-instance</entry>
+                  <entry>http://www.w3.org/2001/XMLSchema-instance</entry>
+                  <entry>No</entry>
+                  <entry>Defines the XML schema instance for the configuration.</entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.locking">
+         <title>The <literal><![CDATA[<locking />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<locking />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element specifies locking behavior on the cache.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>CacheLoaderConfiguration</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+            
+      <table id="attributes.locking">
+         <title><literal><![CDATA[<locking />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<locking />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">isolationLevel</emphasis></entry>
+                  <entry>isolationLevel</entry>
+                  <entry>READ_COMMITTED, REPEATABLE_READ</entry>
+                  <entry>REPEATABLE_READ</entry>
+
+                  <entry>The isolation level used for transactions.</entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">lockParentForChildInsertRemove</emphasis></entry>
+                  <entry>lockParentForChildInsertRemove</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+
+                  <entry>Specifies whether parent nodes are locked when inserting or removing children.  This
+                     can also be configured on a per-node basis (see <literal>Node.setLockForChildInsertRemove()</literal></entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">lockAcquisitionTimeout</emphasis></entry>
+                  <entry>lockAcquisitionTimeout
+                     (<emphasis>dynamic</emphasis>)</entry>
+                  <entry>Any positive long value</entry>
+                  <entry>10000</entry>
+
+                  <entry>Length of time, in milliseconds, that a thread will try and acquire a lock.  A <literal>TimeoutException</literal>
+                  is usually thrown if a lock cannot be acquired in this given timeframe.  Can be overridden
+                  on a per-invocation basis using <literal>Option.setLockAcquisitionTimeout()</literal></entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">nodeLockingScheme</emphasis>
+                     (<emphasis>deprecated</emphasis>)</entry>
+                  <entry>nodeLockingScheme</entry>
+                  <entry>mvcc, pessimistic, optimistic</entry>
+                  <entry>mvcc</entry>
+
+                  <entry>Specifies the node locking scheme to be used.</entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">writeSkewCheck</emphasis></entry>
+                  <entry>writeSkewCheck</entry>
+                  <entry>true, false</entry>
+                  <entry>true</entry>
+
+                  <entry>Specifies whether to check for write skews.  Only used if <literal>nodeLockingScheme</literal>
+                  is <literal>mvcc</literal> and <literal>isolationLevel</literal> is <literal>REPEATABLE_READ</literal>.
+                  See the <link linkend="mvcc.writeskew">section on write skews</link> for a more detailed discussion.</entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">concurrencyLevel</emphasis></entry>
+                  <entry>concurrencyLevel</entry>
+                  <entry>Any positive integer; 0 not allowed.</entry>
+                  <entry>500</entry>
+
+                  <entry>Specifies the number of shared locks to use for write locks acquired.  Only used if <literal>nodeLockingScheme</literal>
+                  is <literal>mvcc</literal>.  See the <link linkend="mvcc.impl">section on JBoss Cache's MVCC implementation</link> for a more detailed discussion.</entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.transaction">
+         <title>The <literal><![CDATA[<transaction />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<transaction />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
                      <para>
-                        <emphasis>Deprecated</emphasis>
-                        . Use
-                        <literal>CacheLoaderConfig</literal>
-                        .
+                        This element specifies transactional behavior on the cache.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>CacheMode</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>LOCAL, REPL_SYNC, REPL_ASYNC, INVALIDATION_SYNC or
-                        INVALIDATION_ASYNC. Defaults to LOCAL. See the
-                        <link linkend="clustering">chapter on Clustering</link>
-                        for details.
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.transaction">
+         <title><literal><![CDATA[<transaction />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<transaction />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">transactionManagerLookupClass</emphasis></entry>
+                  <entry>transactionManagerLookupClass</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>none</entry>
+
+                  <entry>Specifies the <literal>TransactionManagerLookupClass</literal> implementation to use to obtain
+                  a transaction manager.  If not specified (and a <literal>TransactionManager</literal> is not injected
+                  using <literal>RuntimeConfig.setTransactionManager()</literal>, the cache will not be able to participate
+                  in any transactions.</entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">syncCommitPhase</emphasis></entry>
+                  <entry>syncCommitPhase
+                     (<emphasis>dynamic</emphasis>)
+                  </entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+
+                  <entry>If enabled, commit messages that are broadcast around a cluster are done so synchronously.  This is
+                  usually of little value since detecting a failure in broadcasting a commit means little else can be done
+                  except log a message, since some nodes in a cluster may have already committed and cannot rollback.</entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">syncRollbackPhase</emphasis></entry>
+                  <entry>syncRollbackPhase
+                     (<emphasis>dynamic</emphasis>)
+                  </entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+
+                  <entry>If enabled, rollback messages that are broadcast around a cluster are done so synchronously.  This is
+                  usually of little value since detecting a failure in broadcasting a rollback means little else can be done
+                  except log a message, since some nodes in a cluster may have already committed and cannot rollback.</entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.jmxStatistics">
+         <title>The <literal><![CDATA[<jmxStatistics />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<jmxStatistics />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element specifies whether cache statistics are gathered and reported via JMX.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ClusterConfig</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>The configuration of the underlying JGroups stack.
-                        Ignored if
-                        <literal>MultiplexerService</literal>
-                        and
-                        <literal>MultiplexerStack</literal>
-                        are used.
-                        See the various *-service.xml files in the source distribution
-                        <literal>etc/config-samples</literal>
-                        folder for examples.
-                        See the
-                        <ulink url="http://www.jgroups.org">JGroups documentation</ulink>
-                        or the
-                        <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=JGroups">JGroups wiki page</ulink>
-                        for more information.
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.jmxStatistics">
+         <title><literal><![CDATA[<jmxStatistics />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<jmxStatistics />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">enabled</emphasis></entry>
+                  <entry>exposeManagementStatistics</entry>
+                  <entry>true, false</entry>
+                  <entry>true</entry>
+
+                  <entry>Controls whether cache statistics are gathered and exposed via JMX.</entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.startup">
+         <title>The <literal><![CDATA[<startup />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<startup />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element specifies behavior when the cache starts up.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ClusterName</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Name of cluster. Needs to be the same for all nodes in a
-                        cluster in order for them to communicate with each other.
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.startup">
+         <title><literal><![CDATA[<startup />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<startup />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">regionsInactiveOnStartup</emphasis></entry>
+                  <entry>inactiveOnStartup</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+
+                  <entry>If <link linkend="architecture.regions">region-based marshalling</link> is enabled, this
+                     attribute controls whether new regions created are inactive on startup.</entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.shutdown">
+         <title>The <literal><![CDATA[<shutdown />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<shutdown />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element specifies behavior when the cache shuts down.
                      </para>
                   </entry>
                </row>
+
                <row>
                   <entry>
-                     <para>EvictionPolicyConfig</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Configuration parameter for the specified eviction policy.
-                        See
-                        <link linkend="eviction_policies">chapter on eviction policies</link>
-                        for details. This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.shutdown">
+         <title><literal><![CDATA[<shutdown />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<shutdown />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">hookBehavior</emphasis></entry>
+                  <entry>shutdownHookBehavior</entry>
+                  <entry>DEFAULT, DONT_REGISTER, REGISTER</entry>
+                  <entry>DEFAULT</entry>
+
+                  <entry>
+                     This attribute determines whether the cache registers a JVM shutdown hook so that it can clean
+                     up resources if the JVM is receives a shutdown signal.  By default a shutdown hook is registered
+                     if no MBean server (apart from the JDK default) is detected.  REGSTER forces the cache to register
+                     a shutdown hook even if an MBean server is detected, and DONT_REGISTER forces the cache NOT to
+                     register a shutdown hook, even if no MBean server is detected.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.listeners">
+         <title>The <literal><![CDATA[<listeners />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<listeners />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element specifies behavior of registered cache listeners.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ExposeManagementStatistics</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.listeners">
+         <title><literal><![CDATA[<listeners />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<listeners />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">asyncPoolSize</emphasis></entry>
+                  <entry>listenerAsyncPoolSize</entry>
+                  <entry>integer</entry>
+                  <entry>1</entry>
+
+                  <entry>
+                     The size of the threadpool used to dispatch events to cache listeners that have registered as
+                     asynchronous listeners.  If this number is less than 1, all asynchronous listeners will be
+                     treated as synchronous listeners and notified synchronously.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.invocationBatching">
+         <title>The <literal><![CDATA[<invocationBatching />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<invocationBatching />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
                      <para>
-                        Specifies whether interceptors that provide statistics should have statistics
-                        gathering enabled at startup. Also controls whether a
-                        <literal>CacheMgmtInterceptor</literal>
-                        (whose sole purpose is gathering
-                        statistics) should be added to the interceptor chain. Default value is
-                        <emphasis>true</emphasis>
-                        . See the
-                        <link linkend="jmx.statistics">JBoss Cache Statistics section</link>
-                        section for more details.
+                        This element specifies behavior of invocation batching.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>FetchInMemoryState
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.invocationBatching">
+         <title><literal><![CDATA[<invocationBatching />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<invocationBatching />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">enabled</emphasis></entry>
+                  <entry>invocationBatchingEnabled</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+
+                  <entry>
+                     Whether invocation batching is enabled or not.  See the chapter on
+                     <link linkend="batching">invocation batching</link> for details.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.serialization">
+         <title>The <literal><![CDATA[<serialization />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<serialization />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element specifies behavior of object serialization in JBoss Cache. 
                      </para>
                   </entry>
+               </row>
 
+               <row>
                   <entry>
-                     <para>Whether or not to acquire the initial in-memory state from
-                        existing members. Allows for hot caches when enabled. Also
-                        see the
-                        <literal>fetchPersistentState</literal>
-                        element in
-                        <literal>CacheLoaderConfig</literal>
-                        . Defaults to
-                        <literal>true</literal>
-                        . This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para><literal>Configuration</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.serialization">
+         <title><literal><![CDATA[<serialization />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<serialization />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">marshallerClass</emphasis></entry>
+                  <entry>marshallerClass</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>VersionAwareMarshaller</entry>
+
+                  <entry>
+                     Specifies the marshaller to use when serializing and deserializing objects, either for replication
+                     or persistence.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">useLazyDeserialization</emphasis></entry>
+                  <entry>useLazyDeserialization</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+
+                  <entry>
+                     A mechanism by which serialization and deserialization of objects is deferred till the point in time
+                     in which they are used and needed.  This typically means that any deserialization happens using the
+                     thread context class loader of the invocation that requires deserialization, and is an effective
+                     mechanism to provide classloader isolation.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">useRegionBasedMarshalling</emphasis> (<emphasis>deprecated</emphasis>)</entry>
+                  <entry>useRegionBasedMarshalling</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+
+                  <entry>
+                     An older mechanism by which classloader isolation was achieved, by registering classloaders on
+                     specific regions.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">version</emphasis></entry>
+                  <entry>replicationVersion</entry>
+                  <entry>Valid JBoss Cache version string</entry>
+                  <entry>Current version</entry>
+
+                  <entry>
+                     Used by the <literal>VersionAwareMarshaller</literal> in determining which version stream parser
+                     to use by default when initiating communications in a cluster.  Useful when you need to run a newer
+                     version of JBoss Cache in a cluster containing older versions, and can be used to perform rolling
+                     upgrades.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">objectInputStreamPoolSize</emphasis></entry>
+                  <entry>objectInputStreamPoolSize</entry>
+                  <entry>Positive integer</entry>
+                  <entry>50</entry>
+
+                  <entry>
+                     Not used at the moment.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">objectOutputStreamPoolSize</emphasis></entry>
+                  <entry>objectOutputStreamPoolSize</entry>
+                  <entry>Positive integer</entry>
+                  <entry>50</entry>
+
+                  <entry>
+                     Not used at the moment.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.eviction">
+         <title>The <literal><![CDATA[<eviction />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<eviction />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element controls how eviction works in the cache.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>InactiveOnStartup</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Whether or not the entire tree is inactive upon startup,
-                        only responding to replication messages after
-                        <literal>activateRegion()</literal>
-                        is called to activate one or
-                        more parts of the tree. If true, property
-                        <literal>FetchInMemoryState</literal>
-                        is ignored. This property
-                        should only be set to true if
-                        <literal>UseRegionBasedMarshalling</literal>
-                        is also
-                        <literal>true</literal>
-                        .
+                     <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.default"><literal><![CDATA[<default />]]></literal></link>,
+                        <link linkend="element.region"><literal><![CDATA[<region />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>StateRetrievalTimeout</para>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Time in milliseconds to wait for state
-                        retrieval. This should be longer than
-                        <literal>LockAcquisitionTimeout</literal>
-                        as the node
-                        providing state may need to wait that long to acquire
-                        necessary read locks on the cache. This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <para><literal>EvictionConfig</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.eviction">
+         <title><literal><![CDATA[<eviction />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<eviction />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">wakeUpInterval</emphasis></entry>
+                  <entry>wakeupInterval</entry>
+                  <entry>integer</entry>
+                  <entry>5000</entry>
+
+                  <entry>
+                     The frequency with which the eviction thread runs, in milliseconds.  If set to less than 1, the
+                     eviction thread never runs and is effectively disabled.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.default">
+         <title>The <literal><![CDATA[<default />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<default />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element defines the default eviction region.
                      </para>
                   </entry>
                </row>
 
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
 
+                  <entry>
+                     <para><link linkend="element.eviction"><literal><![CDATA[<eviction />]]></literal></link></para>
+                  </entry>
+               </row>
+
                <row>
                   <entry>
-                     <para>IsolationLevel</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Node locking isolation level : SERIALIZABLE, REPEATABLE_READ
-                        (default), READ_COMMITTED, READ_UNCOMMITTED, and NONE. Note that this is ignored if
-                        NodeLockingScheme is OPTIMISTIC. Case doesn't matter. See documentation on Transactions and
-                        Concurrency for more details.
+                     <para>
+                        <link linkend="element.property"><literal><![CDATA[<property />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>LockAcquisitionTimeout</para>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Time in milliseconds to wait for a lock to be acquired. If
-                        a lock cannot be acquired an exception will be thrown. This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <para><literal>EvictionRegionConfig</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.default">
+         <title><literal><![CDATA[<default />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<default />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">algorithmClass</emphasis></entry>
+                  <entry>evictionAlgorithmConfig</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>none</entry>
+                  <entry>
+                     This attribute needs to be specified if this tag is being used.  Note that if being configured
+                     programmatically, the eviction algorithm's corresponding <literal>EvictionAlgorithmConfig</literal>
+                     file should be used instead.  E.g., where you would use <literal>LRUAlgorithm</literal> in XML, you
+                     would use an instance of <literal>LRUAlgorithmConfig</literal> programmatically.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">actionPolicyClass</emphasis></entry>
+                  <entry>evictionActionPolicyClassName</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>DefaultEvictionActionPolicy</entry>
+                  <entry>
+                     The eviction action policy class, defining what happens when a node needs to be evicted.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">eventQueueSize</emphasis></entry>
+                  <entry>eventQueueSize
+                  (<emphasis>dynamic</emphasis></entry>
+                  <entry>integer</entry>
+                  <entry>200000</entry>
+                  <entry>
+                     The size of the bounded eviction event queue.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.region">
+         <title>The <literal><![CDATA[<region />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<region />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element defines an eviction region.  Multiple instances of this tag can exist provided they
+                        have unique <literal>name</literal> attributes.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>LockParentForChildInsertRemove</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Controls whether inserting or removing a node requires a write
-                        lock on the node's parent (when pessimistic locking is used) or whether
-                        it results in an update of the parent node's version (when optimistic
-                        locking is used). The default value is
-                        <code>false</code>
-                        .
+                     <para><link linkend="element.eviction"><literal><![CDATA[<eviction />]]></literal></link></para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.property"><literal><![CDATA[<property />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>MarshallerClass</para>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>An instance of
-                        <literal>org.jboss.cache.marshall.Marshaller</literal>
-                        used to serialize data to byte streams.
-                        Defaults to
-                        <literal>org.jboss.cache.marshall.VersionAwareMarshaller</literal>
-                        if not specified.
+                     <para><literal>EvictionRegionConfig</literal></para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.region">
+         <title><literal><![CDATA[<region />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<region />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">name</emphasis></entry>
+                  <entry>regionFqn</entry>
+                  <entry>A String that could be parsed using Fqn.fromString()</entry>
+                  <entry>none</entry>
+                  <entry>
+                     This should be a unique name that defines this region.  See the <link linkend="regions">chapter on eviction</link>
+                     for details of eviction regions.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">algorithmClass</emphasis></entry>
+                  <entry>evictionAlgorithmConfig</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>none</entry>
+                  <entry>
+                     This attribute needs to be specified if this tag is being used.  Note that if being configured
+                     programmatically, the eviction algorithm's corresponding <literal>EvictionAlgorithmConfig</literal>
+                     file should be used instead.  E.g., where you would use <literal>LRUAlgorithm</literal> in XML, you
+                     would use an instance of <literal>LRUAlgorithmConfig</literal> programmatically.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">actionPolicyClass</emphasis></entry>
+                  <entry>evictionActionPolicyClassName</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>DefaultEvictionActionPolicy</entry>
+                  <entry>
+                     The eviction action policy class, defining what happens when a node needs to be evicted.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">eventQueueSize</emphasis></entry>
+                  <entry>eventQueueSize
+                  (<emphasis>dynamic</emphasis></entry>
+                  <entry>integer</entry>
+                  <entry>200000</entry>
+                  <entry>
+                     The size of the bounded eviction event queue.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.property">
+         <title>The <literal><![CDATA[<property />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<property />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        A mechanism of passing in name-value properties to the enclosing configuration element.                        
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>MultiplexerService</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>The JMX object name of the service that defines the JGroups multiplexer.
-                        In JBoss AS 5.0 this service is normally defined in the jgroups-multiplexer.sar.
-                        This XML attribute can only be handled by the JBoss AS MBean deployment services;
-                        if it is included in a file passed to a
-                        <literal>CacheFactory</literal>
-                        the
-                        factory's creation of the cache will fail. Inside JBoss AS, the attribute should
-                        be specified using the "depends optional-attribute-name" syntax shown in
-                        the example above. Inside the AS if this attribute
-                        is defined, an instance of
-                        <literal>org.jgroups.jmx.JChannelFactoryMBean</literal>
-                        will be injected into the
-                        <literal>CacheJmxWrapper</literal>
-                        which will use
-                        it to obtain a multiplexed JGroups channel. The configuration
-                        of the channel will be that associated with
-                        <literal>MultiplexerStack</literal>
-                        .
-                        The
-                        <literal>ClusterConfig</literal>
-                        attribute will be ignored.
+                     <para>
+                        <link linkend="element.default"><literal><![CDATA[<default />]]></literal></link>,
+                        <link linkend="element.region"><literal><![CDATA[<region />]]></literal></link>,
+                        <link linkend="element.interceptor"><literal><![CDATA[<interceptor />]]></literal></link>
+                     </para>                     
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry></entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>Either direct setters or <literal>setProperties()</literal> enclosing bean</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.property">
+         <title><literal><![CDATA[<property />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<property />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">name</emphasis></entry>
+                  <entry>Either direct setters or <literal>setProperties()</literal> enclosing bean</entry>
+                  <entry>String</entry>
+                  <entry>none</entry>
+                  <entry>
+                     Property name
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">value</emphasis></entry>
+                  <entry>Either direct setters or <literal>setProperties()</literal> enclosing bean</entry>
+                  <entry>String</entry>
+                  <entry>none</entry>
+                  <entry>
+                     Property value
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.loaders">
+         <title>The <literal><![CDATA[<loaders />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<loaders />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        Defines any cache loaders.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>MultiplexerStack</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>The name of the JGroups stack to be used with the cache cluster.
-                        Stacks are defined in the configuration of the external
-                        <literal>MultiplexerService</literal>
-                        discussed above. In JBoss AS 5 this is normally done in the
-                        jgroups-multiplexer.sar/META-INF/multiplexer-stacks.xml file.
-                        The default stack is
-                        <literal>udp</literal>
-                        . This attribute is used in conjunction with
-                        <literal>MultiplexerService</literal>
-                        .
+                     <para>
+                        <link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>NodeLockingScheme</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>May be PESSIMISTIC (default) or OPTIMISTIC.
+                     <link linkend="element.preload"><literal><![CDATA[<preload />]]></literal></link>,
+                     <link linkend="element.loader"><literal><![CDATA[<loader />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>CacheLoaderConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.loaders">
+         <title><literal><![CDATA[<loaders />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<loaders />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">passivation</emphasis></entry>
+                  <entry>passivation</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     If true, cache loaders are used in passivation mode.  See the <link linkend="cache_loaders">chapter on cache loaders</link>
+                     for a detailed discussion on this.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">shared</emphasis></entry>
+                  <entry>shared</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     If true, cache loaders are used in shared mode.  See the <link linkend="cache_loaders">chapter on cache loaders</link>
+                     for a detailed discussion on this.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.preload">
+         <title>The <literal><![CDATA[<preload />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<preload />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        Defines preloading of Fqn subtrees when a cache starts up.  This element has no attributes.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ReplicationVersion</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
+
                   <entry>
-                     <para>Tells the cache to serialize cluster traffic
-                        in a format consistent with that used by the given release
-                        of JBoss Cache. Different JBoss Cache versions use different
-                        wire formats; setting this attribute tells a cache from a later
-                        release to serialize data using the format from an earlier
-                        release. This allows caches from different releases to
-                        interoperate. For example, a 2.1.0 cache could have this
-                        value set to "2.0.0", allowing it to interoperate with a 2.0.0
-                        cache. Valid values are a dot-separated release number, with
-                        any final qualifer also separated by a dot, e.g. "2.0.0" or "2.0.0.GA".
-                        Values that indicate a 1.x release are not supported in the 2.x series.
+                     <para>
+                        <link linkend="element.loaders"><literal><![CDATA[<loaders />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ReplQueueInterval</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Time in milliseconds for elements from the replication
-                        queue to be replicated. Only used if
-                        <literal>UseReplQueue</literal>
-                        is enabled. This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <link linkend="element.node"><literal><![CDATA[<node />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>CacheLoaderConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.node">
+         <title>The <literal><![CDATA[<node />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<node />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element defines a subtree under which all content will be preloaded from the cache loaders
+                        when the cache starts.  Multiple subtrees can be preloaded, although it only makes sense to
+                        define more than one subtree if they do not overlap.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ReplQueueMaxElements</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>Max number of elements in the replication queue until
-                        replication kicks in. Only used if
-                        <literal>UseReplQueue</literal>
-                        is enabled. This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <para>
+                        <link linkend="element.preload"><literal><![CDATA[<preload />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>SyncCommitPhase</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
+                  <entry></entry>
+               </row>
+
+               <row>
                   <entry>
-                     <para>This option is used to control the behaviour of the commit part of a 2-phase commit protocol,
-                        when
-                        using REPL_SYNC (does not apply to other cache modes). By default this is set to
-                        <literal>false</literal>
-                        . There is a performance penalty to enabling this, especially when running
-                        in a large cluster, but the upsides are greater cluster-wide data integrity. See the chapter on
-                        clustered caches for more information on this. This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>CacheLoaderConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.node">
+         <title><literal><![CDATA[<node />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<node />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">fqn</emphasis></entry>
+                  <entry>preload</entry>
+                  <entry>String</entry>
+                  <entry>none</entry>
+                  <entry>
+                     An Fqn to preload.  This should be a String that can be parsed with Fqn.fromString().  When doing
+                     this programmatically, you should create a single String containing all of the Fqns you wish to
+                     preload, separated by spaces, and pass that into <literal>CacheLoaderConfig.setPreload()</literal>.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.loader">
+         <title>The <literal><![CDATA[<loader />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<loader />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element defines a cache loader.  Multiple elements may be used to create cache loader
+                        chains.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>SyncReplTimeout</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>For synchronous replication: time in milliseconds to wait
-                        until replication acks have been received from all nodes in the
-                        cluster. It is usually best that this is greater than
-                        <literal>LockAcquisitionTimeout</literal>
-                        .
-                        This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <para>
+                        <link linkend="element.loaders"><literal><![CDATA[<loaders />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>SyncRollbackPhase</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>This option is used to control the behaviour of the rollback part of a 2-phase commit
-                        protocol, when
-                        using REPL_SYNC (does not apply to other cache modes). By default this is set to
-                        <literal>false</literal>
-                        . There is a performance penalty to enabling this, especially when running
-                        in a large cluster, but the upsides are greater cluster-wide data integrity. See the chapter on
-                        clustered caches for more information on this. This property is
-                        <emphasis>dynamic</emphasis>
-                        .
+                     <link linkend="element.properties"><literal><![CDATA[<properties />]]></literal></link>,
+                     <link linkend="element.singletonStore"><literal><![CDATA[<singletonStore />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>IndividualCacheLoaderConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.loader">
+         <title><literal><![CDATA[<loader />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<loader />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">class</emphasis></entry>
+                  <entry>className</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>none</entry>
+                  <entry>
+                     A cache loader implementation to use.
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">async</emphasis></entry>
+                  <entry>async</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     All modifications to this cache loader happen asynchronously, on a separate thread.
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">fetchPersistentState</emphasis></entry>
+                  <entry>fetchPersistentState</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     When a cache starts up, retrieve persistent state from the cache loaders in other caches in the
+                     cluster.  Only <emphasis>one</emphasis> loader element may set this to true.  Also, only makes
+                     sense if the <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+                     tag is present.
+
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">purgeOnStartup</emphasis></entry>
+                  <entry>purgeOnStartup</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     Purges this cache loader when it starts up.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.properties">
+         <title>The <literal><![CDATA[<properties />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<properties />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element contains a set of properties that can be read by a <literal>java.util.Properties</literal>
+                        instance.  This tag has no attributes, and the contents of this tag will be parsed by
+                        <literal>Properties.load()</literal>.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>TransactionManagerLookupClass</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>The fully qualified name of a class implementing
-                        TransactionManagerLookup. Default is
-                        JBossTransactionManagerLookup. There is also an option of
-                        GenericTransactionManagerLookup for example.
+                     <para>
+                        <link linkend="element.loader"><literal><![CDATA[<loader />]]></literal></link>,
+                        <link linkend="element.singletonStore"><literal><![CDATA[<singletonStore />]]></literal></link>,
+                        <link linkend="element.locator"><literal><![CDATA[<locator />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>UseInterceptorMbeans</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
+                  <entry></entry>
+               </row>
+
+               <row>
                   <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>IndividualCacheLoaderConfig.setProperties()</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.singletonStore">
+         <title>The <literal><![CDATA[<singletonStore />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<singletonStore />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
                      <para>
-                        <emphasis>Deprecated</emphasis>
-                        . Use
-                        <literal>ExposeManagementStatistics</literal>
-                        .
+                        This element configures the enclosing cache loader as a <link linkend="sscl">singleton store cache loader</link>.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>UseRegionBasedMarshalling</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>When unmarshalling replicated data, this option specifies whether or not to
-                        support use of different classloaders for different cache regions. This defaults to
-                        <literal>false</literal>
-                        if unspecified.
-                        <p/>
-                        <b>DEPRECATED.</b>
-                        This option will disappear in JBoss Cache 3.x. See
-                        <literal>UseLazyDeserialization</literal>
-                        instead.
+                     <para>
+                        <link linkend="element.loader"><literal><![CDATA[<loader />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>UseReplQueue</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>For asynchronous replication: whether or not to use a
-                        replication queue. Defaults to
-                        <literal>false</literal>
-                        .
+                     <link linkend="element.properties"><literal><![CDATA[<properties />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>SingletonStoreConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.singletonStore">
+         <title><literal><![CDATA[<singletonStore />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<singletonStore />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">class</emphasis></entry>
+                  <entry>className</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>SingletonStoreCacheLoader</entry>
+                  <entry>
+                     A singleton store wrapper implementation to use.
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">enabled</emphasis></entry>
+                  <entry>enabled</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     If true, the singleton store cache loader is enabled.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.customInterceptors">
+         <title>The <literal><![CDATA[<customInterceptors />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<customInterceptors />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element allows you to define custom interceptors for the cache.  This tag has no attributes.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ShutdownHookBehavior</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>An optional parameter that controls whether JBoss Cache registers a shutdown hook with the
-                        JVM
-                        runtime. Allowed values are<literal>DEFAULT</literal>,
-                        <literal>REGISTER</literal>
-                        and
-                        <literal>DONT_REGISTER</literal>.
-                        <literal>REGISTER</literal>
-                        and
-                        <literal>DONT_REGISTER</literal>
-                        forces or suppresses the registration of a shutdown hook, respectively, and
-                        <literal>DEFAULT</literal>
-                        registers one if an MBean server (other than the JDK default) cannot be found and it is assumed
-                        that the
-                        cache is running in a managed environment. The default if unspecified is, as expected,<literal>
-                        DEFAULT</literal>.
+                     <para>
+                        <link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link>
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>UseLazyDeserialization</para>
+                     <para><emphasis role="bold">Children</emphasis></para>
                   </entry>
 
                   <entry>
-                     <para>An optional parameter that can be used to enable or disable the use of lazy deserialization
-                        for cached objects. Defaults to<literal>false</literal>, since it adds a small processing
-                        overhead.
-                        If lazy deserialization is disabled, support for implicitly using context class loaders
-                        registered
-                        with the calling thread goes away.
+                     <link linkend="element.interceptor"><literal><![CDATA[<interceptor />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>None.  At runtime, instantiate your own interceptor and pass it in to the cache using
+                     <literal>Cache.addInterceptor()</literal>.</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.interceptor">
+         <title>The <literal><![CDATA[<interceptor />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<interceptor />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This element allows you configure a custom interceptor.  This tag may appear multiple times.
                      </para>
                   </entry>
                </row>
 
                <row>
                   <entry>
-                     <para>ObjectInputStreamPoolSize and ObjectOutputStreamPoolSize</para>
+                     <para><emphasis role="bold">Parent</emphasis></para>
                   </entry>
 
                   <entry>
                      <para>
-                        Since JBoss Cache 2.1.0, object input and output streams - used to serialize and deserialize RPC
-                        calls in a cluster - are pooled to reduce the overhead of constructing such streams. They are
-                        reused
-                        by making use of special resettable stream implementations.
+                        <link linkend="element.customInterceptor"><literal><![CDATA[<customInterceptor />]]></literal></link>
                      </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <link linkend="element.property"><literal><![CDATA[<property />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>None.  At runtime, instantiate your own interceptor and pass it in to the cache using
+                     <literal>Cache.addInterceptor()</literal>.</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.interceptor">
+         <title><literal><![CDATA[<interceptor />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<interceptor />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">class</emphasis></entry>
+                  <entry> - </entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>none</entry>
+                  <entry>
+                     An implementation of <literal>CommandInterceptor</literal>.
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">position</emphasis></entry>
+                  <entry> - </entry>
+                  <entry>first, last</entry>
+                  <entry></entry>
+                  <entry>
+                     A position at which to place this interceptor in the chain.  First is the first interceptor
+                     encountered when an invocation is made on the cache, last is the last interceptor before the
+                     call is passed on to the data structure.  <emphasis>Note that this attribute is mutually
+                  exclusive with <literal>before</literal>, <literal>after</literal> and <literal>index</literal>.</emphasis>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">before</emphasis></entry>
+                  <entry> - </entry>
+                  <entry>Fully qualified class name of an interceptor</entry>
+                  <entry></entry>
+                  <entry>
+                     Will place the new interceptor directly before the instance of the named interceptor.
+                     <emphasis>Note that this attribute is mutually exclusive with <literal>position</literal>,
+                        <literal>after</literal> and <literal>index</literal>.</emphasis>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">after</emphasis></entry>
+                  <entry> - </entry>
+                  <entry>Fully qualified class name of an interceptor</entry>
+                  <entry></entry>
+                  <entry>
+                     Will place the new interceptor directly after the instance of the named interceptor.
+                     <emphasis>Note that this attribute is mutually exclusive with <literal>position</literal>,
+                        <literal>before</literal> and <literal>index</literal>.</emphasis>
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">index</emphasis></entry>
+                  <entry> - </entry>
+                  <entry>Positive integers</entry>
+                  <entry></entry>
+                  <entry>
+                     A position at which to place this interceptor in the chain, with 0 being the first position.
+                     <emphasis>Note that this attribute is mutually exclusive with <literal>position</literal>,
+                        <literal>before</literal> and <literal>after</literal>.</emphasis>
+                  </entry>
+               </row>
+
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.clustering">
+         <title>The <literal><![CDATA[<clustering />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<clustering />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
                      <para>
-                        by default, these stream pools are set at
-                        <literal>50</literal>
-                        objects each. You could increase or decrease the pool
-                        size if, while profiling, you see a lot of threads blocking on
-                        <literal>ObjectStreamPool.getInputStream()</literal>
-                        or<literal>ObjectStreamPool.getOutputStream()</literal>. In general, having more streams is
-                        better
-                        than having fewer than needed. Based on your application, make sure you have more streams
-                        available
-                        than number of threads you expect to concurrently write to the cache.
+                        If this element is present, the cache is started in clustered mode.  Attributes and child
+                        elements define clustering characteristics.
                      </para>
                   </entry>
                </row>
 
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <link linkend="element.stateRetrieval"><literal><![CDATA[<stateRetrieval />]]></literal></link>,
+                     <link linkend="element.sync"><literal><![CDATA[<sync />]]></literal></link>,
+                     <link linkend="element.async"><literal><![CDATA[<async />]]></literal></link>,
+                     <link linkend="element.buddy"><literal><![CDATA[<buddy />]]></literal></link>,
+                     <link linkend="element.jgroupsConfig"><literal><![CDATA[<jgroupsConfig />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>Configuration</para>
+                  </entry>
+               </row>
             </tbody>
          </tgroup>
-      </informaltable>
+      </table>
+
+      <table id="attributes.clustering">
+         <title><literal><![CDATA[<clustering />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<clustering />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">mode</emphasis></entry>
+                  <entry>cacheMode</entry>
+                  <entry>replication, invalidation, r, i</entry>
+                  <entry>replication</entry>
+                  <entry>
+                     See the <link linkend="clustering">chapter on clustering</link> for the differences between
+                     replication and invalidation.  When using the bean, synchronous and asynchronous communication is
+                     combined with clustering mode to give you the enumberation <literal>Configuration.CacheMode</literal>.
+                  </entry>
+               </row>
+
+               <row>
+                  <entry><emphasis role="bold">clusterName</emphasis></entry>
+                  <entry>clusterName</entry>
+                  <entry>String</entry>
+                  <entry>JBossCache-cluster</entry>
+                  <entry>
+                     A cluster name which is used to identify the cluster to join.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.sync">
+         <title>The <literal><![CDATA[<sync />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<sync />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        If this element is present, all communications are synchronous, in that whenever a thread sends
+                        a message sent over the wire, it blocks until it receives an acknowledgement from the recipient.
+                        This element is mutually exclusive with the <link linkend="element.async"><literal><![CDATA[<async />]]></literal></link>
+                        element.
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>Configuration.setCacheMode()</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.sync">
+         <title><literal><![CDATA[<sync />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<sync />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">replTimeout</emphasis></entry>
+                  <entry>syncReplTimeout (<emphasis>dynamic</emphasis>)</entry>
+                  <entry>positive integer</entry>
+                  <entry>15000</entry>
+                  <entry>
+                     This is the timeout used to wait for an acknowledgement when making a remote call, after which
+                     an exception is thrown.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+      
+      <table id="element.async">
+         <title>The <literal><![CDATA[<async />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<async />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        If this element is present, all communications are asynchronous, in that whenever a thread sends
+                        a message sent over the wire, it does not wait for an acknowledgement before returning.
+                        This element is mutually exclusive with the <link linkend="element.sync"><literal><![CDATA[<sync />]]></literal></link>
+                        element.
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>Configuration.setCacheMode()</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.async">
+         <title><literal><![CDATA[<async />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<async />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">serializationExecutorPoolSize</emphasis></entry>
+                  <entry>serializationExecutorPoolSize</entry>
+                  <entry>positive integer</entry>
+                  <entry>25</entry>
+                  <entry>
+                     In addition to replication happening asynchronously, even serialization of contents for replication
+                     happens in a separate thread to allow the caller to return as quickly as possible.  This setting
+                     controls the size of the serializer thread pool.  Setting this to any value less than 1 means
+                     serialization does not happen asynchronously.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">useReplQueue</emphasis></entry>
+                  <entry>useReplQueue</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     If true, this forces all async communications to be queued up and sent out periodically as a batch.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">replQueueInterval</emphasis></entry>
+                  <entry>replQueueInterval</entry>
+                  <entry>positive integer</entry>
+                  <entry>5000</entry>
+                  <entry>
+                     If <literal>useReplQueue</literal> is set to true, this attribute controls how often the asynchronous
+                     thread used to flush the replication queue runs.  This should be a positive integer which represents
+                     thread wakeup time in milliseconds.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">replQueueMaxElements</emphasis></entry>
+                  <entry>replQueueMaxElements</entry>
+                  <entry>positive integer</entry>
+                  <entry>1000</entry>
+                  <entry>
+                     If <literal>useReplQueue</literal> is set to true, this attribute can be used to trigger flushing
+                     of the queue when it reaches a specific threshold.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.stateRetrieval">
+         <title>The <literal><![CDATA[<stateRetrieval />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<stateRetrieval />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This tag controls ho state is retrieved from neighboring caches when this cache instance starts.
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>Configuration</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.stateRetrieval">
+         <title><literal><![CDATA[<stateRetrieval />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<stateRetrieval />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">fetchInMemoryState</emphasis></entry>
+                  <entry>fetchInMemoryState</entry>
+                  <entry>true, false</entry>
+                  <entry>true</entry>
+                  <entry>
+                     If true, this will cause the cache to ask neighboring caches for state when it starts up, so the
+                     cache starts "warm".
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">timeout</emphasis></entry>
+                  <entry>stateRetrievalTimeout</entry>
+                  <entry>positive integer</entry>
+                  <entry>10000</entry>
+                  <entry>
+                     This is the maximum amount of time - in milliseconds - to wait for state from neighboring caches,
+                     before throwing an exception and aborting startup.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.buddy">
+         <title>The <literal><![CDATA[<buddy />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<buddy />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        If this tag is present, then state is not replicated across the entire cluster.  Instead, buddy
+                        replication is used to select cache instances to maintain backups on.  See
+                        <link linkend="br">this section on buddy replication</link> for details.  Note that this is only
+                        used if the clustering mode is <literal>replication</literal>, and not if it is <literal>invalidation</literal>. 
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <link linkend="element.dataGravitation"><literal><![CDATA[<dataGravitation />]]></literal></link>,
+                     <link linkend="element.locator"><literal><![CDATA[<locator />]]></literal></link>,
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>BuddyReplicationConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.buddy">
+         <title><literal><![CDATA[<buddy />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<buddy />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">enabled</emphasis></entry>
+                  <entry>enabled</entry>
+                  <entry>true, false</entry>
+                  <entry>false</entry>
+                  <entry>
+                     If true, buddy replication is enabled.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">communicationTimeout</emphasis></entry>
+                  <entry>buddyCommunicationTimeout</entry>
+                  <entry>positive integer</entry>
+                  <entry>10000</entry>
+                  <entry>
+                     This is the maximum amount of time - in milliseconds - to wait for buddy group organization
+                     communications from buddy caches.                      
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">poolName</emphasis></entry>
+                  <entry>buddyPoolName</entry>
+                  <entry>String</entry>
+                  <entry></entry>
+                  <entry>
+                     This is used as a means to identify cache instances and provide hints to the buddy selection
+                     algorithms.  More information on <link linkend="br">the section on buddy replication</link>.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.dataGravitation">
+         <title>The <literal><![CDATA[<dataGravitation />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<dataGravitation />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This tag configures how data gravitation is conducted.  See
+                        <link linkend="br">this section on buddy replication</link> for details.
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.buddy"><literal><![CDATA[<buddy />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>BuddyReplicationConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.dataGravitation">
+         <title><literal><![CDATA[<dataGravitation />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<dataGravitation />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">auto</emphasis></entry>
+                  <entry>autoDataGravitation</entry>
+                  <entry>true, false</entry>
+                  <entry>true</entry>
+                  <entry>
+                     If true, when a get() is performed on a cache and nothing is found, a gravitation from neighboring
+                     caches is attempted.  If this is false, then gravitations can only occur if the
+                     <literal>Option.setForceDataGravitation()</literal> option is provided.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">removeOnFind</emphasis></entry>
+                  <entry>dataGravitationRemoveOnFind</entry>
+                  <entry>true, false</entry>
+                  <entry>true</entry>
+                  <entry>
+                     If true, when gravitation occurs, the instance that requests the gravitation takes ownership of
+                     the state and requests that all other instances remove the gravitated state from memory.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">searchBackupTrees</emphasis></entry>
+                  <entry>dataGravitationSearchBackupTrees</entry>
+                  <entry>true, false</entry>
+                  <entry>true</entry>
+                  <entry>
+                     If true, incoming gravitation requests will cause the cache to search not just its primary
+                     data structure but its backup structure as well.
+                  </entry>
+               </row>
+
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.locator">
+         <title>The <literal><![CDATA[<locator />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<locator />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This tag provides a pluggable mechanism for providing buddy location algorithms.
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.buddy"><literal><![CDATA[<buddy />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <link linkend="element.properties"><literal><![CDATA[<properties />]]></literal></link>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>BuddyLocatorConfig</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.locator">
+         <title><literal><![CDATA[<locator />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<locator />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">class</emphasis></entry>
+                  <entry>className</entry>
+                  <entry>A valid class that is available on the classpath</entry>
+                  <entry>NextMemberBuddyLocator</entry>
+                  <entry>
+                     A <literal>BuddyLocator</literal> implementation to use when selecting buddies from the cluster.
+                     Please refer to <literal>BuddyLocator</literal> javadocs for details.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="element.jgroupsConfig">
+         <title>The <literal><![CDATA[<jgroupsConfig />]]></literal> Element</title>
+         <tgroup cols="2" align="left">
+            <colspec colname="name" />
+            <colspec colname="desc" />
+            <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+            <thead valign="top">
+               <row>
+                  <entry spanname="hspan">The <literal><![CDATA[<jgroupsConfig />]]></literal> Element</entry>
+               </row>
+            </thead>
+            <tbody valign="top">
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Description</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        This tag provides a configuration which is used with JGroups to create a network communication
+                        channel.
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Parent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>
+                        <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+                     </para>
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Children</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     A series of elements representing JGroups protocols (see
+                     <ulink url="http://www.jgroups.org/javagroupsnew/docs/ug.html">JGroups documentation</ulink>).  Note
+                     that there are no child elements if any of the element attributes are used instead.  See section
+                     on attributes.
+                  </entry>
+               </row>
+
+               <row>
+                  <entry>
+                     <para><emphasis role="bold">Bean equivalent</emphasis></para>
+                  </entry>
+
+                  <entry>
+                     <para>Configuration</para>
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
+
+      <table id="attributes.jgroupsConfig">
+         <title><literal><![CDATA[<jgroupsConfig />]]></literal> Attributes</title>
+         <tgroup cols="5" align="left">
+            <colspec colname="c1" />
+            <colspec colname="c2" />
+            <colspec colname="c3" />
+            <colspec colname="c4" />
+            <colspec colname="c5" />
+
+            <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+            <thead valign="top">
+               <row><entry spanname="hspan"><literal><![CDATA[<jgroupsConfig />]]></literal> Attributes</entry></row>
+               <row>
+                  <entry>Attribute</entry>
+                  <entry>Bean Field</entry>
+                  <entry>Allowed</entry>
+                  <entry>Default</entry>
+                  <entry>Description</entry>
+               </row>
+            </thead>
+
+            <tbody valign="top">
+               <row>
+                  <entry><emphasis role="bold">configFile</emphasis></entry>
+                  <entry>clusterConfig</entry>
+                  <entry>A JGroups configuration file on the classpath</entry>
+                  <entry>udp.xml</entry>
+                  <entry>
+                     If this attribute is used, then any JGroups elements representing protocols within this tag are
+                     ignored.  Instead, JGroups settings are read from the file specified.  Note that this cannot be used
+                     with the <literal>multiplexerStack</literal> attribute.
+                  </entry>
+               </row>
+               <row>
+                  <entry><emphasis role="bold">multiplexerStack</emphasis></entry>
+                  <entry>muxStackName</entry>
+                  <entry>A valid multiplexer stack name that exists in the channel factory passed in to the <literal>RuntimeConfig</literal></entry>
+                  <entry></entry>
+                  <entry>
+                     This can only be used with the <literal>RuntimeConfig</literal>, where you pass in a JGroups
+                     <literal>ChannelFactory</literal> instance using <literal>RuntimeConfig.setMuxChannelFactory()</literal>.
+                     If this attribute is used, then any JGroups elements representing protocols within this tag are
+                     ignored.  Instead, the JGroups channel is created using the factory passed in.  Note that this cannot be
+                     used with the <literal>configFile</literal> attribute.
+                  </entry>
+               </row>
+            </tbody>
+         </tgroup>
+      </table>
    </section>
 </chapter>
\ No newline at end of file

Modified: core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -360,7 +360,7 @@
             controls
             the eviction in based on least frequently used algorithm. The least
             frequently used nodes will be the first to evict with this policy. Node
-            usage starts at 1 when a node is first added. Each time it is visted,
+            usage starts at 1 when a node is first added. Each time it is visited,
             the node usage counter increments by 1. This number is used to determine
             which nodes are least frequently used. LFU is also a sorted eviction
             algorithm. The underlying EvictionQueue implementation and algorithm is

Modified: core/trunk/src/main/docbook/userguide/en/modules/introduction.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/introduction.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/introduction.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -56,7 +56,7 @@
             JBoss Cache offers a simple and straightforward API, where data  - simple Java objects - can be placed in the
             cache.  Based on configuration options selected, this data may be one or all of:
             <itemizedlist>
-               <listitem>cached in-memory for efficient, threadsafe retrieval.</listitem>
+               <listitem>cached in-memory for efficient, thread-safe retrieval.</listitem>
                <listitem>replicated to some or all cache instances in a cluster.</listitem>
                <listitem>persisted to disk and/or a remote, in-memory cache cluster ("far-cache").</listitem>
                <listitem>garbage collected from memory when memory runs low, and passivated to disk so state isn't lost.
@@ -77,7 +77,7 @@
          <title>Local and clustered modes</title>
 
          <para>
-            The cache is organised as a tree, with a single root. Each node in the tree essentially contains a map,
+            The cache is organized as a tree, with a single root. Each node in the tree essentially contains a map,
             which acts as a store for key/value pairs. The only requirement placed on objects that are cached is that
             they implement <literal>java.io.Serializable</literal>.
          </para>
@@ -128,16 +128,17 @@
             safety between readers and writers, while maintaining a high degree of concurrency.  The specific MVCC implementation
             used in JBoss Cache allows for reader threads to be completely free of locks and synchronized blocks, ensuring a very high
             degree of performance for read-heavy applications.  It also uses custom, highly performant lock implementations
-            that employ modern compare-and-swap techniques for writer threads, which are tuned to multicore CPU architectures.
+            that employ modern compare-and-swap techniques for writer threads, which are tuned to multi-core CPU architectures.
          </para>
          <para>
+            Multi-versioned concurrency control (MVCC) is the default locking scheme since JBoss Cache 3.x.
             Optimistic and pessimistic locking schemes from older versions of JBoss Cache are still available but are
-            deprecated in favour of MVCC, and will be removed in future releases.  Use of these locking schemes is
-            strongly discouraged.
+            deprecated in favor of MVCC, and will be removed in future releases.  Use of these deprecated locking
+            schemes are strongly discouraged.
          </para>
          <para>
             The JBoss Cache MVCC implementation only supports READ_COMMITTED and REPEATABLE_READ isolation levels, corresponding
-            to their database equivalents.
+            to their database equivalents.  See the section on <link linkend="transactions">transactions and concurrency</link> for details on MVCC.
          </para>
       </section>
    </section>

Modified: core/trunk/src/main/docbook/userguide/en/modules/preface.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/preface.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/preface.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -15,7 +15,7 @@
    <para>
       This book is targeted at developers wishing to use JBoss Cache as either a standalone in-memory cache,
       a distributed or replicated cache, a clustering library, or an in-memory database.  It is targeted at application
-      developers who wish to use JBoss Cache in their codebase, as well as "OEM" developers who wish to build on and
+      developers who wish to use JBoss Cache in their code base, as well as "OEM" developers who wish to build on and
       extend JBoss Cache features. As such, this book is split into two major sections - one detailing the "User" API
       and the other going much deeper into specialist topics and the JBoss Cache architecture.
    </para>

Modified: core/trunk/src/main/docbook/userguide/en/modules/replication.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/replication.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/replication.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -62,7 +62,7 @@
 
             <para>When using transactions, replication only occurs at the
                transaction boundary - i.e., when a transaction commits. This results
-               in minimising replication traffic since a single modification is
+               in minimizing replication traffic since a single modification is
                broadcast rather than a series of individual modifications, and can be
                a lot more efficient than not using transactions. Another effect of
                this is that if a transaction were to roll back, nothing is broadcast
@@ -150,8 +150,8 @@
                in HTTP session replication speak. What this means
                is that if certain data is frequently accessed, it is desirable that
                this is always accessed on one instance rather than in a round-robin
-               fashion as this helps the cache cluster optimise how it chooses
-               buddies, where it stores data, and minimises replication
+               fashion as this helps the cache cluster optimize how it chooses
+               buddies, where it stores data, and minimizes replication
                traffic.
             </para>
 
@@ -210,7 +210,7 @@
                         <emphasis>try</emphasis>
 
                         to select a buddy on a different physical host. If not able to do so though, it will fall back
-                        to colocated instances. This defaults to
+                        to co-located instances. This defaults to
 
                         <literal>true</literal>
 
@@ -371,9 +371,9 @@
          every time data is changed in a cache other caches in the cluster receive
          a message informing them that their data is now stale and should be
          evicted from memory. Invalidation, when used with a shared cache loader
-         (see chapter on <link linkend="cache_loaders">cacahe loaders</link>) would cause remote caches to refer to the
+         (see chapter on <link linkend="cache_loaders">cache loaders</link>) would cause remote caches to refer to the
          shared cache loader to retrieve modified data. The benefit of this is
-         twofold: network traffic is minimised as invalidation messages are very
+         twofold: network traffic is minimized as invalidation messages are very
          small compared to replicating updated data, and also that other caches in
          the cluster look up modified data in a lazy manner, only when
          needed.
@@ -381,7 +381,7 @@
 
       <para>Invalidation messages are sent after each modification (no
          transactions or batches), or at the end of a transaction or batch, upon successful commit.
-         This is usually more efficient as invalidation messages can be optimised
+         This is usually more efficient as invalidation messages can be optimized
          for the transaction as a whole rather than on a per-modification
          basis.
       </para>
@@ -634,10 +634,10 @@
                   correct state. In-memory state can be transferred as well if the
                   desire is to have a "hot" cache -- one that has all relevant data in
                   memory when the cache begins providing service. (Note that the
-                  <literal><![CDATA[<cacheloader><preload>]]></literal>
+                  <literal><![CDATA[<preload>]]></literal>
                   element in the
-                  <literal>CacheLoaderConfig</literal>
-                  configuration parameter can be used as well to
+                  <literal><![CDATA[<loaders>]]></literal>
+                  configuration element can be used as well to
                   provide a "warm" or "hot" cache without requiring an in-memory state
                   transfer. This approach somewhat reduces the burden on the cache
                   instance providing state, but increases the load on the persistent

Modified: core/trunk/src/main/docbook/userguide/en/modules/transactions.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/transactions.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/docbook/userguide/en/modules/transactions.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,297 +1,179 @@
 <chapter id="transactions">
    <title>Transactions and Concurrency</title>
-   <section>
+   <section id="transactions.concurrent">
       <title>Concurrent Access</title>
 
       <para>JBoss Cache is a thread safe caching API, and uses its own efficient mechanisms of controlling concurrent
-         access. It uses a pessimistic locking scheme by default for this purpose. Optimistic locking may alternatively
-         be used, and is discussed later.
+         access. It uses an innovative implementation of multi-versioned concurrency control
+         (<ulink url="http://en.wikipedia.org/wiki/Multiversion_concurrency_control">MVCC</ulink>) as the default
+         locking scheme.  Versions of JBoss Cache prior to 3.x offered Optimistic and Pessimistic Locking schemes,
+         both of which are now deprecated in favor of MVCC.
       </para>
 
-      <section>
-         <title>Locks</title>
-         <para>Locking is done internally, on a node-level. For example when we
-            want to access "/a/b/c", a lock will be acquired for nodes "a", "b" and
-            "c". When the same transaction wants to access "/a/b/c/d", since we
-            already hold locks for "a", "b" and "c", we only need to acquire a lock
-            for "d".
+      <section id="transactions.locks.mvcc">
+         <title>Multi-Version Concurrency Control (MVCC)</title>
+         <para>
+            <ulink url="http://en.wikipedia.org/wiki/Multiversion_concurrency_control">MVCC</ulink> is a locking scheme
+            commonly used by modern database implementations to control fast, safe concurrent access to shared data.
          </para>
-         <para>Lock owners are either transactions (call is made within the scope of an existing transaction)
-            or threads (no transaction associated with the call).
-            Regardless, a transaction or a thread is internally transformed into
-            an instance of
-            <literal>GlobalTransaction</literal>
-            , which is used as a globally unique identifier
-            for modifications across a cluster. E.g. when we run a two-phase commit
-            protocol across the cluster, the
-            <literal>GlobalTransaction</literal>
-            uniquely identifies a unit of work across a cluster.
-         </para>
-
-         <para>Locks can be read or write locks. Write locks serialize read and
-            write access, whereas read-only locks only serialize read access. When a
-            write lock is held, no other write or read locks can be acquired. When a
-            read lock is held, others can acquire read locks. However, to acquire
-            write locks, one has to wait until all read locks have been released. When
-            scheduled concurrently, write locks always have precedence over read
-            locks. Note that (if enabled) read locks can be upgraded to write
-            locks.
-         </para>
-
-         <para>Using read-write locks helps in the following scenario: consider a
-            tree with entries "/a/b/n1" and "/a/b/n2". With write-locks, when Tx1
-            accesses "/a/b/n1", Tx2 cannot access "/a/b/n2" until Tx1 has completed
-            and released its locks. However, with read-write locks this is possible,
-            because Tx1 acquires read-locks for "/a/b" and a read-write lock for
-            "/a/b/n1". Tx2 is then able to acquire read-locks for "/a/b" as well, plus
-            a read-write lock for "/a/b/n2". This allows for more concurrency in
-            accessing the cache.
-         </para>
-      </section>
-
-      <section>
-         <title>Pessimistic locking</title>
-         <para>By default, JBoss Cache uses pessimistic locking. Locking is not exposed directly to user. Instead, a
-            transaction isolation level which provides different locking behaviour is configurable.
-         </para>
-         <section>
-            <title>Isolation levels</title>
-            <para>JBoss Cache supports the following transaction isolation levels, analogous to database ACID isolation
-               levels. A user can configure an instance-wide isolation level of NONE, READ_UNCOMMITTED, READ_COMMITTED,
-               REPEATABLE_READ, or SERIALIZABLE. REPEATABLE_READ is the default isolation level used.
-            </para>
-
-            <orderedlist>
-               <listitem>
-                  <para>NONE. No transaction support is needed. There is no locking at
-                     this level, e.g., users will have to manage the data integrity.
-                     Implementations use no locks.
-                  </para>
-               </listitem>
-
-               <listitem>
-                  <para>READ_UNCOMMITTED. Data can be read anytime while write
-                     operations are exclusive. Note that this level doesn't prevent the
-                     so-called "dirty read" where data modified in Tx1 can be read in Tx2
-                     before Tx1 commits. In other words, if you have the following
-                     sequence,
-                  </para>
-                  <programlisting><![CDATA[
-   Tx1     Tx2
-    W
-            R
-]]></programlisting>
-                  <para>
-                     using this isolation level will not prevent Tx2 read operation.
-                     Implementations typically use an exclusive lock for writes while reads
-                     don't need to acquire a lock.
-                  </para>
-               </listitem>
-
-               <listitem>
-                  <para>READ_COMMITTED. Data can be read any time as long as there is no
-                     write. This level prevents the dirty read. But it doesn’t prevent the
-                     so-called ‘non-repeatable read’ where one thread reads the data twice
-                     can produce different results. For example, if you have the following
-                     sequence,
-                  </para>
-                  <programlisting><![CDATA[
-   Tx1     Tx2
-    R
-            W
-    R
-]]></programlisting>
-
-                  <para>where the second read in Tx1 thread will produce different
-                     result.
-                  </para>
-
-                  <para>Implementations usually use a read-write lock; reads succeed
-                     acquiring the lock when there are only reads, writes have to wait
-                     until there are no more readers holding the lock, and readers are
-                     blocked acquiring the lock until there are no more writers holding the
-                     lock. Reads typically release the read-lock when done, so that a
-                     subsequent read to the same data has to re-acquire a read-lock; this
-                     leads to nonrepeatable reads, where 2 reads of the same data might
-                     return different values. Note that, the write only applies regardless
-                     of transaction state (whether it has been committed or not).
-                  </para>
-               </listitem>
-
-               <listitem>
-                  <para>REPEATABLE_READ. Data can be read while there is no write and
-                     vice versa. This level prevents "non-repeatable read" but it does not
-                     completely prevent the so-called "phantom read" where new data can be
-                     inserted into the tree from another transaction. Implementations
-                     typically use a read-write lock. This is the default isolation level used.
-                  </para>
-               </listitem>
-
-               <listitem>
-                  <para>SERIALIZABLE. Data access is synchronized with exclusive locks.
-                     Only 1 writer or reader can have the lock at any given time. Locks are
-                     released at the end of the transaction. Regarded as very poor for performance and
-                     thread/transaction concurrency.
-                  </para>
-               </listitem>
-            </orderedlist>
-
-         </section>
-
-         <section>
-            <title>Insertion and Removal of Nodes</title>
-
+         <section id="mvcc.concepts">
+            <title>MVCC Concepts</title>
             <para>
-               By default, before inserting a new node into the tree or removing an existing node from the
-               tree, JBoss Cache will only attempt to acquire a read lock on the new node's parent node.
-               This approach does not treat child nodes as an integral part of a parent node's state.
-               This approach allows greater concurrency if nodes are frequently added or removed, but
-               at a cost of lesser correctness. For use cases where greater correctness is necessary, JBoss
-               Cache provides a configuration option
-               <literal>LockParentForChildInsertRemove</literal>
-               .
-               If this is set to
-               <literal>true</literal>
-               , insertions and removals of child nodes
-               require the acquisition of a
-               <emphasis>write lock</emphasis>
-               on the parent node.
+               MVCC is designed to provide the following features for concurrent access:
+               <itemizedlist>
+                  <listitem>Readers that don't block writers</listitem>
+                  <listitem>Writers that fail fast</listitem>
+               </itemizedlist>
+               and achieves this by using data versioning and copying for concurrent writers.  The theory is that readers
+               continue reading shared state, while writers copy the shared state, increment a version id, and write that
+               shared state back after verifying that the version is still valid (i.e., another concurrent writer has not
+               changed this state first).
             </para>
             <para>
-               In addition to the above, in version 2.1.0 and above, JBoss Cache offers the ability to override this
-               configuration on a per-node basis. See
-               <literal>Node.setLockForChildInsertRemove()</literal>
-               and its
-               corresponding javadocs for details.
+               This allows readers to continue reading while not preventing writers from writing, and repeatable read
+               semantics are maintained by allowing readers to read off the old version of the state.
             </para>
          </section>
-      </section>
-
-      <section>
-         <title>Optimistic Locking</title>
-         <para>The motivation for optimistic locking is to improve concurrency. When a lot of threads have a lot of
-            contention for access to the data tree, it can be inefficient to lock portions of the tree - for reading or
-            writing - for the entire duration of a transaction as we do in pessimistic locking. Optimistic locking
-            allows for greater concurrency of threads and transactions by using a technique called data versioning,
-            explained here. Note that isolation levels (if configured) are ignored if optimistic locking is enabled.
-         </para>
-         <section>
-            <title>Architecture</title>
-            <para>Optimistic locking treats all method calls as transactional
-               <footnote>
-                  <para>Because of this requirement, you must always have a transaction manager configured when using
-                     optimistic locking.
-                  </para>
-               </footnote>
-               . Even if you do not invoke a call within the scope of an ongoing transaction, JBoss Cache creates an
-               <emphasis>implicit transaction</emphasis>
-               and commits this transaction when the invocation completes. Each transaction
-               maintains a transaction workspace, which contains a copy of the data used within the transaction.
+         <section id="mvcc.impl">
+            <title>MVCC Implementation</title>
+            <para>
+               JBoss Cache's implementation of MVCC is based on a few features:
+               <itemizedlist>
+                  <listitem>Readers don't acquire any locks</listitem>
+                  <listitem>Only one additional version is maintained for shared state, for a single writer</listitem>
+                  <listitem>All writes happen sequentially, to provide fail-fast semantics</listitem>
+               </itemizedlist>
+               The extremely high performance of JBoss Cache's MVCC implementation for reading threads is achieved by
+               not requiring any synchronization or locking for readers.  For each reader thread, the
+               <literal>MVCCLockingInterceptor</literal> wraps state in a lightweight container object, which is placed
+               in the thread's <literal>InvocationContext</literal> (or <literal>TransactionContext</literal> if running
+               in a transaction).  All subsequent operations on the state happens via the container object.  This use of
+               Java references allows for repeatable read semantics even if the actual state changes simultaneously.
             </para>
-            <para>For example, if a transaction calls
-               <literal>cache.getRoot().getChild( Fqn.fromString("/a/b/c") )</literal>
-               ,
-               nodes a, b and c are copied from the main data tree
-               and into the workspace. The data is versioned and all calls in the transaction work on the copy of the
-               data rather than the actual data. When the transaction commits, its workspace is merged back into the
-               underlying tree by matching versions. If there is a version mismatch - such as when the actual data tree
-               has a higher version than the workspace, perhaps if another transaction were to access the same data,
-               change it and commit before the first transaction can finish - the transaction throws a
-               <literal>RollbackException</literal>
-               when committing and the commit fails.
+            <para>
+               Writer threads, on the other hand, need to acquire a lock before any writing can commence.  Currently,
+               we use lock striping to improve the memory performance of the cache, and the size of the shared lock pool
+               can be tuned using the <literal>concurrencyLevel</literal> attribute of the <literal>locking</literal>
+               element.  See the <link linkend="configuration_reference_chapter">configuration reference</link>
+               for details.  After acquiring an exclusive lock on an Fqn, the writer thread then wraps the state to be
+               modified in a container as well, just like with reader threads, and then copies this state for writing.
+               When copying, a reference to the original version is still maintained in the container (for rollbacks).
+               Changes are then made to the copy and the copy is finally written to the data structure when the write
+               completes.
             </para>
-            <para>Optimistic locking uses the same locks we speak of above, but the locks are only held for a very short
-               duration - at the start of a transaction to build a workspace, and when the transaction commits and has
-               to merge data back into the tree.
-            </para>
             <para>
-               So while optimistic locking may occasionally fail if version validations fail or may run slightly slower
-               than pessimistic locking due to the inevitable overhead and extra processing of maintaining workspaces,
-               versioned data and validating on commit, it does buy you a near-SERIALIZABLE degree of data integrity
-               while maintaining a very high level of concurrency.
+               This way, subsequent readers see the new version while existing readers still hold a reference to the
+               original version in their context.
             </para>
-         </section>
-         <section>
-            <title>Data Versioning</title>
-            <mediaobject>
-               <imageobject>
-                  <imagedata fileref="DataVersions.png" format="PNG"/>
-               </imageobject>
-            </mediaobject>
             <para>
-               Optimistic locking makes use of the
-               <literal>DataVersion</literal>
-               interface (and an internal and default
-               <literal>DefaultDataVersion</literal>
-               implementation to keep a track of node versioning. In certain cases,
-               where cached data is an in-memory representation of data from an external source such as a database,
-               it makes sense to align the versions used in JBoss Cache with the versions used externally. As such,
-               using the
-               <link linkend="configuration.options">options API</link>
-               , it is possible to set the
-               <literal>DataVersion</literal>
-               you wish to use on a per-invocation basis, allowing you to implement the
-               <literal>DataVersion</literal>
-               interface to hold the versioning information obtained externally before putting your data into the
-               cache.
+               If a writer is unable to acquire the write lock after some time, a <literal>TimeoutException</literal> is
+               thrown.  This lock acquisition timeout defaults to 10000 millis and can be configured using the
+               <literal>lockAcquisitionTimeout</literal> attribute of the <literal>locking</literal> element.  See the 
+               <link linkend="configuration_reference_chapter">configuration reference</link> for details.
             </para>
+            <section id="mvcc.iso">
+               <title>Isolation Levels</title>
+               <para>
+                  JBoss Cache 3.x supports two isolation levels: REPEATABLE_READ and READ_COMMITTED, which correspond
+                  in semantic to <ulink url="http://en.wikipedia.org/wiki/Isolation_level">database-style isolation levels</ulink>.
+                  Previous versions of JBoss Cache supported all 5 database isolation levels, and if an unsupported
+                  isolation level is configured, it is either upgraded or downgraded to the closest supported level.
+               </para>
+               <para>
+                  REPEATABLE_READ is the default isolation level, to maintain compatibility with previous versions of
+                  JBoss Cache.  READ_COMMITTED, while providing a slightly weaker isolation, has a significant
+                  performance benefit over REPEATABLE_READ.
+               </para>
+            </section>
+            <section id="mvcc.writeskew">
+               <title>Concurrent Writers and Write-Skews</title>
+               <para>
+                  Although MVCC forces writers to obtain a write lock, a phenomenon known as write skews may occur when
+                  using REPEATABLE_READ:
+               </para>
+               <mediaobject>
+                  <imageobject>
+                     <imagedata fileref="writeskew.png" format="PNG"/>
+                  </imageobject>
+               </mediaobject>
+               <para>
+                  This happens when concurrent transactions performing a read and then a write, based on the value that
+                  was read.  Since reads involve holding on to the reference to the state in the
+                  transaction context, a subsequent write would work off that original state read, which may now be stale.
+               </para>
+               <para>
+                  The default behavior with dealing with a write skew is to throw a <literal>DataVersioningException</literal>,
+                  when it is detected when copying state for writing. However, in most applications, a write skew may not
+                  be an issue (for example, if the state written has no relationship to the state originally read) and
+                  should be allowed.  If your application does not care about write skews, you can allow them to happen
+                  by setting the <literal>writeSkewCheck</literal> configuration attribute to <literal>false</literal>.
+                  See the <link linkend="configuration_reference_chapter">configuration reference</link> for details.
+               </para>
+               <para>
+                  Note that write skews cannot happen when using READ_COMMITTED since threads always work off committed
+                  state.
+               </para>
+            </section>
          </section>
-         <section>
-            <title>Configuration</title>
+         <section id="mvcc.cfg">
+            <title>Configuring Locking</title>
             <para>
-               Optimistic locking is enabled by using the NodeLockingScheme XML attribute, and setting it to
-               "OPTIMISTIC":
+               Configuring MVCC involves using the <literal><![CDATA[<locking /> ]]></literal> configuration tag, as follows:
             </para>
-            <programlisting role="XML"><![CDATA[
-...
-   <!--
-   Node locking scheme:
-   OPTIMISTIC
-   PESSIMISTIC (default)
-   -->
-   <attribute name="NodeLockingScheme">OPTIMISTIC</attribute>
-...
-   ]]></programlisting>
+               <programlisting role="XML"><![CDATA[
+   <locking
+      isolationLevel="REPEATABLE_READ"
+      lockAcquisitionTimeout="10234"
+      nodeLockingScheme="mvcc"
+      writeSkewCheck="false"
+      concurrencyLevel="1000" />                  
+               ]]></programlisting>
+
             <para>
-               It is generally advisable that if you have an eviction policy defined along with optimistic locking, you
-               define
-               the eviction policy's
-               <literal>minTimeToLiveSeconds</literal>
-               parameter to be slightly greater than the transaction
-               timeout value set in your transaction manager. This ensures that data versions in the cache are not
-               evicted
-               while transactions are in progress
-               <footnote>
-                  <para>See
-                     <ulink url="http://jira.jboss.com/jira/browse/JBCACHE-1155">JBCACHE-1155</ulink>
-                  </para>
-               </footnote>
-               .
+               <itemizedlist>
+                  <listitem><literal>nodeLockingScheme</literal> - the node locking scheme used.  Defaults to MVCC if
+                     not provided, deprecated schemes such as <literal>pessimistic</literal> or <literal>optimistic</literal>
+                     may be used but is not encouraged.</listitem>
+                  <listitem><literal>isolationLevel</literal> - transaction isolation level.  Defaults to REPEATABLE_READ if not provided.</listitem>
+                  <listitem><literal>writeSkewCheck</literal> - defaults to <literal>true</literal> if not provided.</listitem>
+                  <listitem><literal>concurrencyLevel</literal> - defaults to 500 if not provided.</listitem>
+                  <listitem><literal>lockAcquisitionTimeout</literal> - only applies to writers when using MVCC.  Defaults to 10000 if not provided.</listitem>
+               </itemizedlist>
             </para>
          </section>
       </section>
+
+      <section id="transactions.locks.dep">
+         <title>Pessimistic and Optimistic Locking Schemes</title>
+         <para>
+            From JBoss Cache 3.x onwards, pessimistic and optimistic locking schemes are deprecated in favor of
+            <link linkend="transactions.locks.mvcc">MVCC</link>.  It is recommended that existing applications
+            move off these legacy locking schemes as support for them will eventually be dropped altogether in future
+            releases.
+         </para>
+         <para>
+            Documentation for legacy locking schemes are not included in this user guide, and if necessary, can be
+            referenced in previous versions of this document, which can be found on
+            <ulink url="http://www.jboss.org/jbosscache">the JBoss Cache website</ulink>.
+         </para>
+      </section>
    </section>
 
 
-   <section>
-      <title>Transactional Support</title>
+   <section id="transactions.jta">
+      <title>JTA Support</title>
 
-      <para>JBoss Cache can be configured to use and participate in JTA compliant transactions. Alternatively, if
-         transaction support is disabled, it is equivalent to setting AutoCommit to
-         on where modifications are potentially
-         <footnote>
-            <para>Depending on whether interval-based asynchronous replication is used</para>
-         </footnote>
-         replicated after every change (if replication is
-         enabled).
+      <para>JBoss Cache can be configured to use and participate in
+         <ulink url="http://java.sun.com/javaee/technologies/jta/">JTA</ulink> compliant transactions. Alternatively, if
+         transaction support is disabled, it is equivalent to using autocommit in JDBC calls, where
+         modifications are potentially replicated after every change (if replication is enabled).
       </para>
 
       <para>What JBoss Cache does on every incoming call is:</para>
       <orderedlist>
          <listitem>
             <para>Retrieve the current
-               <literal>javax.transaction.Transaction</literal>
-               associated with the thread
+               <literal>javax.transaction.Transaction</literal> associated with the thread
             </para>
          </listitem>
          <listitem>
@@ -303,18 +185,12 @@
          </listitem>
       </orderedlist>
       <para>
-         In order to do this, the cache has to be provided with a
-         reference to environment's
-         <literal>javax.transaction.TransactionManager</literal>
-         . This is usually done by configuring the cache
-         with the class name of an implementation of the
-         <literal>TransactionManagerLookup</literal>
-         interface. When the cache starts, it will create an instance of this
-         class and invoke its
-         <literal>getTransactionManager()</literal>
-         method, which returns a reference to the
-         <literal>TransactionManager</literal>
-         .
+         In order to do this, the cache has to be provided with a reference to environment's
+         <literal>javax.transaction.TransactionManager</literal>. This is usually done by configuring the cache
+         with the class name of an implementation of the <literal>TransactionManagerLookup</literal>
+         interface. When the cache starts, it will create an instance of this class and invoke its
+         <literal>getTransactionManager()</literal> method, which returns a reference to the
+         <literal>TransactionManager</literal>.
       </para>
 
       <mediaobject>
@@ -324,32 +200,19 @@
       </mediaobject>
 
       <para>JBoss Cache ships with
-         <literal>JBossTransactionManagerLookup</literal>
-         and
-         <literal>GenericTransactionManagerLookup</literal>
-         . The
-         <literal>JBossTransactionManagerLookup</literal>
-         is able to bind to a running JBoss AS instance and retrieve a
-         <literal>TransactionManager</literal>
-         while the
-         <literal>GenericTransactionManagerLookup</literal>
+         <literal>JBossTransactionManagerLookup</literal> and <literal>GenericTransactionManagerLookup</literal>. The
+         <literal>JBossTransactionManagerLookup</literal> is able to bind to a running JBoss AS instance and retrieve a
+         <literal>TransactionManager</literal> while the <literal>GenericTransactionManagerLookup</literal>
          is able to bind to most popular Java EE application servers and provide the same functionality. A dummy
-         implementation -
-         <literal>DummyTransactionManagerLookup</literal>
-         - is also provided, primarily for unit tests. Being a dummy, this is just for demo and testing purposes and is
-         not recommended for production use.
+         implementation - <literal>DummyTransactionManagerLookup</literal> - is also provided for unit tests. Being a
+         dummy, this is not recommended for production use a it has some severe limitations to do with concurrent
+         transactions and recovery.
       </para>
 
       <para>
-         An alternative to configuring a
-         <literal>TransactionManagerLookup</literal>
-         is to programatically inject a reference to the
-         <literal>TransactionManager</literal>
-         into the
-         <literal>Configuration</literal>
-         object's
-         <literal>RuntimeConfig</literal>
-         element:
+         An alternative to configuring a <literal>TransactionManagerLookup</literal> is to programatically inject a
+         reference to the <literal>TransactionManager</literal> into the <literal>Configuration</literal> object's
+         <literal>RuntimeConfig</literal> element:
       </para>
 
       <programlisting role="JAVA"><![CDATA[
@@ -358,19 +221,13 @@
       ]]></programlisting>
 
       <para>
-         Injecting the
-         <literal>TransactionManager</literal>
-         is the recommended
-         approach when the
-         <literal>Configuration</literal>
-         is built by some sort of
-         IOC container that already has a reference to the TM.
+         Injecting the <literal>TransactionManager</literal> is the recommended approach when the
+         <literal>Configuration</literal> is built by some sort of IOC container that already has a reference to the
+         <literal>TransactionManager</literal>.
       </para>
 
       <para>When the transaction commits, we initiate either a one- two-phase commit
-         protocol. See
-         <link linkend="replication.tx">replicated caches and transactions</link>
-         for details.
+         protocol. See <link linkend="replication.tx">replicated caches and transactions</link> for details.
       </para>
 
    </section>

Modified: core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -65,6 +65,7 @@
 import org.jgroups.util.RspList;
 
 import javax.transaction.TransactionManager;
+import java.net.URL;
 import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -276,8 +277,14 @@
          {
             try
             {
-               if (configuration.getClusterConfig() == null)
+               if (configuration.getJGroupsConfigFile() != null)
                {
+                  URL u = configuration.getJGroupsConfigFile();
+                  if (log.isTraceEnabled()) log.trace("Grabbing cluster properties from " + u);
+                  channel = new JChannel(u);
+               }
+               else if (configuration.getClusterConfig() == null)
+               {
                   log.debug("setting cluster properties to default value");
                   channel = new JChannel(configuration.getDefaultClusterConfig());
                }

Modified: core/trunk/src/main/java/org/jboss/cache/config/Configuration.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/config/Configuration.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/config/Configuration.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -49,6 +49,7 @@
 
    private transient JGroupsStackParser jGroupsStackParser = new JGroupsStackParser();
    private boolean invocationBatchingEnabled;
+   private URL jgroupsConfigFile;
 
    /**
     * Behavior of the JVM shutdown hook registered by the cache
@@ -209,6 +210,7 @@
    private boolean syncRollbackPhase = false;
    private BuddyReplicationConfig buddyReplicationConfig;
 
+   @Deprecated
    private NodeLockingScheme nodeLockingScheme = NodeLockingScheme.MVCC;
    private String muxStackName = null;
    private boolean usingMultiplexer = false;
@@ -464,6 +466,11 @@
       this.buddyReplicationConfig = config;
    }
 
+   /**
+    * @deprecated will default to MVCC once optimistic and pessimistic schemes are removed.
+    * @param nodeLockingScheme
+    */
+   @Deprecated
    public void setNodeLockingScheme(NodeLockingScheme nodeLockingScheme)
    {
       testImmutability("nodeLockingScheme");
@@ -807,6 +814,11 @@
       return buddyReplicationConfig;
    }
 
+   /**
+    * @deprecated will be removed once optimistic and pessimistic locking is removed.
+    * @return node locking scheme in use
+    */
+   @Deprecated
    public NodeLockingScheme getNodeLockingScheme()
    {
       return nodeLockingScheme;
@@ -891,6 +903,16 @@
       return url;
    }
 
+   public URL getJGroupsConfigFile()
+   {
+      return jgroupsConfigFile;
+   }
+
+   public void setJgroupsConfigFile(URL jgroupsConfigFile)
+   {
+      this.jgroupsConfigFile = jgroupsConfigFile;
+   }
+
    /**
     * @return the serialization executor pool size.
     */
@@ -954,6 +976,7 @@
          return false;
       if (listenerAsyncPoolSize != that.listenerAsyncPoolSize) return false;
       if (serializationExecutorPoolSize != that.serializationExecutorPoolSize) return false;
+      if (jgroupsConfigFile != that.jgroupsConfigFile) return false;
 
       return true;
    }
@@ -995,6 +1018,7 @@
       result = 31 * result + objectInputStreamPoolSize;
       result = 31 * result + objectOutputStreamPoolSize;
       result = 31 * result + serializationExecutorPoolSize;
+      result = 31 * result + (jgroupsConfigFile != null ? jgroupsConfigFile.hashCode() : 0);
       return result;
    }
 

Modified: core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigHelper.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigHelper.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigHelper.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -596,6 +596,32 @@
       return new ParsedAttributes(stringAttribs, xmlAttribs);
    }
 
+   public static Properties extractProperties(Element source)
+   {
+      Properties p = new Properties();
+      NodeList list = source.getElementsByTagName("property");
+
+      // loop through attributes
+      for (int loop = 0; loop < list.getLength(); loop++)
+      {
+         Node node = list.item(loop);
+         if (node.getNodeType() != Node.ELEMENT_NODE) continue;
+
+         // for each element (attribute) ...
+         Element element = (Element) node;
+         String name = element.getAttribute(NAME);
+         String valueStr = element.getAttribute("value");
+
+         if (valueStr.length() > 0)
+         {
+            valueStr = valueStr.trim();
+            valueStr = StringPropertyReplacer.replaceProperties(valueStr);
+            p.put(name, valueStr);
+         }
+      }
+      return p;
+   }
+
    public static String toString(Element e)
    {
       try

Modified: core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -26,6 +26,7 @@
 import org.jboss.cache.config.BuddyReplicationConfig;
 import org.jboss.cache.config.CacheLoaderConfig;
 import org.jboss.cache.config.Configuration;
+import org.jboss.cache.config.Configuration.CacheMode;
 import org.jboss.cache.config.ConfigurationException;
 import org.jboss.cache.config.CustomInterceptorConfig;
 import org.jboss.cache.config.parsing.element.BuddyElementParser;
@@ -39,6 +40,7 @@
 import org.xml.sax.ErrorHandler;
 
 import java.io.InputStream;
+import java.net.URL;
 import java.util.List;
 
 /**
@@ -154,12 +156,10 @@
       {
          configureLocking(getSingleElement("locking"));
          configureTransaction(getSingleElement("transaction"));
-         configureReplication(getSingleElement("replication"));
+         configureClustering(getSingleElement("clustering"));
          configureSerialization(getSingleElement("serialization"));
          configureInvalidation(getSingleElement("invalidation"));
          configureStartup(getSingleElement("startup"));
-         configureStateRetrieval(getSingleElement("stateRetrieval"));
-         configureTransport(getSingleElement("transport"));
          configureShutdown(getSingleElement("shutdown"));
          configureJmxStatistics(getSingleElement("jmxStatistics"));
          configureEviction(getSingleElement("eviction"));
@@ -175,6 +175,38 @@
       return config;
    }
 
+   private void configureClustering(Element e)
+   {
+      if (e == null) return; //we might not have this configured
+      // there are 2 attribs - mode and clusterName
+      boolean repl = true;
+      String mode = getAttributeValue(e, "mode").toUpperCase();
+      if (mode.startsWith("R"))
+         repl = true;
+      else if (mode.startsWith("I"))
+         repl = false;
+
+      Element asyncEl = getSingleElementInCoreNS("async", e);
+      Element syncEl = getSingleElementInCoreNS("sync", e);
+      if (syncEl != null && asyncEl != null) throw new ConfigurationException("Cannot have sync and async elements within the same cluster element!");
+      boolean sync = asyncEl == null; // even if both are null, we default to sync
+      if (sync)
+      {
+         config.setCacheMode(repl ? CacheMode.REPL_SYNC : CacheMode.INVALIDATION_SYNC);
+         configureSyncMode(syncEl);
+      }
+      else
+      {
+         config.setCacheMode(repl ? CacheMode.REPL_ASYNC : CacheMode.INVALIDATION_ASYNC);
+         configureAsyncMode(asyncEl);
+      }
+      String cn = getAttributeValue(e, "clusterName");
+      if (existsAttribute(cn)) config.setClusterName(cn);
+      configureBuddyReplication(getSingleElementInCoreNS("buddy", e));
+      configureStateRetrieval(getSingleElementInCoreNS("stateRetrieval", e));
+      configureTransport(getSingleElementInCoreNS("jgroupsConfig", e));
+   }
+
    private void configureStateRetrieval(Element element)
    {
       if (element == null) return; //we might not have this configured
@@ -289,18 +321,30 @@
    private void configureTransport(Element element)
    {
       if (element == null) return; //transport might be missing
-      String clusterName = getAttributeValue(element, "clusterName");
-      if (existsAttribute(clusterName)) config.setClusterName(clusterName);
-      String multiplexerStack = getAttributeValue(element, "multiplexerStack");
-      if (existsAttribute(multiplexerStack)) config.setMultiplexerStack(multiplexerStack);
-      Element clusterConfig = getSingleElementInCoreNS("jgroupsConfig", element);
-      if (clusterConfig != null)
+
+      // first see if a configFile is provided
+      String cfgFile = getAttributeValue(element, "configFile");
+      if (existsAttribute(cfgFile))
       {
-         JGroupsStackParser stackParser = new JGroupsStackParser();
-         String clusterConfigStr = stackParser.parseClusterConfigXml(clusterConfig);
-         if (clusterConfigStr != null && clusterConfigStr.trim().length() > 0)
-            config.setClusterConfig(clusterConfigStr);
+         // try and load this file
+         URL u = new FileLookup().lookupFileLocation(cfgFile);
+         config.setJgroupsConfigFile(u);
       }
+      else
+      {
+         String multiplexerStack = getAttributeValue(element, "multiplexerStack");
+         if (existsAttribute(multiplexerStack))
+         {
+            config.setMultiplexerStack(multiplexerStack);
+         }
+         else
+         {
+            JGroupsStackParser stackParser = new JGroupsStackParser();
+            String clusterConfigStr = stackParser.parseClusterConfigXml(element);
+            if (clusterConfigStr != null && clusterConfigStr.trim().length() > 0)
+               config.setClusterConfig(clusterConfigStr);
+         }
+      }
    }
 
    private void configureStartup(Element element)
@@ -327,24 +371,6 @@
       }
    }
 
-   private void configureReplication(Element element)
-   {
-      if (element == null) return; //might be we do not have a replication enabled
-      Element async = getSingleElement("async");
-      if (async != null)
-      {
-         config.setCacheMode(Configuration.CacheMode.REPL_ASYNC);
-         configureAsyncMode(getSingleElementInCoreNS("async", element));
-      }
-      Element sync = getSingleElement("sync");
-      if (sync != null)
-      {
-         config.setCacheMode(Configuration.CacheMode.REPL_SYNC);
-         configureSyncMode(getSingleElementInCoreNS("sync", element));
-      }
-      configureBuddyReplication(getSingleElementInCoreNS("buddy", element));
-   }
-
    private void configureSyncMode(Element element)
    {
       String replTimeout = getAttributeValue(element, "replTimeout");

Modified: core/trunk/src/main/java/org/jboss/cache/config/parsing/element/CustomInterceptorsElementParser.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/config/parsing/element/CustomInterceptorsElementParser.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/config/parsing/element/CustomInterceptorsElementParser.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,29 +1,28 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
 package org.jboss.cache.config.parsing.element;
 
 import org.jboss.cache.config.ConfigurationException;
 import org.jboss.cache.config.CustomInterceptorConfig;
-import org.jboss.cache.config.parsing.ParsedAttributes;
 import org.jboss.cache.config.parsing.XmlConfigHelper;
 import org.jboss.cache.config.parsing.XmlParserBase;
 import org.jboss.cache.interceptors.base.CommandInterceptor;
@@ -33,6 +32,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
 
 /**
  * Utility class for parsing 'buddy' element in the .xml configuration file.
@@ -106,8 +106,8 @@
       {
          throw new ConfigurationException("CommandInterceptor class is not properly loaded in classloader", e);
       }
-      ParsedAttributes attributes = XmlConfigHelper.extractAttributes(element);
-      XmlConfigHelper.setValues(result, attributes.stringAttribs, false, true);
+      Properties p = XmlConfigHelper.extractProperties(element);
+      XmlConfigHelper.setValues(result, p, false, true);
       return result;
    }
 }

Modified: core/trunk/src/main/java/org/jboss/cache/config/parsing/element/EvictionElementParser.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/config/parsing/element/EvictionElementParser.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/config/parsing/element/EvictionElementParser.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,24 +1,24 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
 package org.jboss.cache.config.parsing.element;
 
 import org.jboss.cache.config.ConfigurationException;
@@ -26,7 +26,6 @@
 import org.jboss.cache.config.EvictionConfig;
 import org.jboss.cache.config.EvictionRegionConfig;
 import org.jboss.cache.config.MissingPolicyException;
-import org.jboss.cache.config.parsing.ParsedAttributes;
 import org.jboss.cache.config.parsing.XmlConfigHelper;
 import org.jboss.cache.config.parsing.XmlParserBase;
 import org.jboss.cache.eviction.EvictionAlgorithm;
@@ -36,6 +35,7 @@
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Properties;
 
 /**
  * Knows how to parse the <b>eviction</b> xml element.
@@ -185,8 +185,7 @@
    public static void parseEvictionPolicyConfig(Element element, EvictionAlgorithmConfig target)
    {
       target.reset();
-      ParsedAttributes attributes = XmlConfigHelper.extractAttributes(element);
-      XmlConfigHelper.setValues(target, attributes.stringAttribs, false, true);
-      XmlConfigHelper.setValues(target, attributes.xmlAttribs, true, true);
+      Properties p = XmlConfigHelper.extractProperties(element);
+      XmlConfigHelper.setValues(target, p, false, true);
    }
 }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/base/CommandInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/base/CommandInterceptor.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/base/CommandInterceptor.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -54,8 +54,6 @@
  */
 public class CommandInterceptor extends AbstractVisitor
 {
-
-
    private CommandInterceptor next;
 
    protected Log log;

Modified: core/trunk/src/main/java/org/jboss/cache/util/FileLookup.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/util/FileLookup.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/java/org/jboss/cache/util/FileLookup.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -24,9 +24,12 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
 
 /**
  * Holds the logic of looking up a file, in the following sequence:
@@ -79,4 +82,28 @@
       }
       return is;
    }
+
+   public URL lookupFileLocation(String filename)
+   {
+      ClassLoader cl = Thread.currentThread().getContextClassLoader();
+      URL u = cl == null ? null : cl.getResource(filename);
+      if (u == null)
+      {
+         // check system class loader
+         u = getClass().getClassLoader().getResource(filename);
+      }
+      if (u == null)
+      {
+         File f = new File(filename);
+         if (f.exists()) try
+         {
+            u = f.toURL();
+         }
+         catch (MalformedURLException e)
+         {
+            // what do we do here?
+         }
+      }
+      return u;
+   }
 }

Added: core/trunk/src/main/resources/config-samples/all.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/all.xml	                        (rev 0)
+++ core/trunk/src/main/resources/config-samples/all.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
+
+
+   <!--
+      isolation levels supported: READ_COMMITTED and REPEATABLE_READ
+      nodeLockingSchemes: mvcc, pessimistic (deprecated), optimistic (deprecated)
+   -->
+   <locking
+         isolationLevel="REPEATABLE_READ"
+         lockParentForChildInsertRemove="false"
+         lockAcquisitionTimeout="20000"
+         nodeLockingScheme="mvcc"
+         writeSkewCheck="false"
+         concurrencyLevel="500"/>
+
+   <!--
+      Used to register a transaction manager and participate in ongoing transactions.
+      -->
+   <transaction
+         transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"
+         syncRollbackPhase="false"
+         syncCommitPhase="false"/>
+
+   <!--
+      Used to register JMX statistics in any available MBean server
+      -->
+   <jmxStatistics
+         enabled="false"/>
+
+   <!--
+      If region based marshalling is used, defines whether new regions are inactive on startup.
+   -->
+   <startup
+         regionsInactiveOnStartup="true"/>
+
+   <!--
+      Used to register JVM shutdown hooks.
+      hookBehavior: DEFAULT, REGISTER, DONT_REGISTER
+   -->
+   <shutdown
+         hookBehavior="DEFAULT"/>
+
+   <!--
+      Used to define async listener notification thread pool size
+   -->
+   <listeners
+         asyncPoolSize="1"/>
+
+   <!--
+      Used to enable invocation batching and allow the use of Cache.startBatch()/endBatch() methods.
+   -->
+   <invocationBatching
+         enabled="false"/>
+
+   <!--
+      serialization related configuration, used for replication and cache loading
+   -->
+   <serialization
+         objectInputStreamPoolSize="12"
+         objectOutputStreamPoolSize="14"
+         version="3.0.0"
+         marshallerClass="org.jboss.cache.marshall.VersionAwareMarshaller"
+         useLazyDeserialization="false"
+         useRegionBasedMarshalling="false"/>
+
+   <!--
+      This element specifies that the cache is clustered.
+      modes supported: replication (r) or invalidation (i).
+   -->
+   <clustering mode="replication" clusterName="JBossCache-cluster">
+
+      <!--
+         Defines whether to retrieve state on startup
+      -->
+      <stateRetrieval timeout="20000" fetchInMemoryState="false"/>
+
+      <!--
+         Network calls are synchronous.
+      -->
+      <sync replTimeout="20000"/>
+      <!--
+         Uncomment this for async replication.
+      -->
+      <!-- <async useReplQueue="true" replQueueInterval="10000" replQueueMaxElements="500" serializationExecutorPoolSize="20" /> -->
+
+      <!-- Uncomment to use Buddy Replication -->
+      <!--
+      <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
+         <dataGravitation auto="true" removeOnFind="true" searchBackupTrees="true"/>
+         <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
+            <properties>
+               numBuddies = 1
+               ignoreColocatedBuddies = true
+            </properties>
+         </locator>
+      </buddy>
+      -->
+
+      <!--
+         Configures the JGroups channel.  Looks up a JGroups config file on the classpath or filesystem.  udp.xml
+         ships with jgroups.jar and will be picked up by the class loader.
+      -->
+      <jgroupsConfig configFile="udp.xml">
+         <!-- uncomment to define a JGroups stack here
+
+         <PING timeout="2000" num_initial_members="3"/>
+         <MERGE2 max_interval="30000" min_interval="10000"/>
+         <FD_SOCK/>
+         <FD timeout="10000" max_tries="5" shun="true"/>
+         <VERIFY_SUSPECT timeout="1500"/>
+         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0"
+                        retransmit_timeout="300,600,1200,2400,4800"
+                        discard_delivered_msgs="true"/>
+         <UNICAST timeout="300,600,1200,2400,3600"/>
+         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+                        max_bytes="400000"/>
+         <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false"
+                     view_bundling="true" view_ack_collection_timeout="5000"/>
+         <FRAG2 frag_size="60000"/>
+         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
+         <pbcast.FLUSH timeout="0"/>
+          -->
+      </jgroupsConfig>
+   </clustering>
+
+   <!--
+      Eviction configuration.  WakeupInterval defines how often the eviction thread runs, in milliseconds.  0 means
+      the eviction thread will never run.
+   -->
+   <eviction wakeUpInterval="500">
+      <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000" />
+      </default>
+      <region name="/org/jboss/data1">
+         <property name="timeToLive" value="2000" />
+      </region>
+      <region name="/org/jboss/data2" algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm" eventQueueSize="100000">
+         <property name="maxNodes" value="3000" />
+         <property name="minTimeToLive" value="4000" />
+      </region>
+   </eviction>
+
+   <!--
+      Cache loaders.
+
+      If passivation is enabled, state is offloaded to the cache loaders ONLY when evicted.  Similarly, when the state
+      is accessed again, it is removed from the cache loader and loaded into memory.
+
+      Otherwise, state is always maintained in the cache loader as well as in memory.
+
+      Set 'shared' to true if all instances in the cluster use the same cache loader instance, e.g., are talking to the
+      same database.
+   -->
+   <loaders passivation="false" shared="false">
+      <preload>
+         <node fqn="/org/jboss"/>
+         <node fqn="/org/tempdata"/>
+      </preload>
+
+      <!--
+         we can have multiple cache loaders, which get chained
+      -->
+      <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="true" fetchPersistentState="true"
+              ignoreModifications="true" purgeOnStartup="true">
+         <properties>
+            cache.jdbc.datasource=DefaultDS
+            cache.jdbc.table.name=jbosscache
+            cache.jdbc.table.create=true
+            cache.jdbc.table.drop=true
+         </properties>
+         <singletonStore enabled="true" class="org.jboss.cache.loader.SingletonStoreCacheLoader">
+            <properties>
+               pushStateWhenCoordinator=true
+               pushStateWhenCoordinatorTimeout=20000
+            </properties>
+         </singletonStore>
+      </loader>
+   </loaders>
+
+   <!--
+      Define custom interceptors.  All custom interceptors need to extend org.jboss.cache.interceptors.base.CommandInterceptor
+   -->
+   <!--
+   <customInterceptors>
+      <interceptor position="first" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor">
+         <property name="attrOne" value="value1" />
+         <property name="attrTwo" value="value2" />
+      </interceptor>
+      <interceptor position="last" class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
+      <interceptor index="3" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
+      <interceptor before="org.jboss.cache.interceptors.CallInterceptor"
+                   class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
+      <interceptor after="org.jboss.cache.interceptors.CallInterceptor"
+                   class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
+   </customInterceptors>
+   -->
+</jbosscache>

Modified: core/trunk/src/main/resources/config-samples/buddy-replication.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/buddy-replication.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config-samples/buddy-replication.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,31 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000" nodeLockingScheme="mvcc"/>
-
-   <!-- Configure the TransactionManager -->
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
 
-   <!--
-    timeout: The max amount of time (in milliseconds) we wait until the state (i.e. the contents of the cache) is
+   <clustering mode="replication">
+      <!--
+         timeout: The max amount of time (in milliseconds) we wait until the state (i.e. the contents of the cache) is
              retrieved from existing members in a clustered environment
-   -->
-   <stateRetrieval timeout="20000"/>
+      -->
+      <stateRetrieval timeout="20000"/>
 
-   <transport clusterName="JBossCache-Cluster">
+
       <!-- JGroups protocol stack properties. -->
       <jgroupsConfig>
          <TCP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="true"
@@ -52,11 +38,8 @@
          <pbcast.STREAMING_STATE_TRANSFER/>
          <pbcast.FLUSH timeout="0"/>
       </jgroupsConfig>
-   </transport>
 
 
-   <!-- this is a replicated cache-->
-   <replication>
       <!-- Number of milliseconds to wait until all responses for a synchronous call have been received -->
       <sync replTimeout="15000"/>
 
@@ -89,5 +72,5 @@
             </properties>
          </locator>
       </buddy>
-   </replication>
+   </clustering>
 </jbosscache>

Modified: core/trunk/src/main/resources/config-samples/cacheloader-enabled.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/cacheloader-enabled.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config-samples/cacheloader-enabled.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,20 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="mvcc"/>
-
    <!-- Configure the TransactionManager -->
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
 
@@ -22,12 +8,12 @@
    <eviction wakeUpInterval="5000">
       <!-- Cache wide default -->
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">3000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="3000" />
       </default>
       <region name="/org/jboss/test/data">
-         <attribute name="maxNodes">100</attribute>
-         <attribute name="timeToLive">3000</attribute>
+         <property name="maxNodes" value="100" />
+         <property name="timeToLive" value="3000" />
       </region>
    </eviction>
 
@@ -41,8 +27,12 @@
          <node fqn="/"/>
       </preload>
       <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
-      <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
-              ignoreModifications="false" purgeOnStartup="false">
+      <loader
+            class="org.jboss.cache.loader.JDBCCacheLoader"
+            async="false"
+            fetchPersistentState="true"
+            ignoreModifications="false"
+            purgeOnStartup="false">
          <properties>
             cache.jdbc.table.name=jbosscache
             cache.jdbc.table.create=true

Modified: core/trunk/src/main/resources/config-samples/eviction-enabled.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/eviction-enabled.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config-samples/eviction-enabled.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,52 +1,40 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="mvcc"/>
-
    <!-- Configure the TransactionManager -->
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
 
    <!--
-      wakeUpInterval: time interval (millis) when the eviction thread kicks in
-      defaultPolicyClass: if policy class is not specified for a region, this one is considered as default
-      defaultEventQueueSize  if policy event queue size is not specified for a region, this one is considered as default
+      wakeUpInterval: time interval (millis) when the eviction thread kicks in.
    -->
    <eviction wakeUpInterval="5000">
-      <!-- Cache wide default -->
+      <!--
+         Cache wide defaults
+         default algorithmClass: if an algorithm class is not specified for a region, this one is used by default.
+         default eventQueueSize  if an event queue size is not specified for a region, this one is used by default.
+      -->
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </default>
 
       <!-- configurations for various regions--> 
-      <region name="/org/jboss/data">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+      <region name="/org/jboss/data1">
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </region>
-      <region name="/org/jboss/test/data">
-         <attribute name="maxNodes">5</attribute>
-         <attribute name="timeToLive">4000</attribute>
+      <region name="/org/jboss/data2" actionPolicyClass="org.jboss.cache.eviction.RemoveOnEvictActionPolicy">
+         <property name="maxNodes" value="5" />
+         <property name="timeToLive" value="4000" />
       </region>
-      <region name="/test">
-         <attribute name="maxNodes">10000</attribute>
-         <attribute name="timeToLive">4000</attribute>
+      <region name="/org/jboss/data3" algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm">
+         <property name="maxNodes" value="10000" />
+         <property name="minTimeToLive" value="4000" />
       </region>
-      <region name="/maxAgeTest">
-         <attribute name="maxNodes">10000</attribute>
-         <attribute name="timeToLive">8000</attribute>
-         <attribute name="maxAge">10000</attribute>
+      <region name="/org/jboss/data1/otherstuff" eventQueueSize="100000">
+         <property name="maxNodes" value="10000" />
+         <property name="timeToLive" value="8000" />
+         <property name="maxAge" value="10000" />
       </region>
    </eviction>
 </jbosscache>

Added: core/trunk/src/main/resources/config-samples/external-jgroups-file.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/external-jgroups-file.xml	                        (rev 0)
+++ core/trunk/src/main/resources/config-samples/external-jgroups-file.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
+
+   <!-- Configure the TransactionManager -->
+   <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
+
+   <clustering>
+      <sync />
+      <!--
+         Here we specify a path to an external JGroups configuration file.  First the classpath is scanned, and then
+         the filesystem for the file.  In this case, "udp.xml" ships with jgroups.jar and will be picked up by the
+         classloader.
+      -->
+      <jgroupsConfig configFile="udp.xml"/>
+   </clustering>
+</jbosscache>

Modified: core/trunk/src/main/resources/config-samples/invalidation-async.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/invalidation-async.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config-samples/invalidation-async.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,32 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000" nodeLockingScheme="mvcc"/>
-
    <!-- Configure the TransactionManager -->
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
 
-   <!--
-    timeout: The max amount of time (in milliseconds) we wait until the
+   <clustering mode="invalidation">
+      <!--
+       timeout: The max amount of time (in milliseconds) we wait until the
              state (i.e. the contents of the cache) are retrieved from
              existing members in a clustered environment
-   -->
-   <stateRetrieval timeout="20000"/>
+      -->
+      <stateRetrieval timeout="20000"/>
 
-   <transport clusterName="JBossCache-Cluster">
       <!-- JGroups protocol stack properties. -->
       <jgroupsConfig>
          <UDP discard_incompatible_packets="true" enable_bundling="true" enable_diagnostics="false" ip_ttl="2"
@@ -56,11 +42,10 @@
          <pbcast.STREAMING_STATE_TRANSFER/>
          <pbcast.FLUSH timeout="0"/>
       </jgroupsConfig>
-   </transport>
 
-   <!-- this uses replication rather than invalidation -->
-   <invalidation>
-      <!-- invalidation messages are not being sent synchronously -->
-      <async useReplQueue="false"/>
-   </invalidation>
+      <sync />
+      <!-- Alternatively, to use async replication, comment out the element above and uncomment the element below.  -->
+      <!-- <async /> -->
+      
+   </clustering>
 </jbosscache>

Modified: core/trunk/src/main/resources/config-samples/local.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/local.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config-samples/local.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,24 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-   <!-- By not specifying neither an 'replication' nor an 'invalidation' element, the cache is defaulted to local -->
-
-
-   <!--
-       isolcationLevels :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="mvcc"/>
-
-      <!-- Configure the TransactionManager -->
+   <!-- By not specifying the 'clustering' element, the cache runs in LOCAL mode. -->
+   <!-- Configure the TransactionManager -->
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
 </jbosscache>

Modified: core/trunk/src/main/resources/config-samples/multiplexer-enabled.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/multiplexer-enabled.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config-samples/multiplexer-enabled.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,66 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000" nodeLockingScheme="mvcc"/>
-
    <!-- Configure the TransactionManager -->
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
 
-   <!--
-    timeout: The max amount of time (in milliseconds) we wait until the
-             state (i.e. the contents of the cache) are retrieved from
-             existing members in a clustered environment
-   -->
-   <stateRetrieval timeout="20000"/>
-
-   <!-- here is where we specify the multiplexer stack -->
-   <transport clusterName="JBossCache-Cluster" multiplexerStack="fc-fast-minimalthreads"/>
-
-   <!-- this is replicated cache-->
-   <replication>
-      <!-- Number of milliseconds to wait until all responses for a
-          synchronous call have been received -->
-      <sync replTimeout="15000"/>
-
-      <!-- poolName: A way to specify a preferred replication group.  If specified, we try and pick a buddy why shares
-                     the same pool name (falling back to other buddies if not available).  This allows the sysadmin
-                     to hint at backup buddies are picked, so for example, nodes may be hinted to pick buddies
-                     on a different physical rack or power supply for added fault tolerance.
-        communicationTimeout : communication timeout for inter-buddy group organisation messages (such as assigning
-                              to and removing from groups
-                       -->
-      <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
-
-         <!-- auto : Should data gravitation be attempted whenever there is a cache miss on finding a node?
-                     If false, data will only be gravitated if an Option is set enabling it
-       removeOnFind: removes data on remote caches' trees and backup subtrees when gravitated to a
-                     new data owner
-       searchBackupTrees: search backup subtrees as well for data when gravitating.  Results in backup nodes
-                           being able to answer data gravitation requests.-->
-         <dataGravitation auto="false" removeOnFind="true" searchBackupTrees="true"/>
-
-         <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
-            <!-- numBuddies is the number of backup nodes each node maintains.  ignoreColocatedBuddies means that
-           each node will *try* to select a buddy on a different physical host.  If not able to do so though,
-            it will fall back to colocated nodes. -->
-            <properties>
-               numBuddies = 1
-               ignoreColocatedBuddies = true
-            </properties>
-         </locator>
-      </buddy>
-   </replication>
-
+   <clustering>
+      <sync />
+      <!-- Here is where we specify the multiplexer stack to use. -->
+      <jgroupsConfig multiplexerStack="fc-fast-minimalthreads"/>
+   </clustering>
 </jbosscache>

Copied: core/trunk/src/main/resources/config-samples/string-property-replaced.xml (from rev 6989, core/trunk/src/test/resources/configs/string-property-replaced.xml)
===================================================================
--- core/trunk/src/main/resources/config-samples/string-property-replaced.xml	                        (rev 0)
+++ core/trunk/src/main/resources/config-samples/string-property-replaced.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
+
+   <locking lockAcquisitionTimeout="${test.property.LockAcquisitionTimeout:15000}"
+            nodeLockingScheme="${test.property.NodeLockingScheme:MVCC}"/>
+
+   <transaction syncCommitPhase="${test.property.SyncCommitPhase:true}" syncRollbackPhase="true"/>
+
+   <serialization useRegionBasedMarshalling="true"/>
+   <clustering>
+      <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
+      <jgroupsConfig multiplexerStack="udp-sync" />
+      <sync replTimeout="20000"/>
+      <buddy enabled="${test.property.BuddyReplicationConfig.enabled:true}"
+             poolName="${test.property.BuddyReplicationConfig.buddyPoolName:default}" communicationTimeout="2000">
+         <dataGravitation auto="false" removeOnFind="true" searchBackupTrees="true"/>
+         <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
+            <properties>
+               ignoreColocatedBuddies = true
+               numBuddies = ${test.property.BuddyReplicationConfig.numBuddies:1}
+            </properties>
+         </locator>
+      </buddy>
+   </clustering>
+
+   <startup regionsInactiveOnStartup="true"/>
+   <eviction wakeUpInterval="5000">
+      <default algorithmClass="${test.property.EvictionPolicyConfig.policyClass:org.jboss.cache.eviction.LRUAlgorithm}">
+         <property name="maxNodes" value="${test.property.EvictionPolicyConfig.maxNodes:5000}" />
+         <property name="timeToLive" value="1000000" />
+      </default>
+   </eviction>
+   <loaders passivation="true" shared="false">
+      <preload>
+         <node fqn="/"/>
+      </preload>
+      <loader class="org.jboss.cache.loader.FileCacheLoader" async="false" fetchPersistentState="true"
+              ignoreModifications="false">
+         <properties>
+            location=${test.property.CacheLoaderConfiguration.location,java.io.tmpdir:/tmp}
+         </properties>
+      </loader>
+   </loaders>
+</jbosscache>

Modified: core/trunk/src/main/resources/config-samples/total-replication.xml
===================================================================
--- core/trunk/src/main/resources/config-samples/total-replication.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config-samples/total-replication.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,31 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
 
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000" nodeLockingScheme="mvcc"/>
-
    <!-- Configure the TransactionManager -->
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
 
-   <!--
-    timeout: The max amount of time (in milliseconds) we wait until the state (i.e. the contents of the cache) is
-             retrieved from existing members in a clustered environment
-   -->
-   <stateRetrieval timeout="20000"/>
-
-   <transport clusterName="JBossCache-Cluster">
+   <clustering mode="replication">
       <!-- JGroups protocol stack properties. -->
       <jgroupsConfig>
          <UDP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="false" ip_ttl="2"
@@ -54,14 +34,10 @@
          <pbcast.FLUSH timeout="0"/>
 
       </jgroupsConfig>
-   </transport>
 
+      <sync />
+      <!-- Alternatively, to use async replication, comment out the element above and uncomment the element below.  -->
+      <!-- <async /> -->
 
-   <!-- this is a replicated cache-->
-   <replication>
-      <!-- Number of milliseconds to wait until all responses for a synchronous call have been received -->
-      <sync replTimeout="15000"/>
-
-      <!--<async useReplQueue="false" replQueueInterval="1500" replQueueMaxElements="30000"/>-->
-   </replication>
+   </clustering>
 </jbosscache>

Modified: core/trunk/src/main/resources/config2to3.xslt
===================================================================
--- core/trunk/src/main/resources/config2to3.xslt	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/config2to3.xslt	2008-10-23 01:10:13 UTC (rev 7002)
@@ -10,8 +10,6 @@
          <xsl:call-template name="transaction"/>
          <xsl:call-template name="serialization"/>
          <xsl:call-template name="startup"/>
-         <xsl:call-template name="stateRetrieval"/>
-         <xsl:call-template name="transport"/>
          <xsl:apply-templates select="//attribute"/>
       </xsl:element>
    </xsl:template>
@@ -69,6 +67,52 @@
       </xsl:if>
    </xsl:template>
 
+   <xsl:template match="//attribute[@name='CacheMode']">
+         <xsl:if test="(normalize-space(.) = 'INVALIDATION_ASYNC') or (normalize-space(.) = 'INVALIDATION_SYNC')">
+            <clustering mode="invalidation">
+               <xsl:if test="//attribute[@name='ClusterName']">
+                  <xsl:attribute name="clusterName">
+                     <xsl:value-of select="normalize-space(//attribute[@name='ClusterName'])"/>
+                  </xsl:attribute>
+               </xsl:if>
+               <xsl:if test="(normalize-space(.) = 'INVALIDATION_ASYNC')">
+                  <xsl:element name="async">
+                     <xsl:call-template name="asyncAttributes"/>
+                  </xsl:element>
+               </xsl:if>
+               <xsl:if test="(normalize-space(.) = 'INVALIDATION_SYNC')">
+                  <xsl:element name="sync">
+                     <xsl:call-template name="syncAttributes"/>
+                  </xsl:element>
+               </xsl:if>
+               <xsl:call-template name="stateRetrieval" />
+               <xsl:call-template name="transport"/>
+            </clustering>
+         </xsl:if>
+         <xsl:if test="(normalize-space(.) = 'REPL_ASYNC') or (normalize-space(.) = 'REPL_SYNC')">
+            <clustering mode="replication">
+               <xsl:if test="//attribute[@name='ClusterName']">
+                  <xsl:attribute name="clusterName">
+                     <xsl:value-of select="normalize-space(//attribute[@name='ClusterName'])"/>
+                  </xsl:attribute>
+               </xsl:if>
+               <xsl:if test="(normalize-space(.) = 'REPL_ASYNC')">
+                  <xsl:element name="async">
+                     <xsl:call-template name="asyncAttributes"/>
+                  </xsl:element>
+               </xsl:if>
+               <xsl:if test="(normalize-space(.) = 'REPL_SYNC')">
+                  <xsl:element name="sync">
+                     <xsl:call-template name="syncAttributes"/>
+                  </xsl:element>
+               </xsl:if>
+               <xsl:call-template name="buddy"/>
+               <xsl:call-template name="stateRetrieval" />
+               <xsl:call-template name="transport"/>
+            </clustering>
+         </xsl:if>
+   </xsl:template>
+
    <xsl:template name="serialization">
       <xsl:if
             test="//attribute[@name='ObjectInputStreamPoolSize'] | //attribute[@name='ObjectOutputStreamPoolSize'] | //attribute[@name='ReplicationVersion'] | //attribute[@name='MarshallerClass'] | //attribute[@name='UseLazyDeserialization'] | //attribute[@name='UseRegionBasedMarshalling']">
@@ -108,38 +152,6 @@
       </xsl:if>
    </xsl:template>
 
-   <xsl:template match="//attribute[@name='CacheMode']">
-      <xsl:if test="(normalize-space(.) = 'INVALIDATION_ASYNC') or (normalize-space(.) = 'INVALIDATION_SYNC')">
-         <invalidation>
-            <xsl:if test="(normalize-space(.) = 'INVALIDATION_ASYNC')">
-               <xsl:element name="async">
-                  <xsl:call-template name="asyncAttributes"/>
-               </xsl:element>
-            </xsl:if>
-            <xsl:if test="(normalize-space(.) = 'INVALIDATION_SYNC')">
-               <xsl:element name="sync">
-                  <xsl:call-template name="syncAttributes"/>
-               </xsl:element>
-            </xsl:if>
-         </invalidation>
-      </xsl:if>
-      <xsl:if test="(normalize-space(.) = 'REPL_ASYNC') or (normalize-space(.) = 'REPL_SYNC')">
-         <replication>
-            <xsl:if test="(normalize-space(.) = 'REPL_ASYNC')">
-               <xsl:element name="async">
-                  <xsl:call-template name="asyncAttributes"/>
-               </xsl:element>
-            </xsl:if>
-            <xsl:if test="(normalize-space(.) = 'REPL_SYNC')">
-               <xsl:element name="sync">
-                  <xsl:call-template name="syncAttributes"/>
-               </xsl:element>
-            </xsl:if>
-            <xsl:call-template name="buddy"/>
-         </replication>
-      </xsl:if>
-   </xsl:template>
-
    <xsl:template name="buddy">
       <xsl:if test="//attribute[@name='BuddyReplicationConfig']">
          <buddy>
@@ -354,22 +366,26 @@
 
    <xsl:template name="attributesSecondsSubstitution">
       <xsl:param name="attr"/>
-      <attribute>
+      <property>
          <xsl:choose>
             <xsl:when test="contains($attr/@name,'Seconds')">
                <xsl:attribute name="name">
                   <xsl:value-of select="substring-before($attr/@name,'Seconds')"/>
                </xsl:attribute>
-               <xsl:value-of select="concat($attr,'000')"/>
+               <xsl:attribute name="value">
+                  <xsl:value-of select="concat($attr,'000')"/>
+               </xsl:attribute>
             </xsl:when>
             <xsl:otherwise>
                <xsl:attribute name="name">
                   <xsl:value-of select="string($attr/@name)"/>
                </xsl:attribute>
-               <xsl:value-of select="$attr"/>
+               <xsl:attribute name="value">
+                  <xsl:value-of select="$attr"/>
+               </xsl:attribute>
             </xsl:otherwise>
          </xsl:choose>
-      </attribute>
+      </property>
    </xsl:template>
 
    <xsl:template match="//attribute[@name='CacheLoaderConfig'] | //attribute[@name='CacheLoaderConfiguration']">
@@ -475,24 +491,17 @@
 
    <xsl:template name="transport">
       <xsl:if
-            test="//attribute[@name='ClusterName'] | //attribute[@name='MultiplexerStack'] | //attribute[@name='ClusterConfig']">
-         <transport>
-            <xsl:if test="//attribute[@name='ClusterName']">
-               <xsl:attribute name="clusterName">
-                  <xsl:value-of select="normalize-space(//attribute[@name='ClusterName'])"/>
-               </xsl:attribute>
-            </xsl:if>
+            test="//attribute[@name='MultiplexerStack'] | //attribute[@name='ClusterConfig']">
+         <jgroupsConfig>
             <xsl:if test="//attribute[@name='MultiplexerStack']">
                <xsl:attribute name="multiplexerStack">
                   <xsl:value-of select="normalize-space(//attribute[@name='MultiplexerStack'])"/>
                </xsl:attribute>
             </xsl:if>
             <xsl:if test="//attribute[@name='ClusterConfig']">
-               <jgroupsConfig>
                   <xsl:copy-of select="//attribute[@name='ClusterConfig']/config/*"/>
-               </jgroupsConfig>
             </xsl:if>
-         </transport>
+         </jgroupsConfig>
       </xsl:if>
    </xsl:template>
 

Modified: core/trunk/src/main/resources/schema/jbosscache-config-3.0.xsd
===================================================================
--- core/trunk/src/main/resources/schema/jbosscache-config-3.0.xsd	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/main/resources/schema/jbosscache-config-3.0.xsd	2008-10-23 01:10:13 UTC (rev 7002)
@@ -10,21 +10,62 @@
          <xs:element name="locking" type="tns:lockingType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="transaction" type="tns:transactionType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="startup" type="tns:startupType" minOccurs="0" maxOccurs="1"/>
-         <xs:element name="stateRetrieval" type="tns:stateRetrievalType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="shutdown" type="tns:shutdownType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="serialization" type="tns:serializationType" minOccurs="0" maxOccurs="1"/>
-         <xs:element name="replication" type="tns:replicationType" minOccurs="0" maxOccurs="1"/>
-         <xs:element name="invalidation" type="tns:invalidationType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="jmxStatistics" type="tns:jmxStatisticsType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="listeners" type="tns:listenersType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="invocationBatching" type="tns:invocationBatchingType" minOccurs="0" maxOccurs="1"/>
-         <xs:element name="transport" type="tns:transportType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="eviction" type="tns:evictionType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="loaders" type="tns:loadersType" minOccurs="0" maxOccurs="1"/>
          <xs:element name="customInterceptors" type="tns:customInterceptorsType" minOccurs="0" maxOccurs="1"/>
+         <xs:element name="clustering" type="tns:clusteringType" minOccurs="0" maxOccurs="1"/>
       </xs:all>
    </xs:complexType>
 
+   <xs:complexType name="clusteringType">
+      <xs:all>         
+         <xs:element name="sync" type="tns:syncType" minOccurs="0" maxOccurs="1"/>
+         <xs:element name="async" type="tns:asyncType" minOccurs="0" maxOccurs="1"/>
+         <xs:element name="stateRetrieval" type="tns:stateRetrievalType" minOccurs="0" maxOccurs="1"/>
+         <xs:element name="buddy" minOccurs="0" maxOccurs="1">
+            <xs:complexType>
+               <xs:all minOccurs="0">
+                  <xs:element name="dataGravitation" maxOccurs="1">
+                     <xs:complexType>
+                        <xs:attribute name="auto" type="tns:booleanType"/>
+                        <xs:attribute name="removeOnFind" type="tns:booleanType"/>
+                        <xs:attribute name="searchBackupTrees" type="tns:booleanType"/>
+                     </xs:complexType>
+                  </xs:element>
+                  <xs:element name="locator" maxOccurs="1">
+                     <xs:complexType>
+                        <xs:all>
+                           <xs:element name="properties" type="xs:string" maxOccurs="1"/>
+                        </xs:all>
+                        <xs:attribute name="class" type="xs:string"/>
+                     </xs:complexType>
+                  </xs:element>
+               </xs:all>
+               <xs:attribute name="enabled" type="tns:booleanType"/>
+               <xs:attribute name="poolName" type="xs:string"/>
+               <xs:attribute name="communicationTimeout" type="xs:integer"/>
+            </xs:complexType>
+         </xs:element>
+         <xs:element name="jgroupsConfig" type="tns:jgroupsConfigType" minOccurs="0" maxOccurs="1"/>
+      </xs:all>
+      <xs:attribute name="mode">
+         <xs:simpleType>
+            <xs:restriction base="xs:string">
+               <xs:pattern
+                     value="[Rr][Ee][Pp][Ll][Ii][Cc][Aa][Tt][Ii][Oo][Nn]|[Ii][Nn][Vv][Aa][Ll][Ii][Dd][Aa][Tt][Ii][Oo][Nn]|[Rr]|[Ii]|\$\{.*\}"/>
+            </xs:restriction>
+         </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="clusterName" type="xs:string" />
+
+
+   </xs:complexType>
+   
    <xs:complexType name="lockingType">
       <xs:attribute name="isolationLevel">
          <xs:simpleType>
@@ -95,46 +136,6 @@
       </xs:restriction>
    </xs:simpleType>
 
-   <xs:complexType name="replicationType">
-      <xs:sequence>
-         <xs:choice>
-            <xs:element name="sync" type="tns:syncType" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="async" type="tns:asyncType" minOccurs="0" maxOccurs="1"/>
-         </xs:choice>
-         <xs:element name="buddy" minOccurs="0" maxOccurs="1">
-            <xs:complexType>
-               <xs:all minOccurs="0">
-                  <xs:element name="dataGravitation" maxOccurs="1">
-                     <xs:complexType>
-                        <xs:attribute name="auto" type="tns:booleanType"/>
-                        <xs:attribute name="removeOnFind" type="tns:booleanType"/>
-                        <xs:attribute name="searchBackupTrees" type="tns:booleanType"/>
-                     </xs:complexType>
-                  </xs:element>
-                  <xs:element name="locator" maxOccurs="1">
-                     <xs:complexType>
-                        <xs:all>
-                           <xs:element name="properties" type="xs:string" maxOccurs="1"/>
-                        </xs:all>
-                        <xs:attribute name="class" type="xs:string"/>
-                     </xs:complexType>
-                  </xs:element>
-               </xs:all>
-               <xs:attribute name="enabled" type="tns:booleanType"/>
-               <xs:attribute name="poolName" type="xs:string"/>
-               <xs:attribute name="communicationTimeout" type="xs:integer"/>
-            </xs:complexType>
-         </xs:element>
-      </xs:sequence>
-   </xs:complexType>
-
-   <xs:complexType name="invalidationType">
-      <xs:choice>
-         <xs:element name="sync" type="tns:syncType"/>
-         <xs:element name="async" type="tns:asyncType"/>
-      </xs:choice>
-   </xs:complexType>
-
    <xs:complexType name="jmxStatisticsType">
       <xs:attribute name="enabled" type="tns:booleanType"/>
    </xs:complexType>
@@ -147,11 +148,11 @@
       <xs:attribute name="enabled" type="tns:booleanType"/>
    </xs:complexType>
 
-   <xs:complexType name="transportType">
+   <xs:complexType name="jgroupsConfigType">
       <xs:sequence>
-         <xs:element name="jgroupsConfig" type="xs:anyType" minOccurs="0" maxOccurs="1"/>
+         <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
-      <xs:attribute name="clusterName" type="xs:string"/>
+      <xs:attribute name="configFile" type="xs:string"/>
       <xs:attribute name="multiplexerStack" type="xs:string"/>
    </xs:complexType>
 
@@ -176,7 +177,7 @@
 
    <xs:complexType name="evictionRegionType">
       <xs:sequence>
-         <xs:element name="attribute" maxOccurs="unbounded" type="tns:attributeType"/>
+         <xs:element name="property" maxOccurs="unbounded" type="tns:propertyType"/>
       </xs:sequence>
       <xs:attribute name="name" type="xs:string"/>
       <xs:attribute name="algorithmClass" type="xs:string"/>
@@ -228,7 +229,7 @@
          <xs:element name="interceptor" maxOccurs="unbounded">
             <xs:complexType>
                <xs:sequence>
-                  <xs:element name="attribute" maxOccurs="unbounded" type="tns:attributeType" minOccurs="0"/>
+                  <xs:element name="property" maxOccurs="unbounded" type="tns:propertyType" minOccurs="0"/>
                </xs:sequence>
                <xs:attribute name="class" type="xs:string"/>
                <xs:attribute name="position">
@@ -246,10 +247,11 @@
       </xs:sequence>
    </xs:complexType>
 
-   <xs:complexType name="attributeType">
+   <xs:complexType name="propertyType">
       <xs:simpleContent>
          <xs:extension base="xs:string">
             <xs:attribute name="name" type="xs:string"/>
+            <xs:attribute name="value" type="xs:string"/>
          </xs:extension>
       </xs:simpleContent>
    </xs:complexType>

Deleted: core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,56 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.cache.config;
-
-
-import org.jboss.cache.config.Configuration.CacheMode;
-import org.jboss.cache.config.parsing.XmlConfigurationParser;
-import org.jboss.cache.factories.UnitTestCacheConfigurationFactory;
-import org.jboss.cache.lock.IsolationLevel;
-import org.jboss.cache.transaction.TransactionSetup;
-import static org.testng.AssertJUnit.assertEquals;
-import static org.testng.AssertJUnit.assertNull;
-import org.testng.annotations.Test;
-/**
- * @author <a href="mailto:manik AT jboss DOT org">Manik Surtani (manik AT jboss DOT org)</a>
- */
- at Test(groups = {"functional", "jgroups", "transaction"})
-public class ConfigurationTest
-{
-   public void testReplSyncStack() throws Exception
-   {
-      Configuration conf = UnitTestCacheConfigurationFactory.createConfiguration(CacheMode.REPL_SYNC);
-
-      //now test that everything has been read in properly.
-      assertEquals(Configuration.CacheMode.REPL_SYNC, conf.getCacheMode());
-      assertEquals(TransactionSetup.getManagerLookup(), conf.getTransactionManagerLookupClass());
-      assertEquals(IsolationLevel.REPEATABLE_READ, conf.getIsolationLevel());
-      assertEquals(false, conf.isUseReplQueue());
-      assertEquals("JBossCache-Cluster", conf.getClusterName());
-      assertEquals(true, conf.isFetchInMemoryState());
-      assertEquals(15000, conf.getStateRetrievalTimeout());
-      assertEquals(15000, conf.getSyncReplTimeout());
-      assertEquals(10000, conf.getLockAcquisitionTimeout());
-      assertNull(conf.getEvictionConfig());
-      assertEquals(false, conf.isUseRegionBasedMarshalling());
-
-      // not testing the JGroups configs since JGroups doesn't expose their config as a bean.
-      // comparing an XML block is a PITA.
-   }
-
-   public void testMultiplexerStack() throws Exception
-   {
-      XmlConfigurationParser parser = new XmlConfigurationParser();
-      Configuration conf = parser.parseFile("configs/mux.xml");
-
-      // test that multiplexer settings have been read in properly.
-      //assertEquals("MultiplexerService", "jgroups.mux:name=Multiplexer", conf.getMultiplexerService());
-      assertEquals("MultiplexerStack", "tcp", conf.getMultiplexerStack());
-      assertNull("ClusterConfig", conf.getClusterConfig());
-   }
-
-}

Modified: core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTransformerTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTransformerTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/ConfigurationTransformerTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,13 +1,13 @@
 package org.jboss.cache.config;
 
-import org.testng.annotations.Test;
 import org.jboss.cache.config.parsing.ConfigFilesConvertor;
 import org.jboss.cache.config.parsing.XmlConfigurationParser;
 import org.jboss.cache.config.parsing.XmlConfigurationParser2x;
+import org.testng.annotations.Test;
 
-import java.io.File;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 
 /**
  * Test how xsl for migrating config files from 2.x to 3.x works.
@@ -62,7 +62,7 @@
          String fileName = getFileName(file);
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          convertor.parse(fileName, baos, XSLT_FILE);
-//         System.out.println("result = \n" + baos);
+         System.out.println("result = \n" + baos);
 
          XmlConfigurationParser newParser = new XmlConfigurationParser();
          XmlConfigurationParser2x oldParser = new XmlConfigurationParser2x();
@@ -94,7 +94,7 @@
          String fileName = getFileName(file);
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          convertor.parse(fileName, baos, XSLT_FILE);
-//         System.out.println("result = \n" + baos);
+         System.out.println("result = \n" + baos);
 
          XmlConfigurationParser newParser = new XmlConfigurationParser();
          XmlConfigurationParser2x oldParser = new XmlConfigurationParser2x();

Modified: core/trunk/src/test/java/org/jboss/cache/config/StringPropertyReplacementTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/StringPropertyReplacementTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/StringPropertyReplacementTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -81,7 +81,7 @@
 
       Configuration cfg = new XmlConfigurationParser().parseFile(STRING_REPLACED_FILE);
 
-      assertEquals(NodeLockingScheme.OPTIMISTIC, cfg.getNodeLockingScheme());
+      assertEquals(NodeLockingScheme.MVCC, cfg.getNodeLockingScheme());
       assertFalse(cfg.isSyncCommitPhase());
       assertTrue(cfg.isSyncRollbackPhase());
       assertEquals(15000, cfg.getLockAcquisitionTimeout());

Modified: core/trunk/src/test/java/org/jboss/cache/config/parsing/CacheConfigsTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/parsing/CacheConfigsTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/parsing/CacheConfigsTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,6 +1,7 @@
 package org.jboss.cache.config.parsing;
 
 import org.jboss.cache.config.Configuration;
+import org.jboss.cache.config.Configuration.CacheMode;
 import org.jboss.cache.lock.IsolationLevel;
 import org.testng.annotations.Test;
 
@@ -25,7 +26,7 @@
             "            xmlns=\"urn:jboss:jbosscache-core:config:3.0\">\n" +
             "         <locking isolationLevel=\"REPEATABLE_READ\" lockAcquisitionTimeout=\"15000\"/>\n" +
             "         <transaction transactionManagerLookupClass=\"org.jboss.cache.transaction.GenericTransactionManagerLookup\"/>\n" +
-            "         <stateRetrieval timeout=\"20000\"/>\n" +
+            "         <clustering><stateRetrieval timeout=\"20000\"/></clustering>\n" +
             "      </jbosscache>\n" +
             "   </cache-config>\n" +
             "\n" +
@@ -34,7 +35,7 @@
             "            xmlns=\"urn:jboss:jbosscache-core:config:3.0\">\n" +
             "         <locking isolationLevel=\"READ_COMMITTED\" lockAcquisitionTimeout=\"15000\"/>\n" +
             "         <transaction transactionManagerLookupClass=\"org.jboss.cache.transaction.GenericTransactionManagerLookup\"/>\n" +
-            "         <stateRetrieval timeout=\"20000\"/>\n" +
+            "         <clustering><stateRetrieval timeout=\"20000\"/></clustering>\n" +
             "      </jbosscache>\n" +
             "   </cache-config>\n" +
             "\n" +
@@ -42,7 +43,7 @@
             "      <jbosscache  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
             "            xmlns=\"urn:jboss:jbosscache-core:config:3.0\">\n" +
             "         <locking isolationLevel=\"READ_COMMITTED\" lockAcquisitionTimeout=\"100\"/>\n" +
-            "         <stateRetrieval timeout=\"100\"/>\n" +
+            "         <clustering><stateRetrieval timeout=\"100\"/></clustering>\n" +
             "      </jbosscache>\n" +
             "   </cache-config>\n" +
             "</cache-configs>";
@@ -53,7 +54,7 @@
       Map<String, Configuration> map = ccxp.parseConfigs(bais);
       Map toExpect = buildExpectedValues();
 
-      assert map.equals(toExpect);
+      assert map.equals(toExpect) : "Expected " + toExpect + " but was " + map;
    }
 
    public void testLegacyFormat() throws CloneNotSupportedException
@@ -64,6 +65,7 @@
             "      <attribute name=\"LockAcquisitionTimeout\">15000</attribute>\n" +
             "      <attribute name=\"TransactionManagerLookupClass\">org.jboss.cache.transaction.GenericTransactionManagerLookup</attribute>\n" +
             "      <attribute name=\"StateRetrievalTimeout\">20000</attribute>\n" +
+            "      <attribute name=\"CacheMode\">REPL_SYNC</attribute>"+
             "   </cache-config>\n" +
             "\n" +
             "   <cache-config name=\"B\">\n" +
@@ -71,12 +73,14 @@
             "         <attribute name=\"LockAcquisitionTimeout\">15000</attribute>\n" +
             "         <attribute name=\"TransactionManagerLookupClass\">org.jboss.cache.transaction.GenericTransactionManagerLookup</attribute>\n" +
             "         <attribute name=\"StateRetrievalTimeout\">20000</attribute>\n" +
+            "      <attribute name=\"CacheMode\">REPL_SYNC</attribute>"+
             "   </cache-config>\n" +
             "\n" +
             "   <cache-config name=\"C\">\n" +
             "         <attribute name=\"IsolationLevel\">READ_COMMITTED</attribute>\n" +
             "         <attribute name=\"LockAcquisitionTimeout\">100</attribute>\n" +
             "         <attribute name=\"StateRetrievalTimeout\">100</attribute>\n" +
+            "      <attribute name=\"CacheMode\">REPL_SYNC</attribute>"+
             "   </cache-config>\n" +
             "</cache-configs>";
 
@@ -98,6 +102,7 @@
       cfg.setLockAcquisitionTimeout(15000);
       cfg.setTransactionManagerLookupClass("org.jboss.cache.transaction.GenericTransactionManagerLookup");
       cfg.setStateRetrievalTimeout(20000);
+      cfg.setCacheMode(CacheMode.REPL_SYNC);
 
       cfg = new Configuration();
       map.put("B", cfg);
@@ -105,12 +110,14 @@
       cfg.setLockAcquisitionTimeout(15000);
       cfg.setTransactionManagerLookupClass("org.jboss.cache.transaction.GenericTransactionManagerLookup");
       cfg.setStateRetrievalTimeout(20000);
+      cfg.setCacheMode(CacheMode.REPL_SYNC);
 
       cfg = new Configuration();
       map.put("C", cfg);
       cfg.setIsolationLevel(IsolationLevel.READ_COMMITTED);
       cfg.setLockAcquisitionTimeout(100);
       cfg.setStateRetrievalTimeout(100);
+      cfg.setCacheMode(CacheMode.REPL_SYNC);
 
       return map;
    }

Modified: core/trunk/src/test/java/org/jboss/cache/config/parsing/Eviction2xto3xCompatibilityTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/parsing/Eviction2xto3xCompatibilityTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/parsing/Eviction2xto3xCompatibilityTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -21,16 +21,15 @@
  */
 package org.jboss.cache.config.parsing;
 
-import org.testng.annotations.Test;
-import org.testng.annotations.BeforeMethod;
-import org.testng.reporters.XMLUtils;
-import org.w3c.dom.Element;
-import org.jboss.cache.config.parsing.element.EvictionElementParser;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.config.EvictionAlgorithmConfig;
 import org.jboss.cache.config.EvictionConfig;
 import org.jboss.cache.config.EvictionRegionConfig;
-import org.jboss.cache.config.EvictionAlgorithmConfig;
-import org.jboss.cache.Fqn;
+import org.jboss.cache.config.parsing.element.EvictionElementParser;
 import org.jboss.cache.eviction.MRUAlgorithmConfig;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import org.w3c.dom.Element;
 
 /**
  * Eviction was internally changed from version 2.x to version 3.x.
@@ -106,12 +105,12 @@
       String newFormat =
                   "<eviction wakeUpInterval=\"5000\">\n" +
                   "  <default algorithmClass=\"org.jboss.cache.eviction.LRUAlgorithm\" eventQueueSize=\"200000\">\n" +
-                  "     <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "     <attribute name=\"timeToLive\">1000000</attribute>\n" +
+                  "     <property name=\"maxNodes\" value=\"5000\"></property>\n" +
+                  "     <property name=\"timeToLive\" value=\"1000000\"></property>\n" +
                   "  </default>\n" +
                   "  <region name=\"/org/jboss/data\" algorithmClass=\"org.jboss.cache.eviction.LFUAlgorithm\" eventQueueSize=\"200000\">\n" +
-                  "     <attribute name=\"minTimeToLive\">1000000</attribute>\n" +
-                  "     <attribute name=\"maxNodes\">5000</attribute>\n" +
+                  "     <property name=\"minTimeToLive\" value=\"1000000\"></property>\n" +
+                  "     <property name=\"maxNodes\" value=\"5000\"></property>\n" +
                   "  </region>\n" +
                   "</eviction>";
       Element oldEl = XmlConfigHelper.stringToElementInCoreNS(oldFormat);

Modified: core/trunk/src/test/java/org/jboss/cache/config/parsing/EvictionElementParserTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/parsing/EvictionElementParserTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/parsing/EvictionElementParserTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -35,12 +35,12 @@
       String xml =
             "   <eviction wakeUpInterval=\"5\">\n" +
                   "      <default algorithmClass=\"org.jboss.cache.eviction.MRUAlgorithm\">\n" +
-                  "         <attribute name=\"maxNodes\">10</attribute>\n" +
-                  "         <attribute name=\"minTimeToLive\">10</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"10\"></property>\n" +
+                  "         <property name=\"minTimeToLive\" value=\"10\"></property>\n" +
                   "      </default>\n" +
                   "      <region name=\"/org/jboss/xyz\" eventQueueSize=\"21\">\n" +
-                  "         <attribute name=\"maxNodes\">2103</attribute>\n" +
-                  "         <attribute name=\"minTimeToLive\">22</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"2103\"></property>\n" +
+                  "         <property name=\"minTimeToLive\" value=\"22\"></property>\n" +
                   "      </region>\n" +
                   "   </eviction>";
       EvictionConfig evictionConfig = getEvictionConfig(xml, false);
@@ -49,15 +49,15 @@
    }
 
    /**
-    * test unnecessary attributes
+    * test unnecessary propertys
     */
    public void testUnnecessaryAttributes()
    {
       String xml =
             "   <eviction wakeUpInterval=\"5\" defaultPolicyClass=\"org.jboss.cache.eviction.MRUPolicy\" defaultEventQueueSize=\"123456\">\n" +
                   "      <default>\n" +
-                  "         <attribute name=\"maxNodes\">6</attribute>\n" +
-                  "         <attribute name=\"minTimeToLive\">7</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"6\"></property>\n" +
+                  "         <property name=\"minTimeToLive\" value=\"7\"></property>\n" +
                   "      </default>\n" +
                   "   </eviction>";
       try
@@ -80,16 +80,16 @@
       String xml =
             "   <eviction wakeUpInterval=\"5\">\n" +
                   "      <default algorithmClass=\"org.jboss.cache.eviction.MRUAlgorithm\" eventQueueSize=\"123456\">\n" +
-                  "         <attribute name=\"maxNodes\">6</attribute>\n" +
-                  "         <attribute name=\"minTimeToLive\">7</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"6\"></property>\n" +
+                  "         <property name=\"minTimeToLive\" value=\"7\"></property>\n" +
                   "      </default>\n" +
                   "      <region name=\"/org/jboss/data\">\n" +
-                  "         <attribute name=\"minTimeToLive\">1002</attribute>\n" +
-                  "         <attribute name=\"maxNodes\">2021</attribute>\n" +
+                  "         <property name=\"minTimeToLive\" value=\"1002\"></property>\n" +
+                  "         <property name=\"maxNodes\" value=\"2021\"></property>\n" +
                   "      </region>\n" +
                   "      <region name=\"/org/jboss/xyz\" algorithmClass=\"org.jboss.cache.eviction.LRUAlgorithm\" eventQueueSize=\"21\">\n" +
-                  "         <attribute name=\"maxNodes\">2103</attribute>\n" +
-                  "         <attribute name=\"timeToLive\">22</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"2103\"></property>\n" +
+                  "         <property name=\"timeToLive\" value=\"22\"></property>\n" +
                   "      </region>\n" +
                   "   </eviction>";
       EvictionConfig config = getEvictionConfig(xml, false);
@@ -130,21 +130,21 @@
       String xml =
             "   <eviction wakeUpInterval=\"45000\">\n" +
                   "      <default algorithmClass=\"org.jboss.cache.eviction.LRUAlgorithm\" eventQueueSize=\"4\">\n" +
-                  "         <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "         <attribute name=\"timeToLive\">1000000</attribute>\n" +
-                  "         <attribute name=\"maxAge\">15000</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"5000\"></property>\n" +
+                  "         <property name=\"timeToLive\" value=\"1000000\"></property>\n" +
+                  "         <property name=\"maxAge\" value=\"15000\"></property>\n" +
                   "      </default>\n" +
                   "      <region name=\"/fifo\">\n" +
-                  "         <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "         <attribute name=\"timeToLive\">1000000</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"5000\"></property>\n" +
+                  "         <property name=\"timeToLive\" value=\"1000000\"></property>\n" +
                   "      </region>\n" +
                   "      <region name=\"/mru\">\n" +
-                  "         <attribute name=\"maxNodes\">10000</attribute>\n" +
-                  "         <attribute name=\"timeToLive\">1000000</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"10000\"></property>\n" +
+                  "         <property name=\"timeToLive\" value=\"1000000\"></property>\n" +
                   "      </region>\n" +
                   "      <region name=\"/lfu\">\n" +
-                  "         <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "         <attribute name=\"timeToLive\">1000000</attribute>\n" +
+                  "         <property name=\"maxNodes\" value=\"5000\"></property>\n" +
+                  "         <property name=\"timeToLive\" value=\"1000000\"></property>\n" +
                   "      </region>\n" +
                   "   </eviction>";
       EvictionConfig evConfig = getEvictionConfig(xml, false);
@@ -163,11 +163,11 @@
       String xml =
             "   <eviction>\n" +
                   "      <default algorithmClass=\"org.jboss.cache.eviction.LRUAlgorithm\" eventQueueSize=\"200000\">\n" +
-                  "         <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "         <attribute name=\"timeToLive\">1000</attribute>\n" +
+                  "         <property name=\"maxNodes\">5000</property>\n" +
+                  "         <property name=\"timeToLive\">1000</property>\n" +
                   "      </default>\n" +
                   "      <region name=\"/org/jboss/data\">\n" +
-                  "         <attribute name=\"timeToLive\">1002</attribute>\n" +
+                  "         <property name=\"timeToLive\">1002</property>\n" +
                   "      </region>\n" +
                   "   </eviction>";
       try
@@ -190,7 +190,7 @@
       String xml =
             "   <eviction wakeUpInterval=\"5000\">\n" +
                   "      <region name=\"/org/jboss/data\" eventQueueSize=\"5\">\n" +
-                  "         <attribute name=\"timeToLive\">1002</attribute>\n" +
+                  "         <property name=\"timeToLive\">1002</property>\n" +
                   "      </region>\n" +
                   "   </eviction>";
       try
@@ -212,7 +212,7 @@
       String xml =
             "   <eviction wakeUpInterval=\"5000\">\n" +
                   "      <region name=\"/org/jboss/data\" algorithmClass=\"org.jboss.cache.eviction.LRUAlgorithm\">\n" +
-                  "         <attribute name=\"timeToLive\">1002</attribute>\n" +
+                  "         <property name=\"timeToLive\">1002</property>\n" +
                   "      </region>\n" +
                   "   </eviction>";
       EvictionConfig ec = getEvictionConfig(xml, false);
@@ -245,12 +245,12 @@
       String xml =
             "   <eviction wakeUpInterval=\"5000\">\n" +
                   "      <default>\n" +
-                  "         <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "         <attribute name=\"timeToLive\">1000</attribute>\n" +
+                  "         <property name=\"maxNodes\">5000</property>\n" +
+                  "         <property name=\"timeToLive\">1000</property>\n" +
                   "      </default>\n" +
                   "      <region name=\"/org/jboss/data\" algorithmClass=\"org.jboss.cache.eviction.LFUAlgorithm\">\n" +
-                  "         <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "         <attribute name=\"minNodes\">1000</attribute>\n" +
+                  "         <property name=\"maxNodes\">5000</property>\n" +
+                  "         <property name=\"minNodes\">1000</property>\n" +
                   "      </region>\n" +
                   "   </eviction>";
       try
@@ -271,8 +271,8 @@
                   "      <default algorithmClass=\"" + NullEvictionAlgorithm.class.getName() + "\" actionPolicyClass=\"" + RemoveOnEvictActionPolicy.class.getName() + "\">\n" +
                   "      </default>\n" +
                   "      <region name=\"/one\" algorithmClass=\"org.jboss.cache.eviction.LFUAlgorithm\">\n" +
-                  "         <attribute name=\"maxNodes\">5000</attribute>\n" +
-                  "         <attribute name=\"minNodes\">1000</attribute>\n" +
+                  "         <property name=\"maxNodes\">5000</property>\n" +
+                  "         <property name=\"minNodes\">1000</property>\n" +
                   "      </region>\n" +
                   "      <region name=\"/two\" actionPolicyClass=\"" + DefaultEvictionActionPolicy.class.getName() + "\">\n" +
                   "      </region>\n" +

Modified: core/trunk/src/test/java/org/jboss/cache/config/parsing/SampleConfigFilesCorrectnessTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/parsing/SampleConfigFilesCorrectnessTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/parsing/SampleConfigFilesCorrectnessTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -26,13 +26,13 @@
 import org.apache.log4j.Logger;
 import org.apache.log4j.spi.LoggingEvent;
 import org.jboss.cache.Cache;
+import org.jboss.cache.UnitTestCacheFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import java.io.File;
 import java.io.FilenameFilter;
-import org.jboss.cache.UnitTestCacheFactory;
 
 /**
  * The purpose of this test is to make sure that the config files we ship are correct both according to xml schema and
@@ -93,8 +93,8 @@
       {
          System.out.println("Processing file: " + aConfFile);
          assert !appender.isFoundUnknownWarning();
-         Cache cache = ucf.createCache(CONFIG_ROOT + "/" + aConfFile);
-         cache.stop();
+         Cache cache = ucf.createCache(CONFIG_ROOT + "/" + aConfFile, false);
+//         cache.stop();
          assert !appender.isFoundUnknownWarning();
       }
    }

Modified: core/trunk/src/test/java/org/jboss/cache/config/parsing/XmlConfigurationParserTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/config/parsing/XmlConfigurationParserTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/config/parsing/XmlConfigurationParserTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -67,8 +67,8 @@
 
    public void testCacheMode()
    {
-      assert syncConfig.getCacheMode().equals(Configuration.CacheMode.REPL_SYNC);
-      assert asyncConfig.getCacheMode().equals(Configuration.CacheMode.REPL_ASYNC);
+      assert syncConfig.getCacheMode().equals(Configuration.CacheMode.REPL_SYNC) : "Was " + syncConfig.getCacheMode();
+      assert asyncConfig.getCacheMode().equals(Configuration.CacheMode.REPL_ASYNC): "Was " + syncConfig.getCacheMode();
    }
 
    public void testAsyncSerializationExecutorSize()
@@ -84,12 +84,12 @@
 
    public void testClusterName()
    {
-      assert syncConfig.getClusterName().equals("JBossCache-Cluster");
+      assert syncConfig.getClusterName().equals("JBossCache-cluster");
    }
 
    public void testGetClusterConfig()
    {
-      assert syncConfig.getClusterConfig().indexOf("MERGE2") >= 0;
+      assert asyncConfig.getClusterConfig().indexOf("MERGE2") >= 0;
    }
 
    public void testFetchInMemoryState()
@@ -246,6 +246,10 @@
       List<CustomInterceptorConfig> interceptorConfigs = syncConfig.getCustomInterceptors();
       assert interceptorConfigs.size() == 5;
       assert interceptorConfigs.get(0).getInterceptor() instanceof AaaCustomInterceptor;
+      AaaCustomInterceptor a = (AaaCustomInterceptor) interceptorConfigs.get(0).getInterceptor();
+      assert a.getAttrOne().equals("value1");
+      assert a.getAttrTwo().equals("value2");
+      assert a.getAttrThree() == null;
       assert interceptorConfigs.get(1).getInterceptor() instanceof BbbCustomInterceptor;
       assert interceptorConfigs.get(2).getInterceptor() instanceof AaaCustomInterceptor;
       assert interceptorConfigs.get(3).getInterceptor() instanceof BbbCustomInterceptor;

Modified: core/trunk/src/test/java/org/jboss/cache/loader/JDBCCacheLoaderStateTransferTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/loader/JDBCCacheLoaderStateTransferTest.java	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/java/org/jboss/cache/loader/JDBCCacheLoaderStateTransferTest.java	2008-10-23 01:10:13 UTC (rev 7002)
@@ -21,12 +21,15 @@
  */
 package org.jboss.cache.loader;
 
-import org.testng.annotations.Test;
-import org.testng.annotations.AfterMethod;
-import org.jboss.cache.Cache;
+import org.jboss.cache.CacheSPI;
 import org.jboss.cache.DefaultCacheFactory;
-import org.jboss.cache.CacheSPI;
 import org.jboss.cache.Fqn;
+import org.jboss.cache.config.CacheLoaderConfig;
+import org.jboss.cache.config.Configuration;
+import org.jboss.cache.config.Configuration.CacheMode;
+import org.jboss.cache.transaction.GenericTransactionManagerLookup;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.Test;
 
 /**
  * UT for testing JDBCCacheLoader during state transfer.
@@ -34,7 +37,7 @@
  * @since 3.0
  */
 @Test(groups = "functional")
-public class JDBCCacheLoaderStateTransferTest
+public class JDBCCacheLoaderStateTransferTest extends AbstractCacheLoaderTestBase
 {
 
    CacheSPI first;
@@ -47,14 +50,40 @@
       if (second != null) second.stop();
    }
 
+   private Configuration getConfiguration(int instance) throws Exception
+   {
+      Configuration c = new Configuration();
+      c.setTransactionManagerLookupClass(GenericTransactionManagerLookup.class.getName());
+      CacheLoaderConfig clc = getSingleCacheLoaderConfig("/", JDBCCacheLoader.class.getName(), "cache.jdbc.table.name=jbosscache\n" +
+            "            cache.jdbc.table.create=true\n" +
+            "            cache.jdbc.table.drop=true\n" +
+            "            cache.jdbc.table.primarykey=jbosscache_pk\n" +
+            "            cache.jdbc.fqn.column=fqn\n" +
+            "            cache.jdbc.fqn.type=varchar(255)\n" +
+            "            cache.jdbc.node.column=node\n" +
+            "            cache.jdbc.node.type=blob\n" +
+            "            cache.jdbc.parent.column=parent\n" +
+            "            cache.jdbc.sql-concat=1 || 2\n" +
+            "            cache.jdbc.driver = org.apache.derby.jdbc.EmbeddedDriver\n" +
+            "            cache.jdbc.url=jdbc:derby:jbossdb"+instance+";create=true\n" +
+            "            cache.jdbc.user=user1\n" +
+            "            cache.jdbc.password=user1\n" +
+            "            cache.jdbc.batch.enable=true\n" +
+            "            cache.jdbc.batch.size=1000", false, true, false);
+      clc.setPassivation(false);
+      clc.getFirstCacheLoaderConfig().setPurgeOnStartup(true);      
+      c.setCacheLoaderConfig(clc);
+      c.setCacheMode(CacheMode.REPL_SYNC);
+      return c;
+   }
+
    public void testSimpleStateTransfer() throws Exception
    {
-      first = (CacheSPI) new DefaultCacheFactory().createCache("configs/repl-with-cl.xml");
+      first = (CacheSPI) new DefaultCacheFactory().createCache(getConfiguration(0));
       first.put("/a/b/c", "key", "value");
       first.put("/a/b/d", "key", "value");
       first.put("/a/b/e", "key", "value");
-
-      second = (CacheSPI) new DefaultCacheFactory().createCache("configs/repl-with-cl2.xml");
+      second = (CacheSPI) new DefaultCacheFactory().createCache(getConfiguration(2));
       assert second.get("/a/b/c","key").equals("value");
       assert second.get("/a/b/d","key").equals("value");
       assert second.get("/a/b/e","key").equals("value");
@@ -64,10 +93,11 @@
    }
 
 
-   public void testMoreState()
+   public void testMoreState() throws Exception
    {
       long startTime = System.currentTimeMillis();
-      first = (CacheSPI) new DefaultCacheFactory().createCache("configs/repl-with-cl.xml");
+
+      first = (CacheSPI) new DefaultCacheFactory().createCache(getConfiguration(0));
       long cacheStartTime = System.currentTimeMillis() - startTime;
       System.out.println("cacheStartTime = " + cacheStartTime);
       for (int i = 0; i < 5012; i++)
@@ -76,7 +106,7 @@
          if (i%1000 == 0) System.out.println(i + " operations executed so far");
       }
       startTime = System.currentTimeMillis();
-      second = (CacheSPI) new DefaultCacheFactory().createCache("configs/repl-with-cl2.xml");
+      second = (CacheSPI) new DefaultCacheFactory().createCache(getConfiguration(2));
 
       long stateTranferTime = System.currentTimeMillis() - startTime - cacheStartTime;
       for (int i = 0; i < 5012; i+=100)

Modified: core/trunk/src/test/resources/configs/buddy-replication-cache.xml
===================================================================
--- core/trunk/src/test/resources/configs/buddy-replication-cache.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/buddy-replication-cache.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -4,8 +4,19 @@
       xmlns="urn:jboss:jbosscache-core:config:3.0">
    <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval timeout="20000"/>
-   <transport clusterName="JBossCache-Cluster">
+   <clustering clusterName="JBossCache-Cluster">
+      <sync replTimeout="15000"/>
+
+      <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
+         <dataGravitation auto="false" removeOnFind="true" searchBackupTrees="true"/>
+         <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
+            <properties>
+               numBuddies = 1
+               ignoreColocatedBuddies = true
+            </properties>
+         </locator>
+      </buddy>
+      <stateRetrieval timeout="20000"/>
       <jgroupsConfig>
          <TCP recv_buf_size="20000000" use_send_queues="false" loopback="false" discard_incompatible_packets="true"
               max_bundle_size="64000" max_bundle_timeout="30" use_incoming_packet_handler="true" enable_bundling="true"
@@ -31,17 +42,5 @@
          <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
          <pbcast.FLUSH timeout="0"/>
       </jgroupsConfig>
-   </transport>
-   <replication>
-      <sync replTimeout="15000"/>
-      <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
-         <dataGravitation auto="false" removeOnFind="true" searchBackupTrees="true"/>
-         <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
-            <properties>
-               numBuddies = 1
-               ignoreColocatedBuddies = true
-            </properties>
-         </locator>
-      </buddy>
-   </replication>
+   </clustering>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/clonable-config.xml
===================================================================
--- core/trunk/src/test/resources/configs/clonable-config.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/clonable-config.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xmlns="urn:jboss:jbosscache-core:config:3.0">
    <locking isolationLevel="SERIALIZABLE" lockAcquisitionTimeout="1" nodeLockingScheme="optimistic"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval fetchInMemoryState="false" timeout="3"/>
-   <transport clusterName="CloneCluster" multiplexerStack="udp">
-      <jgroupsConfig>
+   <clustering clusterName="CloneCluster">
+      <stateRetrieval fetchInMemoryState="false" timeout="3"/>
+      <jgroupsConfig multiplexerStack="udp">
          <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"
@@ -31,8 +31,6 @@
          <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
          <pbcast.FLUSH timeout="0"/>
       </jgroupsConfig>
-   </transport>
-   <replication>
       <sync replTimeout="2"/>
       <buddy enabled="true" poolName="cloneGroup" communicationTimeout="7">
          <dataGravitation auto="false" removeOnFind="true" searchBackupTrees="true"/>
@@ -43,22 +41,23 @@
             </properties>
          </locator>
       </buddy>
-   </replication>
+
+   </clustering>
    <eviction wakeUpInterval="45000">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="4">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
-         <attribute name="maxAge">15000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
+         <property name="maxAge" value="15000" />
       </default>
       <region name="/fifo" algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm">
-         <attribute name="maxNodes">5000</attribute>
+         <property name="maxNodes" value="5000" />
       </region>
       <region name="/mru" algorithmClass="org.jboss.cache.eviction.MRUAlgorithm">
-         <attribute name="maxNodes">10000</attribute>
+         <property name="maxNodes" value="10000" />
       </region>
       <region name="/lfu" algorithmClass="org.jboss.cache.eviction.LFUAlgorithm">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="minNodes">4000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="minNodes" value="4000" />
       </region>
    </eviction>
    <loaders passivation="false" shared="true">

Modified: core/trunk/src/test/resources/configs/conf2x/clonable-config.xml
===================================================================
--- core/trunk/src/test/resources/configs/conf2x/clonable-config.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/conf2x/clonable-config.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -22,67 +22,8 @@
 
       <attribute name="ClusterName">CloneCluster</attribute>
 
-      <!-- Use both a stack name and a ClusterConfig so we can test both -->
       <attribute name="MultiplexerStack">udp</attribute>
-      <attribute name="ClusterConfig">
-         <config>
-            <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="false"
-                 enable_diagnostics="true"
 
-                 use_concurrent_stack="true"
-
-                 thread_naming_pattern="pl"
-
-                 thread_pool.enabled="true"
-                 thread_pool.min_threads="1"
-                 thread_pool.max_threads="25"
-                 thread_pool.keep_alive_time="30000"
-                 thread_pool.queue_enabled="true"
-                 thread_pool.queue_max_size="10"
-                 thread_pool.rejection_policy="Run"
-
-                 oob_thread_pool.enabled="true"
-                 oob_thread_pool.min_threads="1"
-                 oob_thread_pool.max_threads="4"
-                 oob_thread_pool.keep_alive_time="10000"
-                 oob_thread_pool.queue_enabled="true"
-                 oob_thread_pool.queue_max_size="10"
-                 oob_thread_pool.rejection_policy="Run"/>
-
-            <PING timeout="2000" num_initial_members="3"/>
-            <MERGE2 max_interval="30000" min_interval="10000"/>
-            <FD_SOCK/>
-            <FD timeout="10000" max_tries="5" shun="true"/>
-            <VERIFY_SUSPECT timeout="1500"/>
-            <pbcast.NAKACK
-                  use_mcast_xmit="false" gc_lag="0"
-                  retransmit_timeout="300,600,1200,2400,4800"
-                  discard_delivered_msgs="true"/>
-            <UNICAST timeout="300,600,1200,2400,3600"/>
-            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
-                           max_bytes="400000"/>
-            <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false"
-                        view_bundling="true" view_ack_collection_timeout="5000"/>
-            <FRAG2 frag_size="60000"/>
-            <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-            <!-- <pbcast.STATE_TRANSFER/> -->
-            <pbcast.FLUSH timeout="0"/>
-         </config>
-      </attribute>
-
       <attribute name="FetchInMemoryState">false</attribute>
       <attribute name="StateRetrievalTimeout">3</attribute>
       <attribute name="SyncReplTimeout">2</attribute>

Modified: core/trunk/src/test/resources/configs/conf2x/multiplexer-enabled-cache.xml
===================================================================
--- core/trunk/src/test/resources/configs/conf2x/multiplexer-enabled-cache.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/conf2x/multiplexer-enabled-cache.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -54,66 +54,6 @@
       <depends>jgroups.mux:name=Multiplexer</depends>
       <attribute name="MultiplexerStack">fc-fast-minimalthreads</attribute>
 
-      <!-- JGroups protocol stack properties.
-         ClusterConfig isn't used if the multiplexer is enabled and successfully initialized.
-      -->
-      <attribute name="ClusterConfig">
-         <config>
-            <TCP recv_buf_size="20000000" use_send_queues="false"
-                 loopback="false"
-                 discard_incompatible_packets="true"
-                 max_bundle_size="64000"
-                 max_bundle_timeout="30"
-                 use_incoming_packet_handler="true"
-                 enable_bundling="true"
-                 enable_unicast_bundling="true"
-                 enable_diagnostics="true"
-
-                 use_concurrent_stack="true"
-
-                 thread_naming_pattern="pl"
-
-                 thread_pool.enabled="true"
-                 thread_pool.min_threads="1"
-                 thread_pool.max_threads="4"
-                 thread_pool.keep_alive_time="30000"
-                 thread_pool.queue_enabled="true"
-                 thread_pool.queue_max_size="50000"
-                 thread_pool.rejection_policy="discard"
-
-                 oob_thread_pool.enabled="true"
-                 oob_thread_pool.min_threads="2"
-                 oob_thread_pool.max_threads="4"
-                 oob_thread_pool.keep_alive_time="10000"
-                 oob_thread_pool.queue_enabled="false"
-                 oob_thread_pool.queue_max_size="10"
-                 oob_thread_pool.rejection_policy="Run"/>
-
-            <!--<PING timeout="2000" num_initial_members="3"/>-->
-            <MPING mcast_addr="232.1.2.3" timeout="2000" num_initial_members="3"/>
-            <MERGE2 max_interval="30000" min_interval="10000"/>
-            <FD_SOCK/>
-            <FD timeout="10000" max_tries="5" shun="true"/>
-            <VERIFY_SUSPECT timeout="1500"/>
-            <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0"
-                           retransmit_timeout="300,600,1200,2400,4800"
-                           discard_delivered_msgs="true"/>
-            <!--<UNICAST timeout="30,60,120,300,600,1200,2400,3600"/>-->
-            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
-                           max_bytes="400000"/>
-            <pbcast.GMS print_local_addr="true" join_timeout="5000"
-                        join_retry_timeout="2000" shun="false"
-                        view_bundling="true" view_ack_collection_timeout="5000"/>
-            <FC max_credits="5000000"
-                min_threshold="0.20"/>
-            <FRAG2 frag_size="60000"/>
-            <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-            <!-- <pbcast.STATE_TRANSFER/> -->
-            <pbcast.FLUSH timeout="0"/>
-         </config>
-      </attribute>
-
-
       <!--
           The max amount of time (in milliseconds) we wait until the
           state (ie. the contents of the cache) are retrieved from

Modified: core/trunk/src/test/resources/configs/conf2x/optimistically-locked-cache.xml
===================================================================
--- core/trunk/src/test/resources/configs/conf2x/optimistically-locked-cache.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/conf2x/optimistically-locked-cache.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -52,7 +52,8 @@
                            REPL_ASYNC
                            REPL_SYNC
       -->
-      <attribute name="CacheMode">LOCAL</attribute>
+      <attribute name="CacheMode">REPL_ASYNC</attribute>
+      <attribute name="UseReplicationQueue">true</attribute>
 
       <!-- Max number of milliseconds to wait for a lock acquisition -->
       <attribute name="LockAcquisitionTimeout">10000</attribute>

Modified: core/trunk/src/test/resources/configs/conf2x/policyPerRegion-eviction.xml
===================================================================
--- core/trunk/src/test/resources/configs/conf2x/policyPerRegion-eviction.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/conf2x/policyPerRegion-eviction.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -39,12 +39,12 @@
                            REPL_ASYNC
                            REPL_SYNC
       -->
-      <attribute name="CacheMode">LOCAL</attribute>
+      <attribute name="CacheMode">REPL_SYNC</attribute>
 
       <!-- Name of cluster. Needs to be the same for all TreeCache nodes in a
            cluster in order to find each other.
       -->
-      <attribute name="ClusterName">JBossCache-Cluster</attribute>
+      <attribute name="ClusterName">JBossCache-Cluster123</attribute>
 
       <!--Uncomment next three statements to enable JGroups multiplexer.
 This configuration is dependent on the JGroups multiplexer being

Modified: core/trunk/src/test/resources/configs/local-lru-eviction.xml
===================================================================
--- core/trunk/src/test/resources/configs/local-lru-eviction.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/local-lru-eviction.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -4,29 +4,31 @@
 
    <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval timeout="20000"/>
-   <transport clusterName="JBossCache-Cluster"/>
+   <clustering clusterName="JBossCache-Cluster">
+      <stateRetrieval timeout="20000"/>
+   </clustering>
+
    <eviction wakeUpInterval="5000">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </default>
       <region name="/org/jboss/data">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </region>
       <region name="/org/jboss/test/data">
-         <attribute name="maxNodes">5</attribute>
-         <attribute name="timeToLive">4000</attribute>
+         <property name="maxNodes" value="5" />
+         <property name="timeToLive" value="4000" />
       </region>
       <region name="/test">
-         <attribute name="maxNodes">10000</attribute>
-         <attribute name="timeToLive">4000</attribute>
+         <property name="maxNodes" value="10000" />
+         <property name="timeToLive" value="4000" />
       </region>
       <region name="/maxAgeTest">
-         <attribute name="maxNodes">10000</attribute>
-         <attribute name="timeToLive">8000</attribute>
-         <attribute name="maxAge">10000</attribute>
+         <property name="maxNodes" value="10000" />
+         <property name="timeToLive" value="8000" />
+         <property name="maxAge" value="10000" />
       </region>
    </eviction>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/local-passivation.xml
===================================================================
--- core/trunk/src/test/resources/configs/local-passivation.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/local-passivation.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -4,16 +4,14 @@
 
    <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval timeout="20000"/>
-   <transport clusterName="JBossCache-Cluster"/>
    <eviction wakeUpInterval="1000">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000" />
       </default>
       <region name="/org/jboss/test/data">
-         <attribute name="maxNodes">100</attribute>
-         <attribute name="timeToLive">1000</attribute>
+         <property name="maxNodes" value="100" />
+         <property name="timeToLive" value="1000" />
       </region>
    </eviction>
    <loaders passivation="true" shared="false">

Modified: core/trunk/src/test/resources/configs/local-tx.xml
===================================================================
--- core/trunk/src/test/resources/configs/local-tx.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/local-tx.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -5,20 +5,18 @@
    <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
    <serialization useRegionBasedMarshalling="false"/>
-   <stateRetrieval timeout="20000"/>
-   <transport clusterName="JBossCache-Cluster"/>
    <eviction wakeUpInterval="5000">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </default>
       <region name="/org/jboss/data">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </region>
       <region name="/org/jboss/test/data">
-         <attribute name="maxNodes">5</attribute>
-         <attribute name="timeToLive">4000</attribute>
+         <property name="maxNodes" value="5" />
+         <property name="timeToLive" value="4000" />
       </region>
    </eviction>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/mixedPolicy-eviction.xml
===================================================================
--- core/trunk/src/test/resources/configs/mixedPolicy-eviction.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/mixedPolicy-eviction.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -4,51 +4,26 @@
 
    <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval timeout="20000"/>
-   <transport clusterName="JBossCache-Cluster">
-      <jgroupsConfig>
-         <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="false" enable_diagnostics="true"
-              use_concurrent_stack="true" thread_naming_pattern="pl" thread_pool.enabled="true"
-              thread_pool.min_threads="1" thread_pool.max_threads="25" thread_pool.keep_alive_time="30000"
-              thread_pool.queue_enabled="true" thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run"
-              oob_thread_pool.enabled="true" oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="4"
-              oob_thread_pool.keep_alive_time="10000" oob_thread_pool.queue_enabled="true"
-              oob_thread_pool.queue_max_size="10" oob_thread_pool.rejection_policy="Run"/>
-         <PING timeout="2000" num_initial_members="3"/>
-         <MERGE2 max_interval="30000" min_interval="10000"/>
-         <FD_SOCK/>
-         <FD timeout="10000" max_tries="5" shun="true"/>
-         <VERIFY_SUSPECT timeout="1500"/>
-         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800"
-                        discard_delivered_msgs="true"/>
-         <UNICAST timeout="300,600,1200,2400,3600"/>
-         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="400000"/>
-         <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false" view_bundling="true"
-                     view_ack_collection_timeout="5000"/>
-         <FC max_credits="20000000" min_threshold="0.10"/>
-         <FRAG2 frag_size="60000"/>
-         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-         <pbcast.FLUSH timeout="0"/>
-      </jgroupsConfig>
-   </transport>
+   <clustering>
+      <stateRetrieval timeout="20000"/>
+      <jgroupsConfig configFile="udp.xml" />
+   </clustering>
+   
    <eviction wakeUpInterval="5000">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </default>
       <region name="/org/jboss/data" algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm">
-         <attribute name="maxNodes">5000</attribute>
+         <property name="maxNodes" value="5000" />
       </region>
       <region name="/test/" algorithmClass="org.jboss.cache.eviction.MRUAlgorithm">
-         <attribute name="maxNodes">10000</attribute>
+         <property name="maxNodes" value="10000" />
       </region>
       <region name="/maxAgeTest/">
-         <attribute name="maxNodes">10000</attribute>
-         <attribute name="timeToLive">8000</attribute>
-         <attribute name="maxAge">10000</attribute>
+         <property name="maxNodes" value="10000" />
+         <property name="timeToLive" value="8000" />
+         <property name="maxAge" value="10000" />
       </region>
    </eviction>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/mux.xml
===================================================================
--- core/trunk/src/test/resources/configs/mux.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/mux.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xmlns="urn:jboss:jbosscache-core:config:3.0">
-
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000"/>
+<jbosscache  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval timeout="20000"/>
-   <transport clusterName="JBossCache-Cluster" multiplexerStack="tcp"/>
+   <clustering>
+      <stateRetrieval timeout="20000"/>
+      <jgroupsConfig multiplexerStack="tcp"/>
+   </clustering>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/mvcc-repl-sync-br.xml
===================================================================
--- core/trunk/src/test/resources/configs/mvcc-repl-sync-br.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/mvcc-repl-sync-br.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <jbosscache xmlns="urn:jboss:jbosscache-core:config:3.0">
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000" nodeLockingScheme="mvcc"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval timeout="20000" fetchInMemoryState="false"/>
-   <transport clusterName="JBossCache-Cluster">
+   <clustering>
+      <stateRetrieval fetchInMemoryState="false"/>
       <jgroupsConfig>
          <TCP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="false"
               enable_unicast_bundling="false" loopback="false" max_bundle_size="64000" max_bundle_timeout="30"
@@ -29,8 +28,6 @@
          <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
          <pbcast.FLUSH timeout="0"/>
       </jgroupsConfig>
-   </transport>
-   <replication>
       <async/>
       <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
          <dataGravitation auto="false" removeOnFind="true" searchBackupTrees="true"/>
@@ -41,5 +38,5 @@
             </properties>
          </locator>
       </buddy>
-   </replication>
+   </clustering>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/parser-test-async.xml
===================================================================
--- core/trunk/src/test/resources/configs/parser-test-async.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/parser-test-async.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -12,12 +12,20 @@
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"
                 syncRollbackPhase="true" syncCommitPhase="true"/>
 
+   <jmxStatistics enabled="false"/>
+
+   <startup regionsInactiveOnStartup="true"/>
+   <shutdown hookBehavior="REGISTER"/>
+   <listeners asyncPoolSize="5"/>
+   <invocationBatching enabled="true"/>
+
    <!-- serialization related configuration, used for replication and cache loading -->
    <serialization objectInputStreamPoolSize="12" objectOutputStreamPoolSize="14" version="1.2.4"
                   marshallerClass="some.Clazz" useLazyDeserialization="true" useRegionBasedMarshalling="true"/>
 
-   <replication>
+   <clustering mode="replication" clusterName="JBossCache-cluster">
       <async useReplQueue="false" serializationExecutorPoolSize="250"/>
+      <stateRetrieval timeout="15124" fetchInMemoryState="true"/>
       <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
          <dataGravitation auto="true" removeOnFind="true" searchBackupTrees="true"/>
          <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
@@ -27,13 +35,6 @@
             </properties>
          </locator>
       </buddy>
-   </replication>
-
-   <stateRetrieval timeout="15124" fetchInMemoryState="true"/>
-   <startup regionsInactiveOnStartup="true"/>
-   <shutdown hookBehavior="REGISTER"/>
-
-   <transport clusterName="JBossCache-Cluster" multiplexerStack="file_name">
       <jgroupsConfig>
          <PING timeout="2000" num_initial_members="3"/>
          <MERGE2 max_interval="30000" min_interval="10000"/>
@@ -53,22 +54,19 @@
          <!-- <pbcast.STATE_TRANSFER/> -->
          <pbcast.FLUSH timeout="0"/>
       </jgroupsConfig>
-   </transport>
+   </clustering>
 
-
-   <jmxStatistics enabled="false"/>
-
    <eviction wakeUpInterval="5">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000" />
       </default>
       <region name="/org/jboss/data">
-         <attribute name="timeToLive">1002</attribute>
+         <property name="timeToLive" value="1002" />
       </region>
       <region name="/org/jboss/xyz" algorithmClass="org.jboss.cache.eviction.MRUAlgorithm" eventQueueSize="21">
-         <attribute name="maxNodes">2103</attribute>
-         <attribute name="minTimeToLive">22</attribute>
+         <property name="maxNodes" value="2103" />
+         <property name="minTimeToLive" value="22" />
       </region>
    </eviction>
 
@@ -99,9 +97,8 @@
    <!-- this is new behavior added within 3.x only. it support configuring custom interceptors through configurations -->
    <customInterceptors>
       <interceptor position="first" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor">
-         <attribute name="attrOne">value1</attribute>
-         <attribute name="attrTwo">value2</attribute>
-         <attribute name="attrThree">value3</attribute>
+         <property name="attrOne" value="value1" />
+         <property name="attrTwo" value="value2" />
       </interceptor>
       <interceptor position="last" class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
       <interceptor index="3" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
@@ -112,6 +109,4 @@
    </customInterceptors>
 
    <!-- the number of threads to use for asynchronous cache listeners - defaults to 1 -->
-   <listeners asyncPoolSize="5"/>
-   <invocationBatching enabled="true"/>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/parser-test.xml
===================================================================
--- core/trunk/src/test/resources/configs/parser-test.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/parser-test.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -12,12 +12,19 @@
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"
                 syncRollbackPhase="true" syncCommitPhase="true"/>
 
+   <jmxStatistics enabled="false"/>
+
+   <startup regionsInactiveOnStartup="true"/>
+   <shutdown hookBehavior="REGISTER"/>
+   <listeners asyncPoolSize="5"/>
+   <invocationBatching enabled="true"/>
+
    <!-- serialization related configuration, used for replication and cache loading -->
    <serialization objectInputStreamPoolSize="12" objectOutputStreamPoolSize="14" version="1.2.4"
                   marshallerClass="some.Clazz" useLazyDeserialization="true" useRegionBasedMarshalling="true"/>
 
-   <replication>
-      <sync replTimeout="15421"/>
+   <clustering mode="replication" clusterName="JBossCache-cluster">
+      <stateRetrieval timeout="15124" fetchInMemoryState="true"/>
       <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
          <dataGravitation auto="true" removeOnFind="true" searchBackupTrees="true"/>
          <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
@@ -27,48 +34,21 @@
             </properties>
          </locator>
       </buddy>
-   </replication>
+      <sync replTimeout="15421"/>  
+      <jgroupsConfig multiplexerStack="file_name" />
+   </clustering>
 
-   <stateRetrieval timeout="15124" fetchInMemoryState="true"/>
-   <startup regionsInactiveOnStartup="true"/>
-   <shutdown hookBehavior="REGISTER"/>
-
-   <transport clusterName="JBossCache-Cluster" multiplexerStack="file_name">
-      <jgroupsConfig>
-         <PING timeout="2000" num_initial_members="3"/>
-         <MERGE2 max_interval="30000" min_interval="10000"/>
-         <FD_SOCK/>
-         <FD timeout="10000" max_tries="5" shun="true"/>
-         <VERIFY_SUSPECT timeout="1500"/>
-         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0"
-                        retransmit_timeout="300,600,1200,2400,4800"
-                        discard_delivered_msgs="true"/>
-         <UNICAST timeout="300,600,1200,2400,3600"/>
-         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
-                        max_bytes="400000"/>
-         <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false"
-                     view_bundling="true" view_ack_collection_timeout="5000"/>
-         <FRAG2 frag_size="60000"/>
-         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-         <!-- <pbcast.STATE_TRANSFER/> -->
-         <pbcast.FLUSH timeout="0"/>
-      </jgroupsConfig>
-   </transport>
-
-
-   <jmxStatistics enabled="false"/>
-
    <eviction wakeUpInterval="5">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000" />
       </default>
       <region name="/org/jboss/data">
-         <attribute name="timeToLive">1002</attribute>
+         <property name="timeToLive" value="1002" />
       </region>
       <region name="/org/jboss/xyz" algorithmClass="org.jboss.cache.eviction.MRUAlgorithm" eventQueueSize="21">
-         <attribute name="maxNodes">2103</attribute>
-         <attribute name="minTimeToLive">22</attribute>
+         <property name="maxNodes" value="2103" />
+         <property name="minTimeToLive" value="22" />
       </region>
    </eviction>
 
@@ -99,9 +79,8 @@
    <!-- this is new behavior added within 3.x only. it support configuring custom interceptors through configurations -->
    <customInterceptors>
       <interceptor position="first" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor">
-         <attribute name="attrOne">value1</attribute>
-         <attribute name="attrTwo">value2</attribute>
-         <attribute name="attrThree">value3</attribute>
+         <property name="attrOne" value="value1" />
+         <property name="attrTwo" value="value2" />
       </interceptor>
       <interceptor position="last" class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
       <interceptor index="3" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
@@ -112,6 +91,4 @@
    </customInterceptors>
 
    <!-- the number of threads to use for asynchronous cache listeners - defaults to 1 -->
-   <listeners asyncPoolSize="5"/>
-   <invocationBatching enabled="true"/>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/policyPerRegion-eviction.xml
===================================================================
--- core/trunk/src/test/resources/configs/policyPerRegion-eviction.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/policyPerRegion-eviction.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,58 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xmlns="urn:jboss:jbosscache-core:config:3.0">
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000"/>
+<jbosscache  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-   <stateRetrieval timeout="20000"/>
-   <transport clusterName="JBossCache-Cluster">
-      <jgroupsConfig>
-         <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="false" enable_diagnostics="true"
-              use_concurrent_stack="true" thread_naming_pattern="pl" thread_pool.enabled="true"
-              thread_pool.min_threads="1" thread_pool.max_threads="25" thread_pool.keep_alive_time="30000"
-              thread_pool.queue_enabled="true" thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run"
-              oob_thread_pool.enabled="true" oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="4"
-              oob_thread_pool.keep_alive_time="10000" oob_thread_pool.queue_enabled="true"
-              oob_thread_pool.queue_max_size="10" oob_thread_pool.rejection_policy="Run"/>
-         <PING timeout="2000" num_initial_members="3"/>
-         <MERGE2 max_interval="30000" min_interval="10000"/>
-         <FD_SOCK/>
-         <FD timeout="10000" max_tries="5" shun="true"/>
-         <VERIFY_SUSPECT timeout="1500"/>
-         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800"
-                        discard_delivered_msgs="true"/>
-         <UNICAST timeout="300,600,1200,2400,3600"/>
-         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="400000"/>
-         <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false" view_bundling="true"
-                     view_ack_collection_timeout="5000"/>
-         <FC max_credits="20000000" min_threshold="0.10"/>
-         <FRAG2 frag_size="60000"/>
-         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-         <pbcast.FLUSH timeout="0"/>
-      </jgroupsConfig>
-   </transport>
-   
+   <clustering clusterName="JBossCache-Cluster123" />
    <eviction wakeUpInterval="5000">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000000" />
       </default>
       <region name="/org/jboss/data" algorithmClass="org.jboss.cache.eviction.LFUAlgorithm">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="minNodes">1000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="minNodes" value="1000" />
       </region>
       <region name="/org/jboss/test/data" algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm">
-         <attribute name="maxNodes">5</attribute>
+         <property name="maxNodes" value="5" />
       </region>
       <region name="/test/" algorithmClass="org.jboss.cache.eviction.MRUAlgorithm">
-         <attribute name="maxNodes">10000</attribute>
+         <property name="maxNodes" value="10000" />
       </region>
       <region name="/maxAgeTest/" algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-         <attribute name="maxNodes">10000</attribute>
-         <attribute name="timeToLive">8000</attribute>
-         <attribute name="maxAge">10000</attribute>
+         <property name="maxNodes" value="10000" />
+         <property name="timeToLive" value="8000" />
+         <property name="maxAge" value="10000" />
       </region>
    </eviction>
 </jbosscache>

Deleted: core/trunk/src/test/resources/configs/repl-with-cl.xml
===================================================================
--- core/trunk/src/test/resources/configs/repl-with-cl.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/repl-with-cl.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
-
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="mvcc"/>
-   
-   <!-- Configure the TransactionManager -->
-   <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-
-   <transport clusterName="JBossCache-Cluster">
-      <jgroupsConfig>
-         <TCP recv_buf_size="20000000" use_send_queues="false" loopback="false" discard_incompatible_packets="true"
-              max_bundle_size="64000" max_bundle_timeout="30" use_incoming_packet_handler="true" enable_bundling="true"
-              enable_unicast_bundling="true" enable_diagnostics="true" use_concurrent_stack="true"
-              thread_naming_pattern="pl" thread_pool.enabled="true" thread_pool.min_threads="1"
-              thread_pool.max_threads="4" thread_pool.keep_alive_time="30000" thread_pool.queue_enabled="true"
-              thread_pool.queue_max_size="50000" thread_pool.rejection_policy="discard" oob_thread_pool.enabled="true"
-              oob_thread_pool.min_threads="2" oob_thread_pool.max_threads="4" oob_thread_pool.keep_alive_time="10000"
-              oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="10"
-              oob_thread_pool.rejection_policy="Run"/>
-         <MPING mcast_addr="232.1.2.3" timeout="2000" num_initial_members="3"/>
-         <MERGE2 max_interval="30000" min_interval="10000"/>
-         <FD_SOCK/>
-         <FD timeout="10000" max_tries="5" shun="true"/>
-         <VERIFY_SUSPECT timeout="1500"/>
-         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800"
-                        discard_delivered_msgs="true"/>
-         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="400000"/>
-         <pbcast.GMS print_local_addr="true" join_timeout="5000" join_retry_timeout="2000" shun="false"
-                     view_bundling="true" view_ack_collection_timeout="5000"/>
-         <FC max_credits="5000000" min_threshold="0.20"/>
-         <FRAG2 frag_size="60000"/>
-         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-         <pbcast.FLUSH timeout="0"/>
-      </jgroupsConfig>
-   </transport>
-   
-
-   <!-- Cache Passivation for Tree Cache
-   On passivation, The objects are written to the backend store on eviction if passivation
-   is true, otherwise the objects are persisted. On activation, the objects are restored in
-   the memory cache and removed from the cache loader if 'passivation' attribute is true,
-   otherwise the objects are only loaded from the cache loader -->
-   <loaders passivation="false" shared="false">
-      <preload>
-         <node fqn="/"/>
-      </preload>
-      <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
-      <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
-              ignoreModifications="false" purgeOnStartup="true">
-         <properties>
-            cache.jdbc.table.name=jbosscache
-            cache.jdbc.table.create=true
-            cache.jdbc.table.drop=true
-            cache.jdbc.table.primarykey=jbosscache_pk
-            cache.jdbc.fqn.column=fqn
-            cache.jdbc.fqn.type=varchar(255)
-            cache.jdbc.node.column=node
-            cache.jdbc.node.type=blob
-            cache.jdbc.parent.column=parent
-            cache.jdbc.sql-concat=1 || 2
-            cache.jdbc.driver = org.apache.derby.jdbc.EmbeddedDriver
-            cache.jdbc.url=jdbc:derby:jbossdb;create=true
-            cache.jdbc.user=user1
-            cache.jdbc.password=user1
-         </properties>
-      </loader>
-   </loaders>
-   <replication>
-      <sync replTimeout="30000"/>
-   </replication>
-   
-</jbosscache>

Deleted: core/trunk/src/test/resources/configs/repl-with-cl2.xml
===================================================================
--- core/trunk/src/test/resources/configs/repl-with-cl2.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/repl-with-cl2.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
-
-   <!--
-       isolationLevel :   SERIALIZABLE - (not supported in mvcc)
-                            REPEATABLE_READ (default)
-                            READ_COMMITTED
-                            READ_UNCOMMITTED (not supported in mvcc)
-                            NONE
-       lockAcquisitionTimeout: max number of milliseconds to wait for a lock acquisition
-       nodeLockingScheme : mvcc (default)
-                           optimistic
-                           pessimistic
-   -->
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="mvcc"/>
-
-   <!-- Configure the TransactionManager -->
-   <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
-
-   <transport clusterName="JBossCache-Cluster">
-      <jgroupsConfig>
-         <TCP recv_buf_size="20000000" use_send_queues="false" loopback="false" discard_incompatible_packets="true"
-              max_bundle_size="64000" max_bundle_timeout="30" use_incoming_packet_handler="true" enable_bundling="true"
-              enable_unicast_bundling="true" enable_diagnostics="true" use_concurrent_stack="true"
-              thread_naming_pattern="pl" thread_pool.enabled="true" thread_pool.min_threads="1"
-              thread_pool.max_threads="4" thread_pool.keep_alive_time="30000" thread_pool.queue_enabled="true"
-              thread_pool.queue_max_size="50000" thread_pool.rejection_policy="discard" oob_thread_pool.enabled="true"
-              oob_thread_pool.min_threads="2" oob_thread_pool.max_threads="4" oob_thread_pool.keep_alive_time="10000"
-              oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="10"
-              oob_thread_pool.rejection_policy="Run"/>
-         <MPING mcast_addr="232.1.2.3" timeout="2000" num_initial_members="3"/>
-         <MERGE2 max_interval="30000" min_interval="10000"/>
-         <FD_SOCK/>
-         <FD timeout="10000" max_tries="5" shun="true"/>
-         <VERIFY_SUSPECT timeout="1500"/>
-         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800"
-                        discard_delivered_msgs="true"/>
-         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="400000"/>
-         <pbcast.GMS print_local_addr="true" join_timeout="5000" join_retry_timeout="2000" shun="false"
-                     view_bundling="true" view_ack_collection_timeout="5000"/>
-         <FC max_credits="5000000" min_threshold="0.20"/>
-         <FRAG2 frag_size="60000"/>
-         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-         <pbcast.FLUSH timeout="0"/>
-      </jgroupsConfig>
-   </transport>
-
-   <stateRetrieval fetchInMemoryState="false" timeout="0"/>
-   
-
-   <!-- Cache Passivation for Tree Cache
-   On passivation, The objects are written to the backend store on eviction if passivation
-   is true, otherwise the objects are persisted. On activation, the objects are restored in
-   the memory cache and removed from the cache loader if 'passivation' attribute is true,
-   otherwise the objects are only loaded from the cache loader -->
-   <loaders passivation="false" shared="false">
-      <preload>
-         <node fqn="/"/>
-      </preload>
-      <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
-      <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
-              ignoreModifications="false" purgeOnStartup="true">
-         <properties>
-            cache.jdbc.table.name=jbosscache
-            cache.jdbc.table.create=true
-            cache.jdbc.table.drop=true
-            cache.jdbc.table.primarykey=jbosscache_pk
-            cache.jdbc.fqn.column=fqn
-            cache.jdbc.fqn.type=varchar(255)
-            cache.jdbc.node.column=node
-            cache.jdbc.node.type=blob
-            cache.jdbc.parent.column=parent
-            cache.jdbc.sql-concat=1 || 2
-            cache.jdbc.driver = org.apache.derby.jdbc.EmbeddedDriver
-            cache.jdbc.url=jdbc:derby:jbossdb2;create=true
-            cache.jdbc.user=user1
-            cache.jdbc.password=user1
-            cache.jdbc.batch.enable=true
-            cache.jdbc.batch.size=1000
-         </properties>
-      </loader>
-   </loaders>
-
-   <replication>
-      <sync replTimeout="30000"/>
-   </replication>
-</jbosscache>

Modified: core/trunk/src/test/resources/configs/replSync.xml
===================================================================
--- core/trunk/src/test/resources/configs/replSync.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/replSync.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,40 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xmlns="urn:jboss:jbosscache-core:config:3.0">
-   <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000"/>
+<jbosscache  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
+
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
    <serialization useRegionBasedMarshalling="true"/>
-   <stateRetrieval fetchInMemoryState="true" timeout="15000"/>
-   <transport clusterName="JBossCache-Cluster">
-      <jgroupsConfig>
-         <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="false" enable_diagnostics="true"
-              use_concurrent_stack="true" thread_naming_pattern="pl" thread_pool.enabled="true"
-              thread_pool.min_threads="1" thread_pool.max_threads="25" thread_pool.keep_alive_time="30000"
-              thread_pool.queue_enabled="true" thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run"
-              oob_thread_pool.enabled="true" oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="4"
-              oob_thread_pool.keep_alive_time="10000" oob_thread_pool.queue_enabled="true"
-              oob_thread_pool.queue_max_size="10" oob_thread_pool.rejection_policy="Run"/>
-         <PING timeout="2000" num_initial_members="3"/>
-         <MERGE2 max_interval="30000" min_interval="10000"/>
-         <FD_SOCK/>
-         <FD timeout="10000" max_tries="5" shun="true"/>
-         <VERIFY_SUSPECT timeout="1500"/>
-         <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800"
-                        discard_delivered_msgs="true"/>
-         <UNICAST timeout="300,600,1200,2400,3600"/>
-         <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="400000"/>
-         <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false" view_bundling="true"
-                     view_ack_collection_timeout="5000"/>
-         <FRAG2 frag_size="60000"/>
-         <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
-         <pbcast.FLUSH timeout="0"/>
-      </jgroupsConfig>
-   </transport>
-
-   <replication>
+   <clustering>
+      <stateRetrieval fetchInMemoryState="true" timeout="15000"/>
+      <jgroupsConfig configFile="udp.xml" />
       <sync replTimeout="15000"/>
-   </replication>
+   </clustering>
 </jbosscache>

Modified: core/trunk/src/test/resources/configs/string-property-replaced.xml
===================================================================
--- core/trunk/src/test/resources/configs/string-property-replaced.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/configs/string-property-replaced.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -1,16 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xmlns="urn:jboss:jbosscache-core:config:3.0">
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0">
+
    <locking lockAcquisitionTimeout="${test.property.LockAcquisitionTimeout:15000}"
-            nodeLockingScheme="${test.property.NodeLockingScheme:OPTIMISTIC}"/>
+            nodeLockingScheme="${test.property.NodeLockingScheme:MVCC}"/>
+
    <transaction syncCommitPhase="${test.property.SyncCommitPhase:true}" syncRollbackPhase="true"/>
+
    <serialization useRegionBasedMarshalling="true"/>
-   <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
-   <startup regionsInactiveOnStartup="true"/>
-   <transport clusterName="optimistic-entity" multiplexerStack="udp-sync">
-      <jgroupsConfig/>
-   </transport>
-   <replication>
+   <clustering>
+      <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
+      <jgroupsConfig multiplexerStack="udp-sync" />
       <sync replTimeout="20000"/>
       <buddy enabled="${test.property.BuddyReplicationConfig.enabled:true}"
              poolName="${test.property.BuddyReplicationConfig.buddyPoolName:default}" communicationTimeout="2000">
@@ -22,11 +21,13 @@
             </properties>
          </locator>
       </buddy>
-   </replication>
+   </clustering>
+
+   <startup regionsInactiveOnStartup="true"/>
    <eviction wakeUpInterval="5000">
       <default algorithmClass="${test.property.EvictionPolicyConfig.policyClass:org.jboss.cache.eviction.LRUAlgorithm}">
-         <attribute name="maxNodes">${test.property.EvictionPolicyConfig.maxNodes:5000}</attribute>
-         <attribute name="timeToLive">1000000</attribute>
+         <property name="maxNodes" value="${test.property.EvictionPolicyConfig.maxNodes:5000}" />
+         <property name="timeToLive" value="1000000" />
       </default>
    </eviction>
    <loaders passivation="true" shared="false">

Deleted: core/trunk/src/test/resources/jbc2-registry-configs.xml
===================================================================
(Binary files differ)

Modified: core/trunk/src/test/resources/jbc3-registry-configs.xml
===================================================================
--- core/trunk/src/test/resources/jbc3-registry-configs.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/jbc3-registry-configs.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -17,19 +17,20 @@
                     transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
        <serialization useRegionBasedMarshalling="true"/>
        <startup regionsInactiveOnStartup="true"/>
-       <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
-       <transport clusterName="optimistic-entity" multiplexerStack="udp-sync"/>
-       <invalidation>
+       <clustering mode="i" clusterName="optimistic-entity">
+          <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
+          <jgroupsConfig multiplexerStack="udp-sync"/>
           <sync replTimeout="20000"/>
-       </invalidation>
+       </clustering>
+
        <eviction wakeUpInterval="5000">
           <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-             <attribute name="maxNodes">5000</attribute>
-             <attribute name="timeToLive">1000</attribute>
+             <property name="maxNodes" value="5000" />
+             <property name="timeToLive" value="1000" />
           </default>
           <region name="/TS">
-             <attribute name="maxNodes">0</attribute>
-             <attribute name="timeToLive">0</attribute>
+             <property name="maxNodes" value="0" />
+             <property name="timeToLive" value="0" />
           </region>
        </eviction>
     </registry:cache-config>
@@ -40,19 +41,20 @@
        <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="pessimistic"/>
        <serialization useRegionBasedMarshalling="true"/>
        <startup regionsInactiveOnStartup="true"/>
-       <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
-       <transport clusterName="pessimistic-entity" multiplexerStack="udp-sync"/>
-       <invalidation>
+       <clustering clusterName="pessimistic-entity" mode="i">
+         <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
+         <jgroupsConfig multiplexerStack="udp-sync"/>
           <sync replTimeout="20000"/>
-       </invalidation>
+       </clustering>
+
        <eviction wakeUpInterval="5000">
           <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-             <attribute name="maxNodes">5000</attribute>
-             <attribute name="timeToLive">1000</attribute>
+             <property name="maxNodes" value="5000" />
+             <property name="timeToLive" value="1000" />
           </default>
           <region name="/TS">
-             <attribute name="maxNodes">0</attribute>
-             <attribute name="timeToLive">0</attribute>
+             <property name="maxNodes" value="0" />
+             <property name="timeToLive" value="0" />
           </region>
        </eviction>
     </registry:cache-config>
@@ -65,12 +67,12 @@
        <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
        <eviction wakeUpInterval="5000">
           <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-             <attribute name="maxNodes">5000</attribute>
-             <attribute name="timeToLive">1000</attribute>
+             <property name="maxNodes" value="5000" />
+             <property name="timeToLive" value="1000" />
           </default>
           <region name="/TS">
-             <attribute name="maxNodes">0</attribute>
-             <attribute name="timeToLive">0</attribute>
+             <property name="maxNodes" value="0" />
+             <property name="timeToLive" value="0" />
           </region>
        </eviction>
     </registry:cache-config>
@@ -83,19 +85,19 @@
        <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
        <serialization useRegionBasedMarshalling="false"/>
        <startup regionsInactiveOnStartup="false"/>
-       <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
-       <transport clusterName="replicated-query" multiplexerStack="udp"/>
-       <replication>
-          <async/>
-       </replication>
+       <clustering clusterName="replicated-query" mode="r">
+         <stateRetrieval fetchInMemoryState="false" timeout="20000"/>
+         <jgroupsConfig multiplexerStack="udp"/>
+          <async />
+       </clustering>
        <eviction wakeUpInterval="5000">
           <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-             <attribute name="maxNodes">5000</attribute>
-             <attribute name="timeToLive">1000</attribute>
+             <property name="maxNodes" value="5000" />
+             <property name="timeToLive" value="1000" />
           </default>
           <region name="/TS" >
-             <attribute name="maxNodes">0</attribute>
-             <attribute name="timeToLive">0</attribute>
+             <property name="maxNodes" value="0" />
+             <property name="timeToLive" value="0" />
           </region>
        </eviction>
     </registry:cache-config>
@@ -108,19 +110,19 @@
        <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="pessimistic"/>
        <serialization useRegionBasedMarshalling="true"/>
        <startup regionsInactiveOnStartup="true"/>
-       <stateRetrieval fetchInMemoryState="true" timeout="20000"/>
-       <transport clusterName="timestamps-cache" multiplexerStack="udp"/>
-       <replication>
-          <async/>
-       </replication>
+       <clustering clusterName="timestamps-cache" mode="r">
+         <stateRetrieval fetchInMemoryState="true" timeout="20000"/>
+         <jgroupsConfig multiplexerStack="udp"/>
+          <async />
+       </clustering>
        <eviction wakeUpInterval="5000">
           <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-             <attribute name="maxNodes">5000</attribute>
-             <attribute name="timeToLive">1000</attribute>
+             <property name="maxNodes" value="5000" />
+             <property name="timeToLive" value="1000" />
           </default>
           <region name="/TS">
-             <attribute name="maxNodes">0</attribute>
-             <attribute name="timeToLive">0</attribute>
+             <property name="maxNodes" value="0" />
+             <property name="timeToLive" value="0" />
           </region>
        </eviction>
     </registry:cache-config>
@@ -136,19 +138,19 @@
                     transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
        <serialization useRegionBasedMarshalling="true"/>
        <startup regionsInactiveOnStartup="true"/>
-       <stateRetrieval fetchInMemoryState="true" timeout="20000"/>
-       <transport clusterName="optimistic-shared" multiplexerStack="udp"/>
-       <replication>
+       <clustering clusterName="optimistic-shared" mode="r">
+         <stateRetrieval fetchInMemoryState="true" timeout="20000"/>
+         <jgroupsConfig multiplexerStack="udp"/>
           <sync replTimeout="20000"/>
-       </replication>
+       </clustering>
        <eviction wakeUpInterval="5000">
           <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-             <attribute name="maxNodes">5000</attribute>
-             <attribute name="timeToLive">1000</attribute>
+             <property name="maxNodes" value="5000" />
+             <property name="timeToLive" value="1000" />
           </default>
           <region name="/TS">
-             <attribute name="maxNodes">0</attribute>
-             <attribute name="timeToLive">0</attribute>
+             <property name="maxNodes" value="0" />
+             <property name="timeToLive" value="0" />
           </region>
        </eviction>
     </registry:cache-config>
@@ -166,19 +168,19 @@
        <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="15000" nodeLockingScheme="pessimistic"/>
        <serialization useRegionBasedMarshalling="true"/>
        <startup regionsInactiveOnStartup="true"/>
-       <stateRetrieval fetchInMemoryState="true" timeout="20000"/>
-       <transport clusterName="pessimistic-shared" multiplexerStack="udp"/>
-       <replication>
+       <clustering clusterName="pessimistic-shared" mode="r">
+         <stateRetrieval fetchInMemoryState="true" timeout="20000"/>
+         <jgroupsConfig multiplexerStack="udp"/>
           <sync replTimeout="20000"/>
-       </replication>
+       </clustering>
        <eviction wakeUpInterval="5000">
           <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-             <attribute name="maxNodes">5000</attribute>
-             <attribute name="timeToLive">1000</attribute>
+             <property name="maxNodes" value="5000" />
+             <property name="timeToLive" value="1000" />
           </default>
           <region name="/TS">
-             <attribute name="maxNodes">0</attribute>
-             <attribute name="timeToLive">0</attribute>
+             <property name="maxNodes" value="0" />
+             <property name="timeToLive" value="0" />
           </region>
        </eviction>
     </registry:cache-config>

Modified: core/trunk/src/test/resources/log4j.xml
===================================================================
--- core/trunk/src/test/resources/log4j.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/log4j.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -46,7 +46,7 @@
    <!-- ================ -->
 
    <category name="org.jboss.cache">
-      <priority value="WARN"/>
+      <priority value="ERROR"/>
    </category>
 
    <category name="org.jboss.cache.factories">
@@ -66,8 +66,8 @@
    <!-- ======================= -->
 
    <root>
-      <!--<appender-ref ref="CONSOLE"/>-->
-      <appender-ref ref="FILE"/>
+      <appender-ref ref="CONSOLE"/>
+      <!--<appender-ref ref="FILE"/>-->
    </root>
 
 </log4j:configuration>

Modified: core/trunk/src/test/resources/unit-test-cache-service.xml
===================================================================
--- core/trunk/src/test/resources/unit-test-cache-service.xml	2008-10-22 16:10:20 UTC (rev 7001)
+++ core/trunk/src/test/resources/unit-test-cache-service.xml	2008-10-23 01:10:13 UTC (rev 7002)
@@ -4,23 +4,23 @@
    <locking isolationLevel="REPEATABLE_READ" lockAcquisitionTimeout="10000"/>
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
    <serialization useRegionBasedMarshalling="false"/>
-   <stateRetrieval fetchInMemoryState="true" timeout="15000"/>
-   <transport clusterName="JBossCache-Cluster"/>
-   <replication>
+   <clustering>
       <sync replTimeout="15000"/>
-   </replication>
+      <stateRetrieval fetchInMemoryState="true" timeout="15000"/>
+   </clustering>
+      
    <eviction wakeUpInterval="2000">
       <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000" />
       </default>
       <region name="/org/jboss/data">
-         <attribute name="maxNodes">5000</attribute>
-         <attribute name="timeToLive">1000</attribute>
+         <property name="maxNodes" value="5000" />
+         <property name="timeToLive" value="1000" />
       </region>
       <region name="/org/jboss/test/data">
-         <attribute name="maxNodes">5</attribute>
-         <attribute name="timeToLive">4</attribute>
+         <property name="maxNodes" value="5" />
+         <property name="timeToLive" value="4" />
       </region>
    </eviction>
    <loaders passivation="true" shared="false">




More information about the jbosscache-commits mailing list