You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wadi-commits@incubator.apache.org by bd...@apache.org on 2005/12/14 23:36:16 UTC

svn commit: r356933 [24/35] - in /incubator/wadi/trunk: ./ etc/ modules/ modules/assembly/ modules/assembly/src/ modules/assembly/src/bin/ modules/assembly/src/conf/ modules/assembly/src/main/ modules/assembly/src/main/assembly/ modules/core/ modules/c...

Added: incubator/wadi/trunk/modules/testapp/pom.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/pom.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/pom.xml (added)
+++ incubator/wadi/trunk/modules/testapp/pom.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,58 @@
+<project>
+    <parent>
+        <groupId>wadi</groupId>
+        <artifactId>wadi</artifactId>
+        <version>2.0M1</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>wadi-test-webapp</artifactId>
+    <packaging>war</packaging>
+    <name>WADI :: Test WebApp</name>
+    <scm>
+        <connection>scm:cvs:pserver:anoncvs@cvs.wadi.codehaus.org:/home/projects/wadi/scm:wadi/modules/testapp</connection>
+        <developerConnection>scm:cvs:ext:${maven.username}@cvs.wadi.codehaus.org/home/projects/wadi/scm:wadi/modules/testapp</developerConnection>
+        <url>http://cvs.wadi.codehaus.org/viewrep/wadi/wadi/modules/testapp</url>
+    </scm>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo-spec</groupId>
+            <artifactId>geronimo-spec-jsp</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo-spec</groupId>
+            <artifactId>geronimo-spec-servlet</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>wadi</groupId>
+            <artifactId>wadi-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+
+    <reporting>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <configuration>
+                    <source>1.4</source>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>surefire-report-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </reporting>
+
+</project>

Added: incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/BigString.java
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/BigString.java?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/BigString.java (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/BigString.java Wed Dec 14 15:32:56 2005
@@ -0,0 +1,38 @@
+/**
+ *
+ * Copyright 2003-2005 Core Developers Network Ltd.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.codehaus.wadi.webapp;
+
+import java.io.Serializable;
+
+/**
+ * A Custom class for use in the test Session to check that we have our
+ * ClassLoading working correctly...
+ *
+ * @author <a href="mailto:jules@coredevelopers.net">Jules Gosnell</a>
+ * @version $Revision: 1.1 $
+ */
+public class BigString extends CustomString implements Serializable {
+
+  protected final byte[] _deadWeight;
+
+  public BigString(String string, int deadWeight) {
+    super(string);
+    _deadWeight=new byte[deadWeight];
+  }
+
+}

Added: incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/CustomString.java
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/CustomString.java?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/CustomString.java (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/java/org/codehaus/wadi/webapp/CustomString.java Wed Dec 14 15:32:56 2005
@@ -0,0 +1,41 @@
+/**
+ *
+ * Copyright 2003-2005 Core Developers Network Ltd.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.codehaus.wadi.webapp;
+
+import java.io.Serializable;
+
+/**
+ * A Custom class for use in the test Session to check that we have our
+ * ClassLoading working correctly...
+ *
+ * @author <a href="mailto:jules@coredevelopers.net">Jules Gosnell</a>
+ * @version $Revision: 1.1 $
+ */
+public class CustomString implements Serializable {
+
+  protected final String _string;
+
+  public CustomString(String string) {
+    _string=string;
+  }
+
+  public String toString() {
+    return _string;
+  }
+
+}

Added: incubator/wadi/trunk/modules/testapp/src/main/resources/jetty-web.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/resources/jetty-web.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/resources/jetty-web.xml (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/resources/jetty-web.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,51 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN" "http://jetty.mortbay.org/configure_1_2.dtd">
+
+<Configure class="org.mortbay.jetty.servlet.WebApplicationContext">
+
+<!-- Set up the WADI Proxy Handler
+
+  <Call name="addHandler">
+    <Arg>
+     <New class="org.codehaus.wadi.jetty5.Handler">
+	  <Arg>
+	   <Call class="java.util.regex.Pattern" name="compile">
+	    <Arg>127\\.0\\.0\\.1|192\\.168\\.0\\.\\d{1,3}</Arg>
+	   </Call>
+	  </Arg>
+     </New>
+    </Arg>
+  </Call>
+ -->
+
+<!-- Set up the WADI Filter -->
+
+  <Call name="getWebApplicationHandler">
+
+   <Call name="defineFilter">
+    <Arg>WadiFilter</Arg>
+    <Arg>org.codehaus.wadi.impl.Filter</Arg>
+   </Call>
+
+   <Call name="addFilterPathMapping">
+    <Arg>/*</Arg>
+    <Arg>WadiFilter</Arg>
+    <Arg type="int">15</Arg> <!-- ALL dispatch types -->
+   </Call>
+
+  </Call>
+
+<!-- needed for StopGracefully (set on Server) to work -->
+  <Set name="StatsOn">true</Set>
+<!-- needed for session evacuation under load -->
+
+<!-- Set up the WADI Session Manager -->
+
+  <Get name="ServletHandler">
+    <Set name="SessionManager">
+      <New class="org.codehaus.wadi.jetty5.JettyManager"/>
+    </Set>
+  </Get>
+
+</Configure>

Added: incubator/wadi/trunk/modules/testapp/src/main/resources/jetty6-web.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/resources/jetty6-web.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/resources/jetty6-web.xml (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/resources/jetty6-web.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,66 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN" "http://jetty.mortbay.org/configure_1_2.dtd">
+
+<Configure class="org.mortbay.jetty.webapp.WebAppContext">
+
+<!-- Set up the WADI Proxy Handler
+
+  <Call name="addHandler">
+    <Arg>
+     <New class="org.codehaus.wadi.jetty5.Handler">
+	  <Arg>
+	   <Call class="java.util.regex.Pattern" name="compile">
+	    <Arg>127\\.0\\.0\\.1|192\\.168\\.0\\.\\d{1,3}</Arg>
+	   </Call>
+	  </Arg>
+     </New>
+    </Arg>
+  </Call>
+ -->
+
+
+<!-- Set up the WADI Filter -->
+<!-- OhOh, this will overwrite Filters defined in web.xml ?? -->
+
+  <Get name="ServletHandler">
+
+    <Set name="Filters">
+      <Array type="org.mortbay.jetty.servlet.FilterHolder">
+	<Item>
+	  <New class="org.mortbay.jetty.servlet.FilterHolder">
+	    <Set name="Name">WadiFilter</Set>
+	    <Set name="ClassName">org.codehaus.wadi.impl.Filter</Set>
+	  </New>
+	</Item>
+      </Array>
+    </Set>
+    <Set name="FilterMappings">
+      <Array type="org.mortbay.jetty.servlet.FilterMapping">
+	<Item>
+	  <New class="org.mortbay.jetty.servlet.FilterMapping">
+	    <Set name="PathSpec">/*</Set>
+	    <Set name="Dispatches">15</Set><!--  TODO: is this value still correct? -->
+	    <Set name="FilterName">WadiFilter</Set>
+	  </New>
+	</Item>
+      </Array>
+    </Set>
+
+  </Get>
+
+<!-- needed for StopGracefully (set on Server) to work -->
+<!--
+  <Set name="StatsOn">true</Set>
+-->
+<!-- needed for session evacuation under load -->
+
+<!-- Set up the WADI Session Manager -->
+
+  <Get name="SessionHandler">
+    <Set name="SessionManager">
+      <New class="org.codehaus.wadi.jetty6.JettyManager"/>
+    </Set>
+  </Get>
+
+</Configure>

Added: incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.clustered.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.clustered.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.clustered.xml (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.clustered.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,424 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<beans>
+
+<!--
+  Three Beans have already been created as part of the contract between WADI and Spring:
+
+    SessionFactory, SessionWrapperFactory
+
+  This is so because these three types need to be parameterised according to within which
+  WebContainer we are running...
+-->
+
+  <bean
+    id="SessionPool"
+    class="org.codehaus.wadi.impl.SimpleSessionPool"
+    >
+    <constructor-arg><ref bean="SessionFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="AttributesFactory"
+    class="org.codehaus.wadi.impl.DistributableAttributesFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValueFactory"
+    class="org.codehaus.wadi.impl.DistributableValueFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValuePool"
+    class="org.codehaus.wadi.impl.SimpleValuePool"
+    >
+    <constructor-arg><ref bean="ValueFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SessionIdFactory"
+    class="org.codehaus.wadi.impl.TomcatSessionIdFactory"
+    >
+  </bean>
+
+  <bean
+    id="Streamer"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+  <!-- the Contextualiser stack...(shorthand for now) -->
+
+  <bean
+    id="MemoryMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseURL"
+    class="java.lang.String"
+    >
+    <constructor-arg><value>jdbc:axiondb:WADI</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DataSource"
+    class="org.axiondb.jdbc.AxionDataSource"
+    >
+    <constructor-arg><ref bean="DatabaseURL"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="ContextPool"
+    class="org.codehaus.wadi.impl.SessionToContextPoolAdapter"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+  </bean>
+
+<!--
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.MessagingMigratingRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>2000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>1000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.ProxyingRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>2000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>2000</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.HybridRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>2000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>2000</value></constructor-arg>
+<!--
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+-->
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+  </bean>
+
+  <!-- the contextualiser stack -->
+
+  <bean
+    id="Streamer2"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+<!--
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.DebugCollapser"
+    >
+  </bean>
+-->
+
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.HashingCollapser"
+    >
+    <constructor-arg type="int"><value>1024</value></constructor-arg>
+    <constructor-arg type="long"><value>10000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DummyContextualiser"
+    class="org.codehaus.wadi.impl.DummyContextualiser"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseStore"
+    class="org.codehaus.wadi.impl.DatabaseStore"
+    >
+    <constructor-arg><ref bean="DatabaseURL"/></constructor-arg>
+    <constructor-arg><ref bean="DataSource"/></constructor-arg>
+    <constructor-arg><value>SESSIONS</value></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- reusingStore -->
+    <constructor-arg type="boolean"><value>true</value></constructor-arg><!-- build -->
+  </bean>
+
+  <bean
+    id="DatabaseContextualiser"
+    class="org.codehaus.wadi.impl.SharedStoreContextualiser"
+    >
+    <constructor-arg><ref bean="DummyContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="DatabaseStore"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="ClusterContextualiser"
+    class="org.codehaus.wadi.impl.ClusterContextualiser"
+    >
+    <constructor-arg><ref bean="DatabaseContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="Relocater"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="StatelessMethods"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>GET|POST</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessURIs"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>.*\\.(JPG|JPEG|GIF|PNG|ICO|HTML|HTM)(|;jsessionid=.*)</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessContextualiser"
+    class="org.codehaus.wadi.impl.StatelessContextualiser"
+    >
+    <constructor-arg><ref bean="ClusterContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="StatelessMethods"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="StatelessURIs"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="TmpDirectory"
+    class="java.io.File"
+    >
+    <constructor-arg><value>${java.io.tmpdir}</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DiscDirectory"
+    class="java.io.File"
+    >
+    <constructor-arg><ref bean="TmpDirectory"/></constructor-arg>
+    <constructor-arg><value>sessions</value></constructor-arg>
+  </bean>
+
+<!--
+        dir.delete();
+        dir.mkdir();
+-->
+
+  <bean
+    id="DiscEvicter"
+    class="org.codehaus.wadi.impl.NeverEvicter"
+    >
+    <constructor-arg type="int"><value>20</value></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+  </bean> <!-- sessions never pass below this point, unless the node is shutdown -->
+
+  <bean
+    id="DiscMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DiscContextualiser"
+    class="org.codehaus.wadi.impl.ExclusiveStoreContextualiser"
+    >
+    <constructor-arg><ref bean="StatelessContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="DiscEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="DiscMap"/></constructor-arg>
+    <constructor-arg><ref bean="Streamer"/></constructor-arg>
+    <constructor-arg><ref bean="DiscDirectory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SerialContextualiser"
+    class="org.codehaus.wadi.impl.SerialContextualiser"
+    >
+    <constructor-arg><ref bean="DiscContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="MemoryEvicter"
+    class="org.codehaus.wadi.impl.AbsoluteEvicter"
+    >
+    <constructor-arg type="int"><value>10</value></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg type="int"><value>10</value></constructor-arg>
+  </bean> <!-- if a session is inactive for 10 secs, it moves to disc -->
+
+  <bean
+    id="RequestPool"
+    class="org.codehaus.wadi.impl.DummyStatefulHttpServletRequestWrapperPool"
+    >
+  </bean>
+
+  <bean
+    id="MemoryContextualiser"
+    class="org.codehaus.wadi.impl.MemoryContextualiser"
+    >
+    <constructor-arg><ref bean="SerialContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="Streamer2"/></constructor-arg>
+    <constructor-arg><ref bean="ContextPool"/></constructor-arg>
+    <constructor-arg><ref bean="RequestPool"/></constructor-arg>
+  </bean>
+
+
+  <!-- the Router (load-balancer integration) -->
+
+<!--
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.JkRouter"
+    >
+    <constructor-arg><value>${node.name}</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.DummyRouter"
+    >
+  </bean>
+
+  <!-- other stuff... -->
+
+  <bean
+    id="HttpProxy"
+    class="org.codehaus.wadi.impl.StandardHttpProxy"
+    >
+    <constructor-arg><value>jsessionid</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="ReplicaterFactory"
+    class="org.codehaus.wadi.impl.DummyReplicaterFactory"
+    >
+  </bean>
+
+  <bean
+    id="LocalHost"
+    class="java.net.InetAddress"
+    factory-method="getLocalHost"
+    >
+  </bean>
+
+  <bean
+    id="HttpAddress"
+    class="java.net.InetSocketAddress"
+    >
+    <constructor-arg><ref bean="LocalHost"/></constructor-arg>
+    <constructor-arg type="int"><value>${http.port}</value></constructor-arg>
+  </bean>
+
+  <!-- and finally - the SessionManager itself -->
+
+  <bean
+    id="SessionManager"
+    class="org.codehaus.wadi.impl.ClusteredManager"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+    <constructor-arg><ref bean="AttributesFactory"/></constructor-arg>
+    <constructor-arg><ref bean="ValuePool"/></constructor-arg>
+    <constructor-arg><ref bean="SessionWrapperFactory"/></constructor-arg>
+    <constructor-arg><ref bean="SessionIdFactory"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="Router"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- errorIfSessionNotAcquired -->
+    <constructor-arg><ref bean="Streamer"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="ReplicaterFactory"/></constructor-arg>
+    <constructor-arg><ref bean="HttpAddress"/></constructor-arg>
+    <constructor-arg><ref bean="HttpProxy"/></constructor-arg>
+    <constructor-arg index="14"><value>tcp://localhost:61616</value></constructor-arg>
+<!--
+    <constructor-arg index="14"><value>peer://org.codehaus.wadi</value></constructor-arg>
+ -->
+    <constructor-arg index="15"><value>CLUSTER0</value></constructor-arg>
+    <constructor-arg index="16"><value>${node.name}</value></constructor-arg>
+    <constructor-arg index="17"><value>72</value></constructor-arg>
+  </bean>
+
+
+<!-- JMX support -->
+
+  <!--
+  This allows introspection via e.g mc4j (http://mc4j.sourceforge.net) on a running WADI system.
+
+  If you are using Tomcat 5.0.28, you will need to remove bin/jmx.jar,
+  d/l mx4j-3.0.1 and place mx4j-tools.jar and mx4j-remote.jar into
+  server/lib/.
+
+  If you do not require JMX support, feel free to comment out this section.
+
+  For further information please view the Spring JMX integration documentation.
+  -->
+
+  <!--
+  This will create a new MBeanServer unless one already exists, in which case it will be reused.
+  -->
+  <bean id="mbeanServer" class="org.codehaus.wadi.impl.MBeanServerFactoryBean"/>
+
+  <!--
+  This will register the beans mentioned in its 'beans' map with the MBeanServer.
+  -->
+  <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
+    <property name="beans">
+      <map>
+        <entry key="WADI:name=SessionManager"> <ref bean="SessionManager"/> </entry>
+        <entry key="WADI:name=MemoryContextualiser"> <ref bean="MemoryContextualiser"/> </entry>
+        <entry key="WADI:name=DiscContextualiser"> <ref bean="DiscContextualiser"/> </entry>
+        <entry key="WADI:name=ClusterContextualiser"> <ref bean="ClusterContextualiser"/> </entry>
+        <entry key="WADI:name=Router"> <ref bean="Router"/> </entry>
+        <entry key="WADI:name=HttpProxy"> <ref bean="HttpProxy"/> </entry>
+        <entry key="WADI:name=HttpAddress"> <ref bean="HttpAddress"/> </entry>
+        <entry key="WADI:name=Relocater"> <ref bean="Relocater"/> </entry>
+        <entry key="WADI:name=SessionIdFactory"> <ref bean="SessionIdFactory"/> </entry>
+      </map>
+    </property>
+    <property name="server" ref="mbeanServer"/>
+  </bean>
+
+  <!--
+  if you are running your own jndi registry, you may comment this out
+  (untested)
+  -->
+  <bean id="registry" class="java.rmi.registry.LocateRegistry" factory-method="createRegistry">
+    <constructor-arg value="${jndi.port}"/>
+  </bean>
+
+  <!--
+  if you are running your own jmx remote connector, you may comment this out
+  you will also need to remove the reference to 'serverConnector' in the 'exporter' bean definition.
+  (untested)
+  -->
+  <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
+    <property name="objectName" value="connector:name=rmi"/>
+    <property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:${jndi.port}/wadi"/>
+    <property name="server"><ref local="mbeanServer"/></property>
+    <property name="threaded" value="true"/>
+    <property name="daemon" value="true"/>
+  </bean>
+
+</beans>

Added: incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.persistent.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.persistent.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.persistent.xml (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/resources/wadi-web.persistent.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,324 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<beans>
+
+<!--
+  Three Beans have already been created as part of the contract between WADI and Spring:
+
+    SessionFactory, SessionWrapperFactory
+
+<  This is so because these three types need to be parameterised according to within which
+  WebContainer we are running...
+-->
+
+  <bean
+    id="SessionPool"
+    class="org.codehaus.wadi.impl.SimpleSessionPool"
+    >
+    <constructor-arg><ref bean="SessionFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="AttributesFactory"
+    class="org.codehaus.wadi.impl.DistributableAttributesFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValueFactory"
+    class="org.codehaus.wadi.impl.DistributableValueFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValuePool"
+    class="org.codehaus.wadi.impl.SimpleValuePool"
+    >
+    <constructor-arg><ref bean="ValueFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SessionIdFactory"
+    class="org.codehaus.wadi.impl.TomcatSessionIdFactory"
+    >
+  </bean>
+
+  <bean
+    id="SessionStreamer"
+    class="org.codehaus.wadi.impl.GZIPStreamer"
+    >
+  </bean>
+
+  <!-- the Contextualiser stack...(shorthand for now) -->
+
+  <bean
+    id="MemoryMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+<!--
+  <bean
+    id="DataSource"
+    class="org.axiondb.jdbc.AxionDataSource"
+    >
+    <constructor-arg><value>jdbc:axiondb:testdb</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="ContextPool"
+    class="org.codehaus.wadi.impl.SessionToContextPoolAdapter"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+  </bean>
+
+  <!-- the contextualiser stack -->
+
+  <bean
+    id="AttributeStreamer"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+<!--
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.DebugCollapser"
+    >
+  </bean>
+-->
+
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.HashingCollapser"
+    >
+    <constructor-arg type="int"><value>1024</value></constructor-arg>
+    <constructor-arg type="long"><value>10000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DummyContextualiser"
+    class="org.codehaus.wadi.impl.DummyContextualiser"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseEvicter"
+    class="org.codehaus.wadi.impl.NeverEvicter"
+    >
+    <constructor-arg type="int"><value>10</value></constructor-arg><!-- sweepInterval -->
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- strictOrdering -->
+  </bean>
+
+  <bean
+    id="DatabaseMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseContextualiser"
+    class="org.codehaus.wadi.impl.GiannisContextualiser"
+    >
+    <constructor-arg><ref bean="DummyContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- clean? -->
+    <constructor-arg><ref bean="DatabaseEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="DatabaseMap"/></constructor-arg>
+    <constructor-arg><ref bean="DatabaseStore"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="StatelessMethods"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>GET|POST</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessURIs"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>.*\\.(JPG|JPEG|GIF|PNG|ICO|HTML|HTM)(|;jsessionid=.*)</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessContextualiser"
+    class="org.codehaus.wadi.impl.StatelessContextualiser"
+    >
+    <constructor-arg><ref bean="DatabaseContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="StatelessMethods"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="StatelessURIs"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="SerialContextualiser"
+    class="org.codehaus.wadi.impl.SerialContextualiser"
+    >
+    <constructor-arg><ref bean="StatelessContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="MemoryEvicter"
+    class="org.codehaus.wadi.impl.AbsoluteEvicter"
+    >
+    <constructor-arg type="int"><value>10</value></constructor-arg><!-- sweepInterval -->
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- strictOrdering -->
+    <constructor-arg type="int"><value>10</value></constructor-arg><!-- inactivityInterval -->
+  </bean>
+
+  <bean
+    id="RequestPool"
+    class="org.codehaus.wadi.impl.DummyStatefulHttpServletRequestWrapperPool"
+    >
+  </bean>
+
+  <bean
+    id="MemoryContextualiser"
+    class="org.codehaus.wadi.impl.MemoryContextualiser"
+    >
+    <constructor-arg><ref bean="SerialContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="SessionStreamer"/></constructor-arg>
+    <constructor-arg><ref bean="ContextPool"/></constructor-arg>
+    <constructor-arg><ref bean="RequestPool"/></constructor-arg>
+  </bean>
+
+
+  <!-- the Router (load-balancer integration) -->
+
+<!--
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.JkRouter"
+    >
+    <constructor-arg><value>${node.name}</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.DummyRouter"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseReplicaterFactory"
+    class="org.codehaus.wadi.impl.DatabaseReplicaterFactory"
+    >
+    <constructor-arg><ref bean="DatabaseStore"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+  </bean>
+
+<!--
+  <bean
+    id="DatabaseReplicaterFactory"
+    class="org.codehaus.wadi.impl.DummyReplicaterFactory"
+    >
+  </bean>
+  <bean
+    id="DatabaseReplicaterFactory"
+    class="org.codehaus.wadi.impl.SleepingReplicaterFactory"
+    >
+    <constructor-arg type="long"><value>1000</value></constructor-arg>
+  </bean>
+-->
+
+  <!-- and finally - the SessionManager itself -->
+
+  <bean
+    id="SessionManager"
+    class="org.codehaus.wadi.impl.DistributableManager"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+    <constructor-arg><ref bean="AttributesFactory"/></constructor-arg>
+    <constructor-arg><ref bean="ValuePool"/></constructor-arg>
+    <constructor-arg><ref bean="SessionWrapperFactory"/></constructor-arg>
+    <constructor-arg><ref bean="SessionIdFactory"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="Router"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- errorIfSessionNotAcquired -->
+    <constructor-arg><ref bean="AttributeStreamer"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg><!-- accessOnLoad -->
+    <constructor-arg><ref bean="DatabaseReplicaterFactory"/></constructor-arg>
+  </bean>
+
+
+<!-- JMX support -->
+
+  <!--
+  This allows introspection via e.g mc4j (http://mc4j.sourceforge.net) on a running WADI system.
+
+  If you are using Tomcat 5.0.28, you will need to remove bin/jmx.jar,
+  d/l mx4j-3.0.1 and place mx4j-tools.jar and mx4j-remote.jar into
+  server/lib/.
+
+  If you do not require JMX support, feel free to comment out this section.
+
+  For further information please view the Spring JMX integration documentation.
+  -->
+
+  <!--
+  This will create a new MBeanServer unless one already exists, in which case it will be reused.
+  -->
+<!--
+  <bean id="mbeanServer" class="org.codehaus.wadi.impl.MBeanServerFactoryBean"/>
+-->
+
+  <!--
+  This will register the beans mentioned in its 'beans' map with the MBeanServer.
+  -->
+<!--
+  <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
+    <property name="beans">
+      <map>
+        <entry key="WADI:name=SessionManager"> <ref bean="SessionManager"/> </entry>
+        <entry key="WADI:name=MemoryContextualiser"> <ref bean="MemoryContextualiser"/> </entry>
+        <entry key="WADI:name=DiscContextualiser"> <ref bean="DiscContextualiser"/> </entry>
+        <entry key="WADI:name=Router"> <ref bean="Router"/> </entry>
+        <entry key="WADI:name=SessionIdFactory"> <ref bean="SessionIdFactory"/> </entry>
+      </map>
+    </property>
+    <property name="server" ref="mbeanServer"/>
+  </bean>
+-->
+
+  <!--
+  if you are running your own jndi registry, you may comment this out
+  (untested)
+  -->
+<!--
+  <bean id="registry" class="java.rmi.registry.LocateRegistry" factory-method="createRegistry">
+    <constructor-arg value="${jndi.port}"/>
+  </bean>
+-->
+
+  <!--
+  if you are running your own jmx remote connector, you may comment this out
+  you will also need to remove the reference to 'serverConnector' in the 'exporter' bean definition.
+  (untested)
+  -->
+<!--
+  <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
+    <property name="objectName" value="connector:name=rmi"/>
+    <property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:${jndi.port}/wadi"/>
+    <property name="server"><ref local="mbeanServer"/></property>
+    <property name="threaded" value="true"/>
+    <property name="daemon" value="true"/>
+  </bean>
+-->
+
+</beans>

Added: incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/wadi-web.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/wadi-web.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/wadi-web.xml (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/wadi-web.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,453 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<beans>
+
+<!--
+  Three Beans have already been created as part of the contract between WADI and Spring:
+
+    SessionFactory, SessionWrapperFactory
+
+  This is so because these three types need to be parameterised according to within which
+  WebContainer we are running...
+-->
+
+  <bean
+    id="SessionPool"
+    class="org.codehaus.wadi.impl.SimpleSessionPool"
+    >
+    <constructor-arg><ref bean="SessionFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="AttributesFactory"
+    class="org.codehaus.wadi.impl.DistributableAttributesFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValueFactory"
+    class="org.codehaus.wadi.impl.DistributableValueFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValuePool"
+    class="org.codehaus.wadi.impl.SimpleValuePool"
+    >
+    <constructor-arg><ref bean="ValueFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SessionIdFactory"
+    class="org.codehaus.wadi.impl.TomcatSessionIdFactory"
+    >
+  </bean>
+
+  <bean
+    id="AttributeStreamer"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+  <!-- the Contextualiser stack...(shorthand for now) -->
+
+  <bean
+    id="MemoryMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseURL"
+    class="java.lang.String"
+    >
+    <constructor-arg><value>jdbc:axiondb:WADI</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DataSource"
+    class="org.axiondb.jdbc.AxionDataSource"
+    >
+    <constructor-arg><ref bean="DatabaseURL"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="ContextPool"
+    class="org.codehaus.wadi.impl.SessionToContextPoolAdapter"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+  </bean>
+
+<!--
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.MessagingMigratingRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>5000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>1000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.ProxyingRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>5000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>5000</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.HybridRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>5000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>5000</value></constructor-arg>
+    <constructor-arg type="boolean" index="2"><value>true</value></constructor-arg><!-- relocate session, not request, if possible -->
+  </bean>
+
+  <!-- the contextualiser stack -->
+
+  <bean
+    id="SessionStreamer"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+<!--
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.DebugCollapser"
+    >
+  </bean>
+-->
+
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.HashingCollapser"
+    >
+    <constructor-arg type="int"><value>1024</value></constructor-arg>
+    <constructor-arg type="long"><value>10000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DummyContextualiser"
+    class="org.codehaus.wadi.impl.DummyContextualiser"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseStore"
+    class="org.codehaus.wadi.impl.DatabaseStore"
+    >
+    <constructor-arg><ref bean="DatabaseURL"/></constructor-arg>
+    <constructor-arg><ref bean="DataSource"/></constructor-arg>
+    <constructor-arg><value>SESSIONS</value></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- reusingStore -->
+    <constructor-arg type="boolean"><value>true</value></constructor-arg><!-- build -->
+  </bean>
+
+  <bean
+    id="DatabaseContextualiser"
+    class="org.codehaus.wadi.impl.SharedStoreContextualiser"
+    >
+    <constructor-arg><ref bean="DummyContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="DatabaseStore"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="ClusterContextualiser"
+    class="org.codehaus.wadi.impl.ClusterContextualiser"
+    >
+    <constructor-arg><ref bean="DatabaseContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="Relocater"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="StatelessMethods"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>GET|POST</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessURIs"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>.*\\.(JPG|JPEG|GIF|PNG|ICO|HTML|HTM)(|;jsessionid=.*)</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessContextualiser"
+    class="org.codehaus.wadi.impl.StatelessContextualiser"
+    >
+    <constructor-arg><ref bean="ClusterContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="StatelessMethods"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="StatelessURIs"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="TmpDirectory"
+    class="java.io.File"
+    >
+    <constructor-arg><value>${java.io.tmpdir}</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DiscDirectory"
+    class="java.io.File"
+    >
+    <constructor-arg><ref bean="TmpDirectory"/></constructor-arg>
+    <constructor-arg><value>sessions</value></constructor-arg>
+  </bean>
+
+<!--
+        dir.delete();
+        dir.mkdir();
+-->
+
+  <bean
+    id="DiscEvicter"
+    class="org.codehaus.wadi.impl.NeverEvicter"
+    >
+    <constructor-arg type="int"><value>20</value></constructor-arg><!-- sweep interval (millis) -->
+    <constructor-arg type="boolean"><value>true</value></constructor-arg><!-- strict ordering -->
+  </bean> <!-- sessions never pass below this point, unless the node is shutdown -->
+
+  <bean
+    id="DiscMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DiscContextualiser"
+    class="org.codehaus.wadi.impl.ExclusiveStoreContextualiser"
+    >
+    <constructor-arg><ref bean="StatelessContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="DiscEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="DiscMap"/></constructor-arg>
+    <constructor-arg><ref bean="SessionStreamer"/></constructor-arg>
+    <constructor-arg><ref bean="DiscDirectory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SerialContextualiser"
+    class="org.codehaus.wadi.impl.SerialContextualiser"
+    >
+    <constructor-arg><ref bean="DiscContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="MemoryEvicter"
+    class="org.codehaus.wadi.impl.AbsoluteEvicter"
+    >
+    <constructor-arg type="int"><value>10000</value></constructor-arg> <!-- sweep interval (millis) -->
+    <constructor-arg type="boolean"><value>true</value></constructor-arg> <!-- strict ordering -->
+    <constructor-arg type="int"><value>10</value></constructor-arg> <!-- inactivity interval (secs) -->
+  </bean>
+
+  <bean
+    id="RequestPool"
+    class="org.codehaus.wadi.impl.DummyStatefulHttpServletRequestWrapperPool"
+    >
+  </bean>
+
+  <bean
+    id="MemoryContextualiser"
+    class="org.codehaus.wadi.impl.MemoryContextualiser"
+    >
+    <constructor-arg><ref bean="SerialContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="SessionStreamer"/></constructor-arg>
+    <constructor-arg><ref bean="ContextPool"/></constructor-arg>
+    <constructor-arg><ref bean="RequestPool"/></constructor-arg>
+  </bean>
+
+
+  <!-- the Router (load-balancer integration) -->
+
+<!--
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.JkRouter"
+    >
+    <constructor-arg><value>${node.name}</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.DummyRouter"
+    >
+  </bean>
+
+  <!-- other stuff... -->
+
+  <bean
+    id="HttpProxy"
+    class="org.codehaus.wadi.impl.StandardHttpProxy"
+    >
+    <constructor-arg><value>jsessionid</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="NumPartitions"
+    class="java.lang.Integer"
+    >
+    <constructor-arg><value>72</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="ReplicaterFactory"
+    class="org.codehaus.wadi.impl.MemoryReplicaterFactory"
+    >
+    <constructor-arg><ref bean="NumPartitions"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="LocalHost"
+    class="java.net.InetAddress"
+    factory-method="getLocalHost"
+    >
+  </bean>
+
+  <bean
+    id="HttpAddress"
+    class="java.net.InetSocketAddress"
+    >
+    <constructor-arg><ref bean="LocalHost"/></constructor-arg>
+    <constructor-arg type="int"><value>${http.port}</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="ProxiedLocation"
+    class="org.codehaus.wadi.http.HTTPProxiedLocation"
+    >
+    <constructor-arg><ref bean="HttpAddress"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="PartitionManager"
+    class="org.codehaus.wadi.gridstate.impl.DummyPartitionManager"
+    >
+    <constructor-arg><ref bean="NumPartitions"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="Dispatcher"
+    class="org.codehaus.wadi.gridstate.activecluster.ActiveClusterDispatcher"
+    >
+    <constructor-arg><value>${node.name}</value></constructor-arg>
+    <constructor-arg><value>CLUSTER0</value></constructor-arg>
+<!--
+    <constructor-arg><value>peer://org.codehaus.wadi</value></constructor-arg>
+ -->
+    <constructor-arg><value>tcp://localhost:61616</value></constructor-arg>
+    <constructor-arg type="long"><value>5000</value></constructor-arg>
+  </bean>
+
+  <!-- and finally - the SessionManager itself -->
+
+  <bean
+    id="SessionManager"
+    class="org.codehaus.wadi.impl.ClusteredManager"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+    <constructor-arg><ref bean="AttributesFactory"/></constructor-arg>
+    <constructor-arg><ref bean="ValuePool"/></constructor-arg>
+    <constructor-arg><ref bean="SessionWrapperFactory"/></constructor-arg>
+    <constructor-arg><ref bean="SessionIdFactory"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="Router"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- errorIfSessionNotAcquired -->
+    <constructor-arg><ref bean="AttributeStreamer"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="ReplicaterFactory"/></constructor-arg>
+    <constructor-arg><ref bean="ProxiedLocation"/></constructor-arg>
+    <constructor-arg><ref bean="HttpProxy"/></constructor-arg>
+    <constructor-arg><ref bean="Dispatcher"/></constructor-arg>
+    <constructor-arg><ref bean="PartitionManager"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+  </bean>
+
+
+<!-- JMX support -->
+
+  <!--
+  This allows introspection via e.g mc4j (http://mc4j.sourceforge.net) on a running WADI system.
+
+  If you are using Tomcat 5.0.28, you will need to remove bin/jmx.jar,
+  d/l mx4j-3.0.1 and place mx4j-tools.jar and mx4j-remote.jar into
+  server/lib/.
+
+  If you do not require JMX support, feel free to comment out this section.
+
+  For further information please view the Spring JMX integration documentation.
+  -->
+
+  <!--
+  This will create a new MBeanServer unless one already exists, in which case it will be reused.
+  -->
+  <bean id="mbeanServer" class="org.codehaus.wadi.impl.MBeanServerFactoryBean"/>
+
+  <!--
+  This will register the beans mentioned in its 'beans' map with the MBeanServer.
+  -->
+  <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
+    <property name="beans">
+      <map>
+        <entry key="WADI:name=SessionManager"> <ref bean="SessionManager"/> </entry>
+        <entry key="WADI:name=MemoryContextualiser"> <ref bean="MemoryContextualiser"/> </entry>
+        <entry key="WADI:name=DiscContextualiser"> <ref bean="DiscContextualiser"/> </entry>
+        <entry key="WADI:name=ClusterContextualiser"> <ref bean="ClusterContextualiser"/> </entry>
+        <entry key="WADI:name=Router"> <ref bean="Router"/> </entry>
+        <entry key="WADI:name=HttpProxy"> <ref bean="HttpProxy"/> </entry>
+        <entry key="WADI:name=ProxiedLocation"> <ref bean="ProxiedLocation"/> </entry>
+        <entry key="WADI:name=Relocater"> <ref bean="Relocater"/> </entry>
+        <entry key="WADI:name=SessionIdFactory"> <ref bean="SessionIdFactory"/> </entry>
+      </map>
+    </property>
+    <property name="server" ref="mbeanServer"/>
+    <property name="registrationBehavior"><value>2</value></property> <!-- REGISTRATION_REPLACE_EXISTING -->
+  </bean>
+
+  <!--
+  if you are running your own jndi registry, you may comment this out
+  (untested)
+  <bean id="registry" class="java.rmi.registry.LocateRegistry" factory-method="createRegistry">
+    <constructor-arg value="${jndi.port}"/>
+  </bean>
+  -->
+
+  <!--
+  if you are running your own jmx remote connector, you may comment this out
+  you will also need to remove the reference to 'serverConnector' in the 'exporter' bean definition.
+  (untested)
+  <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
+    <property name="objectName" value="connector:name=rmi"/>
+    <property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:${jndi.port}/wadi"/>
+    <property name="server"><ref local="mbeanServer"/></property>
+    <property name="threaded" value="true"/>
+    <property name="daemon" value="true"/>
+  </bean>
+  -->
+
+</beans>

Added: incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/web.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/web.xml (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/webapp/WEB-INF/web.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
+                         "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+  <display-name>Simple WADI Test Web Application</display-name>
+  <distributable/>
+  <welcome-file-list>
+  	<welcome-file>/index.jsp</welcome-file>
+  </welcome-file-list>
+</web-app>
+
+

Added: incubator/wadi/trunk/modules/testapp/src/main/webapp/check.jsp
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/webapp/check.jsp?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/webapp/check.jsp (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/webapp/check.jsp Wed Dec 14 15:32:56 2005
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html" session="true" %>
+<%
+String sessId = session.getId();
+String color=System.getProperty("node.name");
+%>
+<html>
+  <head>
+    <title>WADI Set Page</title>
+  </head>
+  <body bgcolor="<%= color %>">
+    <p>The session id is = <%= sessId %></p>
+    <p>value = <%= session.getAttribute("foo") %></p>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/wadi/trunk/modules/testapp/src/main/webapp/index.jsp
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/webapp/index.jsp?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/webapp/index.jsp (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/webapp/index.jsp Wed Dec 14 15:32:56 2005
@@ -0,0 +1,13 @@
+<%@ page language="java" contentType="text/html" session="true" %>
+<%
+  String color=System.getProperty("node.name");
+%>
+<html>
+  <head>
+    <title>WADI Test Page</title>
+  </head>
+  <body bgcolor="<%= color %>">
+    <p>The index for the wadi test app.</p>
+    <p>The value of foo = <%= session.getAttribute("foo") %></p>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/wadi/trunk/modules/testapp/src/main/webapp/set.jsp
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/src/main/webapp/set.jsp?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/src/main/webapp/set.jsp (added)
+++ incubator/wadi/trunk/modules/testapp/src/main/webapp/set.jsp Wed Dec 14 15:32:56 2005
@@ -0,0 +1,15 @@
+<%@ page language="java" contentType="text/html" session="true" %>
+<%
+String sessId = session.getId();
+String color=System.getProperty("node.name");
+session.setAttribute("foo", "bar");
+%>
+<html>
+  <head>
+    <title>WADI Set Page</title>
+  </head>
+  <body bgcolor="<%= color %>">
+    <p>The session id is = <%= sessId %></p>
+    <p>The value of foo was set to = <%= session.getAttribute("foo") %></p>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/wadi/trunk/modules/testapp/target/classes/jetty-web.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/target/classes/jetty-web.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/target/classes/jetty-web.xml (added)
+++ incubator/wadi/trunk/modules/testapp/target/classes/jetty-web.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,51 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN" "http://jetty.mortbay.org/configure_1_2.dtd">
+
+<Configure class="org.mortbay.jetty.servlet.WebApplicationContext">
+
+<!-- Set up the WADI Proxy Handler
+
+  <Call name="addHandler">
+    <Arg>
+     <New class="org.codehaus.wadi.jetty5.Handler">
+	  <Arg>
+	   <Call class="java.util.regex.Pattern" name="compile">
+	    <Arg>127\\.0\\.0\\.1|192\\.168\\.0\\.\\d{1,3}</Arg>
+	   </Call>
+	  </Arg>
+     </New>
+    </Arg>
+  </Call>
+ -->
+
+<!-- Set up the WADI Filter -->
+
+  <Call name="getWebApplicationHandler">
+
+   <Call name="defineFilter">
+    <Arg>WadiFilter</Arg>
+    <Arg>org.codehaus.wadi.impl.Filter</Arg>
+   </Call>
+
+   <Call name="addFilterPathMapping">
+    <Arg>/*</Arg>
+    <Arg>WadiFilter</Arg>
+    <Arg type="int">15</Arg> <!-- ALL dispatch types -->
+   </Call>
+
+  </Call>
+
+<!-- needed for StopGracefully (set on Server) to work -->
+  <Set name="StatsOn">true</Set>
+<!-- needed for session evacuation under load -->
+
+<!-- Set up the WADI Session Manager -->
+
+  <Get name="ServletHandler">
+    <Set name="SessionManager">
+      <New class="org.codehaus.wadi.jetty5.JettyManager"/>
+    </Set>
+  </Get>
+
+</Configure>

Added: incubator/wadi/trunk/modules/testapp/target/classes/jetty6-web.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/target/classes/jetty6-web.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/target/classes/jetty6-web.xml (added)
+++ incubator/wadi/trunk/modules/testapp/target/classes/jetty6-web.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,66 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN" "http://jetty.mortbay.org/configure_1_2.dtd">
+
+<Configure class="org.mortbay.jetty.webapp.WebAppContext">
+
+<!-- Set up the WADI Proxy Handler
+
+  <Call name="addHandler">
+    <Arg>
+     <New class="org.codehaus.wadi.jetty5.Handler">
+	  <Arg>
+	   <Call class="java.util.regex.Pattern" name="compile">
+	    <Arg>127\\.0\\.0\\.1|192\\.168\\.0\\.\\d{1,3}</Arg>
+	   </Call>
+	  </Arg>
+     </New>
+    </Arg>
+  </Call>
+ -->
+
+
+<!-- Set up the WADI Filter -->
+<!-- OhOh, this will overwrite Filters defined in web.xml ?? -->
+
+  <Get name="ServletHandler">
+
+    <Set name="Filters">
+      <Array type="org.mortbay.jetty.servlet.FilterHolder">
+	<Item>
+	  <New class="org.mortbay.jetty.servlet.FilterHolder">
+	    <Set name="Name">WadiFilter</Set>
+	    <Set name="ClassName">org.codehaus.wadi.impl.Filter</Set>
+	  </New>
+	</Item>
+      </Array>
+    </Set>
+    <Set name="FilterMappings">
+      <Array type="org.mortbay.jetty.servlet.FilterMapping">
+	<Item>
+	  <New class="org.mortbay.jetty.servlet.FilterMapping">
+	    <Set name="PathSpec">/*</Set>
+	    <Set name="Dispatches">15</Set><!--  TODO: is this value still correct? -->
+	    <Set name="FilterName">WadiFilter</Set>
+	  </New>
+	</Item>
+      </Array>
+    </Set>
+
+  </Get>
+
+<!-- needed for StopGracefully (set on Server) to work -->
+<!--
+  <Set name="StatsOn">true</Set>
+-->
+<!-- needed for session evacuation under load -->
+
+<!-- Set up the WADI Session Manager -->
+
+  <Get name="SessionHandler">
+    <Set name="SessionManager">
+      <New class="org.codehaus.wadi.jetty6.JettyManager"/>
+    </Set>
+  </Get>
+
+</Configure>

Added: incubator/wadi/trunk/modules/testapp/target/classes/org/codehaus/wadi/webapp/BigString.class
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/target/classes/org/codehaus/wadi/webapp/BigString.class?rev=356933&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/wadi/trunk/modules/testapp/target/classes/org/codehaus/wadi/webapp/BigString.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/wadi/trunk/modules/testapp/target/classes/org/codehaus/wadi/webapp/CustomString.class
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/target/classes/org/codehaus/wadi/webapp/CustomString.class?rev=356933&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/wadi/trunk/modules/testapp/target/classes/org/codehaus/wadi/webapp/CustomString.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.clustered.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.clustered.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.clustered.xml (added)
+++ incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.clustered.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,424 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<beans>
+
+<!--
+  Three Beans have already been created as part of the contract between WADI and Spring:
+
+    SessionFactory, SessionWrapperFactory
+
+  This is so because these three types need to be parameterised according to within which
+  WebContainer we are running...
+-->
+
+  <bean
+    id="SessionPool"
+    class="org.codehaus.wadi.impl.SimpleSessionPool"
+    >
+    <constructor-arg><ref bean="SessionFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="AttributesFactory"
+    class="org.codehaus.wadi.impl.DistributableAttributesFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValueFactory"
+    class="org.codehaus.wadi.impl.DistributableValueFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValuePool"
+    class="org.codehaus.wadi.impl.SimpleValuePool"
+    >
+    <constructor-arg><ref bean="ValueFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SessionIdFactory"
+    class="org.codehaus.wadi.impl.TomcatSessionIdFactory"
+    >
+  </bean>
+
+  <bean
+    id="Streamer"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+  <!-- the Contextualiser stack...(shorthand for now) -->
+
+  <bean
+    id="MemoryMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseURL"
+    class="java.lang.String"
+    >
+    <constructor-arg><value>jdbc:axiondb:WADI</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DataSource"
+    class="org.axiondb.jdbc.AxionDataSource"
+    >
+    <constructor-arg><ref bean="DatabaseURL"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="ContextPool"
+    class="org.codehaus.wadi.impl.SessionToContextPoolAdapter"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+  </bean>
+
+<!--
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.MessagingMigratingRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>2000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>1000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.ProxyingRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>2000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>2000</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Relocater"
+    class="org.codehaus.wadi.impl.HybridRelocater"
+    >
+    <constructor-arg type="long" index="0"><value>2000</value></constructor-arg>
+    <constructor-arg type="long" index="1"><value>2000</value></constructor-arg>
+<!--
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+-->
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+  </bean>
+
+  <!-- the contextualiser stack -->
+
+  <bean
+    id="Streamer2"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+<!--
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.DebugCollapser"
+    >
+  </bean>
+-->
+
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.HashingCollapser"
+    >
+    <constructor-arg type="int"><value>1024</value></constructor-arg>
+    <constructor-arg type="long"><value>10000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DummyContextualiser"
+    class="org.codehaus.wadi.impl.DummyContextualiser"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseStore"
+    class="org.codehaus.wadi.impl.DatabaseStore"
+    >
+    <constructor-arg><ref bean="DatabaseURL"/></constructor-arg>
+    <constructor-arg><ref bean="DataSource"/></constructor-arg>
+    <constructor-arg><value>SESSIONS</value></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- reusingStore -->
+    <constructor-arg type="boolean"><value>true</value></constructor-arg><!-- build -->
+  </bean>
+
+  <bean
+    id="DatabaseContextualiser"
+    class="org.codehaus.wadi.impl.SharedStoreContextualiser"
+    >
+    <constructor-arg><ref bean="DummyContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="DatabaseStore"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="ClusterContextualiser"
+    class="org.codehaus.wadi.impl.ClusterContextualiser"
+    >
+    <constructor-arg><ref bean="DatabaseContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="Relocater"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="StatelessMethods"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>GET|POST</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessURIs"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>.*\\.(JPG|JPEG|GIF|PNG|ICO|HTML|HTM)(|;jsessionid=.*)</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessContextualiser"
+    class="org.codehaus.wadi.impl.StatelessContextualiser"
+    >
+    <constructor-arg><ref bean="ClusterContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="StatelessMethods"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="StatelessURIs"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="TmpDirectory"
+    class="java.io.File"
+    >
+    <constructor-arg><value>${java.io.tmpdir}</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DiscDirectory"
+    class="java.io.File"
+    >
+    <constructor-arg><ref bean="TmpDirectory"/></constructor-arg>
+    <constructor-arg><value>sessions</value></constructor-arg>
+  </bean>
+
+<!--
+        dir.delete();
+        dir.mkdir();
+-->
+
+  <bean
+    id="DiscEvicter"
+    class="org.codehaus.wadi.impl.NeverEvicter"
+    >
+    <constructor-arg type="int"><value>20</value></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+  </bean> <!-- sessions never pass below this point, unless the node is shutdown -->
+
+  <bean
+    id="DiscMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DiscContextualiser"
+    class="org.codehaus.wadi.impl.ExclusiveStoreContextualiser"
+    >
+    <constructor-arg><ref bean="StatelessContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="DiscEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="DiscMap"/></constructor-arg>
+    <constructor-arg><ref bean="Streamer"/></constructor-arg>
+    <constructor-arg><ref bean="DiscDirectory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SerialContextualiser"
+    class="org.codehaus.wadi.impl.SerialContextualiser"
+    >
+    <constructor-arg><ref bean="DiscContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="MemoryEvicter"
+    class="org.codehaus.wadi.impl.AbsoluteEvicter"
+    >
+    <constructor-arg type="int"><value>10</value></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg type="int"><value>10</value></constructor-arg>
+  </bean> <!-- if a session is inactive for 10 secs, it moves to disc -->
+
+  <bean
+    id="RequestPool"
+    class="org.codehaus.wadi.impl.DummyStatefulHttpServletRequestWrapperPool"
+    >
+  </bean>
+
+  <bean
+    id="MemoryContextualiser"
+    class="org.codehaus.wadi.impl.MemoryContextualiser"
+    >
+    <constructor-arg><ref bean="SerialContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="Streamer2"/></constructor-arg>
+    <constructor-arg><ref bean="ContextPool"/></constructor-arg>
+    <constructor-arg><ref bean="RequestPool"/></constructor-arg>
+  </bean>
+
+
+  <!-- the Router (load-balancer integration) -->
+
+<!--
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.JkRouter"
+    >
+    <constructor-arg><value>${node.name}</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.DummyRouter"
+    >
+  </bean>
+
+  <!-- other stuff... -->
+
+  <bean
+    id="HttpProxy"
+    class="org.codehaus.wadi.impl.StandardHttpProxy"
+    >
+    <constructor-arg><value>jsessionid</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="ReplicaterFactory"
+    class="org.codehaus.wadi.impl.DummyReplicaterFactory"
+    >
+  </bean>
+
+  <bean
+    id="LocalHost"
+    class="java.net.InetAddress"
+    factory-method="getLocalHost"
+    >
+  </bean>
+
+  <bean
+    id="HttpAddress"
+    class="java.net.InetSocketAddress"
+    >
+    <constructor-arg><ref bean="LocalHost"/></constructor-arg>
+    <constructor-arg type="int"><value>${http.port}</value></constructor-arg>
+  </bean>
+
+  <!-- and finally - the SessionManager itself -->
+
+  <bean
+    id="SessionManager"
+    class="org.codehaus.wadi.impl.ClusteredManager"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+    <constructor-arg><ref bean="AttributesFactory"/></constructor-arg>
+    <constructor-arg><ref bean="ValuePool"/></constructor-arg>
+    <constructor-arg><ref bean="SessionWrapperFactory"/></constructor-arg>
+    <constructor-arg><ref bean="SessionIdFactory"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="Router"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- errorIfSessionNotAcquired -->
+    <constructor-arg><ref bean="Streamer"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="ReplicaterFactory"/></constructor-arg>
+    <constructor-arg><ref bean="HttpAddress"/></constructor-arg>
+    <constructor-arg><ref bean="HttpProxy"/></constructor-arg>
+    <constructor-arg index="14"><value>tcp://localhost:61616</value></constructor-arg>
+<!--
+    <constructor-arg index="14"><value>peer://org.codehaus.wadi</value></constructor-arg>
+ -->
+    <constructor-arg index="15"><value>CLUSTER0</value></constructor-arg>
+    <constructor-arg index="16"><value>${node.name}</value></constructor-arg>
+    <constructor-arg index="17"><value>72</value></constructor-arg>
+  </bean>
+
+
+<!-- JMX support -->
+
+  <!--
+  This allows introspection via e.g mc4j (http://mc4j.sourceforge.net) on a running WADI system.
+
+  If you are using Tomcat 5.0.28, you will need to remove bin/jmx.jar,
+  d/l mx4j-3.0.1 and place mx4j-tools.jar and mx4j-remote.jar into
+  server/lib/.
+
+  If you do not require JMX support, feel free to comment out this section.
+
+  For further information please view the Spring JMX integration documentation.
+  -->
+
+  <!--
+  This will create a new MBeanServer unless one already exists, in which case it will be reused.
+  -->
+  <bean id="mbeanServer" class="org.codehaus.wadi.impl.MBeanServerFactoryBean"/>
+
+  <!--
+  This will register the beans mentioned in its 'beans' map with the MBeanServer.
+  -->
+  <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
+    <property name="beans">
+      <map>
+        <entry key="WADI:name=SessionManager"> <ref bean="SessionManager"/> </entry>
+        <entry key="WADI:name=MemoryContextualiser"> <ref bean="MemoryContextualiser"/> </entry>
+        <entry key="WADI:name=DiscContextualiser"> <ref bean="DiscContextualiser"/> </entry>
+        <entry key="WADI:name=ClusterContextualiser"> <ref bean="ClusterContextualiser"/> </entry>
+        <entry key="WADI:name=Router"> <ref bean="Router"/> </entry>
+        <entry key="WADI:name=HttpProxy"> <ref bean="HttpProxy"/> </entry>
+        <entry key="WADI:name=HttpAddress"> <ref bean="HttpAddress"/> </entry>
+        <entry key="WADI:name=Relocater"> <ref bean="Relocater"/> </entry>
+        <entry key="WADI:name=SessionIdFactory"> <ref bean="SessionIdFactory"/> </entry>
+      </map>
+    </property>
+    <property name="server" ref="mbeanServer"/>
+  </bean>
+
+  <!--
+  if you are running your own jndi registry, you may comment this out
+  (untested)
+  -->
+  <bean id="registry" class="java.rmi.registry.LocateRegistry" factory-method="createRegistry">
+    <constructor-arg value="${jndi.port}"/>
+  </bean>
+
+  <!--
+  if you are running your own jmx remote connector, you may comment this out
+  you will also need to remove the reference to 'serverConnector' in the 'exporter' bean definition.
+  (untested)
+  -->
+  <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
+    <property name="objectName" value="connector:name=rmi"/>
+    <property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:${jndi.port}/wadi"/>
+    <property name="server"><ref local="mbeanServer"/></property>
+    <property name="threaded" value="true"/>
+    <property name="daemon" value="true"/>
+  </bean>
+
+</beans>

Added: incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.persistent.xml
URL: http://svn.apache.org/viewcvs/incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.persistent.xml?rev=356933&view=auto
==============================================================================
--- incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.persistent.xml (added)
+++ incubator/wadi/trunk/modules/testapp/target/classes/wadi-web.persistent.xml Wed Dec 14 15:32:56 2005
@@ -0,0 +1,324 @@
+<?xml version="1.0"  encoding="ISO-8859-1"?>
+
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<beans>
+
+<!--
+  Three Beans have already been created as part of the contract between WADI and Spring:
+
+    SessionFactory, SessionWrapperFactory
+
+<  This is so because these three types need to be parameterised according to within which
+  WebContainer we are running...
+-->
+
+  <bean
+    id="SessionPool"
+    class="org.codehaus.wadi.impl.SimpleSessionPool"
+    >
+    <constructor-arg><ref bean="SessionFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="AttributesFactory"
+    class="org.codehaus.wadi.impl.DistributableAttributesFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValueFactory"
+    class="org.codehaus.wadi.impl.DistributableValueFactory"
+    >
+  </bean>
+
+  <bean
+    id="ValuePool"
+    class="org.codehaus.wadi.impl.SimpleValuePool"
+    >
+    <constructor-arg><ref bean="ValueFactory"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="SessionIdFactory"
+    class="org.codehaus.wadi.impl.TomcatSessionIdFactory"
+    >
+  </bean>
+
+  <bean
+    id="SessionStreamer"
+    class="org.codehaus.wadi.impl.GZIPStreamer"
+    >
+  </bean>
+
+  <!-- the Contextualiser stack...(shorthand for now) -->
+
+  <bean
+    id="MemoryMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+<!--
+  <bean
+    id="DataSource"
+    class="org.axiondb.jdbc.AxionDataSource"
+    >
+    <constructor-arg><value>jdbc:axiondb:testdb</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="ContextPool"
+    class="org.codehaus.wadi.impl.SessionToContextPoolAdapter"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+  </bean>
+
+  <!-- the contextualiser stack -->
+
+  <bean
+    id="AttributeStreamer"
+    class="org.codehaus.wadi.impl.SimpleStreamer"
+    >
+  </bean>
+
+<!--
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.DebugCollapser"
+    >
+  </bean>
+-->
+
+  <bean
+    id="Collapser"
+    class="org.codehaus.wadi.impl.HashingCollapser"
+    >
+    <constructor-arg type="int"><value>1024</value></constructor-arg>
+    <constructor-arg type="long"><value>10000</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="DummyContextualiser"
+    class="org.codehaus.wadi.impl.DummyContextualiser"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseEvicter"
+    class="org.codehaus.wadi.impl.NeverEvicter"
+    >
+    <constructor-arg type="int"><value>10</value></constructor-arg><!-- sweepInterval -->
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- strictOrdering -->
+  </bean>
+
+  <bean
+    id="DatabaseMap"
+    class="EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseContextualiser"
+    class="org.codehaus.wadi.impl.GiannisContextualiser"
+    >
+    <constructor-arg><ref bean="DummyContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- clean? -->
+    <constructor-arg><ref bean="DatabaseEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="DatabaseMap"/></constructor-arg>
+    <constructor-arg><ref bean="DatabaseStore"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="StatelessMethods"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>GET|POST</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessURIs"
+    class="java.util.regex.Pattern"
+    factory-method="compile"
+    >
+    <constructor-arg><value>.*\\.(JPG|JPEG|GIF|PNG|ICO|HTML|HTM)(|;jsessionid=.*)</value></constructor-arg>
+    <constructor-arg type="int"><value>2</value></constructor-arg><!--  Pattern.CASE_INSENSITIVE -->
+  </bean>
+
+  <bean
+    id="StatelessContextualiser"
+    class="org.codehaus.wadi.impl.StatelessContextualiser"
+    >
+    <constructor-arg><ref bean="DatabaseContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="StatelessMethods"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+    <constructor-arg><ref bean="StatelessURIs"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg>
+  </bean>
+
+  <bean
+    id="SerialContextualiser"
+    class="org.codehaus.wadi.impl.SerialContextualiser"
+    >
+    <constructor-arg><ref bean="StatelessContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="Collapser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+  </bean>
+
+  <bean
+    id="MemoryEvicter"
+    class="org.codehaus.wadi.impl.AbsoluteEvicter"
+    >
+    <constructor-arg type="int"><value>10</value></constructor-arg><!-- sweepInterval -->
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- strictOrdering -->
+    <constructor-arg type="int"><value>10</value></constructor-arg><!-- inactivityInterval -->
+  </bean>
+
+  <bean
+    id="RequestPool"
+    class="org.codehaus.wadi.impl.DummyStatefulHttpServletRequestWrapperPool"
+    >
+  </bean>
+
+  <bean
+    id="MemoryContextualiser"
+    class="org.codehaus.wadi.impl.MemoryContextualiser"
+    >
+    <constructor-arg><ref bean="SerialContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryEvicter"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="SessionStreamer"/></constructor-arg>
+    <constructor-arg><ref bean="ContextPool"/></constructor-arg>
+    <constructor-arg><ref bean="RequestPool"/></constructor-arg>
+  </bean>
+
+
+  <!-- the Router (load-balancer integration) -->
+
+<!--
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.JkRouter"
+    >
+    <constructor-arg><value>${node.name}</value></constructor-arg>
+  </bean>
+-->
+
+  <bean
+    id="Router"
+    class="org.codehaus.wadi.impl.DummyRouter"
+    >
+  </bean>
+
+  <bean
+    id="DatabaseReplicaterFactory"
+    class="org.codehaus.wadi.impl.DatabaseReplicaterFactory"
+    >
+    <constructor-arg><ref bean="DatabaseStore"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg>
+  </bean>
+
+<!--
+  <bean
+    id="DatabaseReplicaterFactory"
+    class="org.codehaus.wadi.impl.DummyReplicaterFactory"
+    >
+  </bean>
+  <bean
+    id="DatabaseReplicaterFactory"
+    class="org.codehaus.wadi.impl.SleepingReplicaterFactory"
+    >
+    <constructor-arg type="long"><value>1000</value></constructor-arg>
+  </bean>
+-->
+
+  <!-- and finally - the SessionManager itself -->
+
+  <bean
+    id="SessionManager"
+    class="org.codehaus.wadi.impl.DistributableManager"
+    >
+    <constructor-arg><ref bean="SessionPool"/></constructor-arg>
+    <constructor-arg><ref bean="AttributesFactory"/></constructor-arg>
+    <constructor-arg><ref bean="ValuePool"/></constructor-arg>
+    <constructor-arg><ref bean="SessionWrapperFactory"/></constructor-arg>
+    <constructor-arg><ref bean="SessionIdFactory"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryContextualiser"/></constructor-arg>
+    <constructor-arg><ref bean="MemoryMap"/></constructor-arg>
+    <constructor-arg><ref bean="Router"/></constructor-arg>
+    <constructor-arg type="boolean"><value>false</value></constructor-arg><!-- errorIfSessionNotAcquired -->
+    <constructor-arg><ref bean="AttributeStreamer"/></constructor-arg>
+    <constructor-arg type="boolean"><value>true</value></constructor-arg><!-- accessOnLoad -->
+    <constructor-arg><ref bean="DatabaseReplicaterFactory"/></constructor-arg>
+  </bean>
+
+
+<!-- JMX support -->
+
+  <!--
+  This allows introspection via e.g mc4j (http://mc4j.sourceforge.net) on a running WADI system.
+
+  If you are using Tomcat 5.0.28, you will need to remove bin/jmx.jar,
+  d/l mx4j-3.0.1 and place mx4j-tools.jar and mx4j-remote.jar into
+  server/lib/.
+
+  If you do not require JMX support, feel free to comment out this section.
+
+  For further information please view the Spring JMX integration documentation.
+  -->
+
+  <!--
+  This will create a new MBeanServer unless one already exists, in which case it will be reused.
+  -->
+<!--
+  <bean id="mbeanServer" class="org.codehaus.wadi.impl.MBeanServerFactoryBean"/>
+-->
+
+  <!--
+  This will register the beans mentioned in its 'beans' map with the MBeanServer.
+  -->
+<!--
+  <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
+    <property name="beans">
+      <map>
+        <entry key="WADI:name=SessionManager"> <ref bean="SessionManager"/> </entry>
+        <entry key="WADI:name=MemoryContextualiser"> <ref bean="MemoryContextualiser"/> </entry>
+        <entry key="WADI:name=DiscContextualiser"> <ref bean="DiscContextualiser"/> </entry>
+        <entry key="WADI:name=Router"> <ref bean="Router"/> </entry>
+        <entry key="WADI:name=SessionIdFactory"> <ref bean="SessionIdFactory"/> </entry>
+      </map>
+    </property>
+    <property name="server" ref="mbeanServer"/>
+  </bean>
+-->
+
+  <!--
+  if you are running your own jndi registry, you may comment this out
+  (untested)
+  -->
+<!--
+  <bean id="registry" class="java.rmi.registry.LocateRegistry" factory-method="createRegistry">
+    <constructor-arg value="${jndi.port}"/>
+  </bean>
+-->
+
+  <!--
+  if you are running your own jmx remote connector, you may comment this out
+  you will also need to remove the reference to 'serverConnector' in the 'exporter' bean definition.
+  (untested)
+  -->
+<!--
+  <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
+    <property name="objectName" value="connector:name=rmi"/>
+    <property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:${jndi.port}/wadi"/>
+    <property name="server"><ref local="mbeanServer"/></property>
+    <property name="threaded" value="true"/>
+    <property name="daemon" value="true"/>
+  </bean>
+-->
+
+</beans>