[infinispan-commits] Infinispan SVN: r2041 - in branches/4.1.x: cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud and 29 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu Jul 15 13:02:59 EDT 2010


Author: manik.surtani at jboss.com
Date: 2010-07-15 13:02:51 -0400 (Thu, 15 Jul 2010)
New Revision: 2041

Added:
   branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java
   branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportSystemProperties.java
   branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportTypedProperties.java
Modified:
   branches/4.1.x/cachestore/cloud/README.txt
   branches/4.1.x/cachestore/cloud/pom.xml
   branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreFunctionalIntegrationTest.java
   branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreIntegrationTest.java
   branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/TableManipulationTest.java
   branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStoreTest.java
   branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStoreTest2.java
   branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java
   branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreFunctionalTest.java
   branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreTest.java
   branches/4.1.x/cachestore/remote/src/test/resources/hotrod-client.properties
   branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java
   branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/async/DefaultAsyncExecutorFactory.java
   branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/consistenthash/ConsistentHashFactory.java
   branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/TransportFactory.java
   branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/CSAIntegrationTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ConsistentHashFactoryTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/DroppedConnectionsTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HeavyLoadConnectionPoolingTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodIntegrationTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/PingOnStartupTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteAsyncAPITest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteCacheManagerTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerRestartTest.java
   branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/retry/AbstractRetryTest.java
   branches/4.1.x/client/hotrod-client/src/test/resources/hotrod-client.properties
   branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/JGroupsConfigBuilder.java
   branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/SuiteResourcesAndLogTest.java
   branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java
   branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TransactionSetup.java
   branches/4.1.x/demos/ec2/src/main/java/org/infinispan/ec2demo/InfluenzaDataLoader.java
   branches/4.1.x/demos/gridfs-webdav/src/main/java/org/infinispan/demos/gridfs/CacheManagerHolder.java
   branches/4.1.x/demos/gridfs-webdav/src/main/webapp/WEB-INF/web.xml
   branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.form
   branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.java
   branches/4.1.x/jopr-plugin/src/main/resources/META-INF/rhq-plugin.xml
   branches/4.1.x/parent/pom.xml
   branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala
   branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/Main.scala
   branches/4.1.x/server/rest/src/main/scala/org/infinispan/rest/StartupListener.scala
   branches/4.1.x/server/rest/src/main/webapp/WEB-INF/web.xml
   branches/4.1.x/server/rest/src/main/webapp/index.html
   branches/4.1.x/server/rest/src/test/scala/org/infinispan/rest/ServerInstance.scala
   branches/4.1.x/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java
Log:
[ISPN-534] (Standardise keys used for System properties, .properties and Properties entries)

Modified: branches/4.1.x/cachestore/cloud/README.txt
===================================================================
--- branches/4.1.x/cachestore/cloud/README.txt	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/cloud/README.txt	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,3 +1,3 @@
- mvn -Pintegration test -Dinfinispan.jclouds.username=$S3_USER -Dinfinispan.jclouds.password=$S3_PWD -Dinfinispan.jclouds.service=s3
- mvn -Pintegration test -Dinfinispan.jclouds.username=$RACKSPACE_USER -Dinfinispan.jclouds.password=$RACKSPACE_PWD -Dinfinispan.jclouds.service=cloudfiles
- mvn -Pintegration test -Dinfinispan.jclouds.username=$AZURE_USER -Dinfinispan.jclouds.password=$AZURE_PWD -Dinfinispan.jclouds.service=azureblob
+ mvn -Pintegration test -Dinfinispan.test.jclouds.username=$S3_USER -Dinfinispan.test.jclouds.password=$S3_PWD -Dinfinispan.test.jclouds.service=s3
+ mvn -Pintegration test -Dinfinispan.test.jclouds.username=$RACKSPACE_USER -Dinfinispan.test.jclouds.password=$RACKSPACE_PWD -Dinfinispan.test.jclouds.service=cloudfiles
+ mvn -Pintegration test -Dinfinispan.test.jclouds.username=$AZURE_USER -Dinfinispan.test.jclouds.password=$AZURE_PWD -Dinfinispan.test.jclouds.service=azureblob

Modified: branches/4.1.x/cachestore/cloud/pom.xml
===================================================================
--- branches/4.1.x/cachestore/cloud/pom.xml	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/cloud/pom.xml	2010-07-15 17:02:51 UTC (rev 2041)
@@ -90,16 +90,16 @@
                <parallel>false</parallel>
                <systemProperties>
                   <property>
-                     <name>infinispan.jclouds.username</name>
-                     <value>${infinispan.jclouds.username}</value>
+                     <name>infinispan.test.jclouds.username</name>
+                     <value>${infinispan.test.jclouds.username}</value>
                   </property>
                   <property>
-                     <name>infinispan.jclouds.password</name>
-                     <value>${infinispan.jclouds.password}</value>
+                     <name>infinispan.test.jclouds.password</name>
+                     <value>${infinispan.test.jclouds.password}</value>
                   </property>
                   <property>
-                     <name>infinispan.jclouds.service</name>
-                     <value>${infinispan.jclouds.service}</value>
+                     <name>infinispan.test.jclouds.service</name>
+                     <value>${infinispan.test.jclouds.service}</value>
                   </property>
                </systemProperties>
             </configuration>

Modified: branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreFunctionalIntegrationTest.java
===================================================================
--- branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreFunctionalIntegrationTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreFunctionalIntegrationTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -43,12 +43,12 @@
    private String secretKey;
    private String cs;
 
-   private static final String sysUsername = System.getProperty("infinispan.jclouds.username");
-   private static final String sysPassword = System.getProperty("infinispan.jclouds.password");
-   private static final String sysService = System.getProperty("infinispan.jclouds.service");
+   private static final String sysUsername = System.getProperty("infinispan.test.jclouds.username");
+   private static final String sysPassword = System.getProperty("infinispan.test.jclouds.password");
+   private static final String sysService = System.getProperty("infinispan.test.jclouds.service");
 
    @BeforeTest
-   @Parameters({"infinispan.jclouds.username", "infinispan.jclouds.password", "infinispan.jclouds.service"})
+   @Parameters({"infinispan.test.jclouds.username", "infinispan.test.jclouds.password", "infinispan.test.jclouds.service"})
    protected void setUpClient(@Optional String JcloudsUsername,
                               @Optional String JcloudsPassword,
                               @Optional String JcloudsService) throws Exception {

Modified: branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreIntegrationTest.java
===================================================================
--- branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreIntegrationTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/cloud/src/integrationtest/java/org/infinispan/loaders/cloud/CloudCacheStoreIntegrationTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -47,12 +47,12 @@
    private String secretKey;
    private String service;
 
-   private static final String sysUsername = System.getProperty("infinispan.jclouds.username");
-   private static final String sysPassword = System.getProperty("infinispan.jclouds.password");
-   private static final String sysService = System.getProperty("infinispan.jclouds.service");
+   private static final String sysUsername = System.getProperty("infinispan.test.jclouds.username");
+   private static final String sysPassword = System.getProperty("infinispan.test.jclouds.password");
+   private static final String sysService = System.getProperty("infinispan.test.jclouds.service");
 
    @BeforeTest
-   @Parameters({"infinispan.jclouds.username", "infinispan.jclouds.password", "infinispan.jclouds.service"})
+   @Parameters({"infinispan.test.jclouds.username", "infinispan.test.jclouds.password", "infinispan.test.jclouds.service"})
    protected void setUpClient(@Optional String JcloudsUsername,
                               @Optional String JcloudsPassword,
                               @Optional String JcloudsService) throws Exception {

Modified: branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/TableManipulationTest.java
===================================================================
--- branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/TableManipulationTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/TableManipulationTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -58,7 +58,6 @@
    @AfterTest
    public void closeConnection() throws SQLException {
       connection.close();
-      UnitTestDatabaseManager.shutdownInMemoryDatabase(cfg);
    }
 
    public void testInsufficientConfigParams() throws Exception {

Modified: branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStoreTest.java
===================================================================
--- branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStoreTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStoreTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -89,7 +89,6 @@
    @AfterTest
    public void destroyStore() throws CacheLoaderException {
       cacheStore.stop();
-      UnitTestDatabaseManager.shutdownInMemoryDatabase(cfc);
    }
 
    public void testMixedStore() throws Exception {

Modified: branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStoreTest2.java
===================================================================
--- branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStoreTest2.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStoreTest2.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -80,7 +80,6 @@
    @AfterTest
    public void destroyStore() throws CacheLoaderException {
       cacheStore.stop();
-      UnitTestDatabaseManager.shutdownInMemoryDatabase(cfc);
    }
 
    /**

Modified: branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java
===================================================================
--- branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -50,7 +50,7 @@
    private static final ConnectionFactoryConfig realConfig = new ConnectionFactoryConfig();
 
    private static AtomicInteger userIndex = new AtomicInteger(0);
-   private static final String DB_TYPE = System.getProperty("infinispan.jdbc", "H2");
+   private static final String DB_TYPE = System.getProperty("infinispan.test.jdbc.db", "H2");
    private static final String H2_DRIVER = org.h2.Driver.class.getName();
 
    static {
@@ -100,38 +100,6 @@
       }
    }
 
-   public static void shutdownInMemoryDatabase(ConnectionFactoryConfig config) {
-
-
-//      Connection conn = null;
-//      Statement st = null;
-//      try {
-//         String shutDownConnection = getShutdownUrl(config);
-//         String url = config.getConnectionUrl();
-//         assert url != null;
-//         try {
-//            conn = DriverManager.getConnection(shutDownConnection);
-//         } catch (SQLException e) {
-//            //expected
-//         }
-////         st = conn.createStatement();
-////         st.execute("SHUTDOWN");
-//      }
-//      catch (Throwable e) {
-//         throw new IllegalStateException(e);
-//      }
-//      finally {
-////         try {
-//////            conn.close();
-//////            st.close();
-////         }
-////         catch (SQLException e) {
-////            e.printStackTrace();
-////         }
-//      }
-
-   }
-
    public static String getDatabaseName(Properties prop) {
       StringTokenizer tokenizer = new StringTokenizer(prop.getProperty("cache.jdbc.url"), ":");
       tokenizer.nextToken();

Modified: branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreFunctionalTest.java
===================================================================
--- branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreFunctionalTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreFunctionalTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -29,7 +29,7 @@
 
       remoteCacheStoreConfig.setRemoteCacheName(CacheContainer.DEFAULT_CACHE_NAME);
       Properties properties = new Properties();
-      properties.put("hotrod-servers", "localhost:"+ hrServer.getPort());
+      properties.put("infinispan.client.hotrod.server_list", "localhost:"+ hrServer.getPort());
       remoteCacheStoreConfig.setHotRodClientProperties(properties);
 
       return remoteCacheStoreConfig;

Modified: branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreTest.java
===================================================================
--- branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/remote/src/test/java/org/infinispan/loaders/remote/RemoteCacheStoreTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -37,7 +37,7 @@
       configuration.setEvictionStrategy(EvictionStrategy.UNORDERED);
       hrServer = TestHelper.startHotRodServer(localCacheManager);
       Properties properties = new Properties();
-      properties.put("hotrod-servers", "localhost:" + hrServer.getPort());
+      properties.put("infinispan.client.hotrod.server_list", "localhost:" + hrServer.getPort());
       remoteCacheStoreConfig.setHotRodClientProperties(properties);
 
       RemoteCacheStore remoteCacheStore = new RemoteCacheStore();

Modified: branches/4.1.x/cachestore/remote/src/test/resources/hotrod-client.properties
===================================================================
--- branches/4.1.x/cachestore/remote/src/test/resources/hotrod-client.properties	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/cachestore/remote/src/test/resources/hotrod-client.properties	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,9 +1,19 @@
 # hopefully this port is available
-hotrod-servers=127.0.0.1:19711
-force-return-value=false
+infinispan.client.hotrod.transport_factory = org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory
+infinispan.client.hotrod.server_list = 127.0.0.1:19711
+infinispan.client.hotrod.marshaller = org.infinispan.marshall.jboss.GenericJBossMarshaller
+infinispan.client.hotrod.async_executor_factory = org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory
+infinispan.client.hotrod.default_executor_factory.pool_size = 1
+infinispan.client.hotrod.default_executor_factory.queue_size = 10000
+infinispan.client.hotrod.hash_function_impl.1 = org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashV1
+infinispan.client.hotrod.tcp_no_delay = true
+infinispan.client.hotrod.ping_on_startup = true
+infinispan.client.hotrod.request_balancing_strategy = org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy
+infinispan.client.hotrod.key_size_estimate = 64
+infinispan.client.hotrod.value_size_estimate = 512
+infinispan.client.hotrod.force_return_values = false
 
-
-##bellow is connection pooling config
+## below is connection pooling config
 maxActive=99
 maxTotal = -98
 maxIdle = 97
\ No newline at end of file

Modified: branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,16 +1,14 @@
 package org.infinispan.client.hotrod;
 
 import org.infinispan.client.hotrod.exceptions.HotRodClientException;
+import org.infinispan.client.hotrod.impl.ConfigurationProperties;
 import org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory;
 import org.infinispan.client.hotrod.impl.operations.OperationsFactory;
 import org.infinispan.client.hotrod.impl.RemoteCacheImpl;
 import org.infinispan.client.hotrod.impl.transport.TransportFactory;
-import org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory;
 import org.infinispan.executors.ExecutorFactory;
 import org.infinispan.manager.CacheContainer;
 import org.infinispan.marshall.Marshaller;
-import org.infinispan.marshall.jboss.GenericJBossMarshaller;
-import org.infinispan.util.TypedProperties;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
 
@@ -18,14 +16,13 @@
 import java.io.InputStream;
 import java.net.InetSocketAddress;
 import java.net.URL;
+import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicInteger;
+
 import static org.infinispan.util.Util.getInstance;
 
 /**
@@ -45,48 +42,49 @@
  * <p/>
  * <b>Configuration:</b>
  * <p/>
- * The cache manager is configured through a {@link java.util.Properties} object passed to the C-tor (there are also
- * "simplified" constructors that rely on default values). Bellow is the list of supported configuration elements:
+ * The cache manager is configured through a {@link java.util.Properties} object passed to the constructor (there are also
+ * "simplified" constructors that rely on default values).
+ * <p/>
+ * Below is the list of supported configuration elements:
  * <ul>
- * <li>
- * hotrod-servers - the initial list of hotrod servers to connect to, specified in the following format: host1:port1;host2:port2...
- * At least one host:port must be specified.
- * </li>
- * <li>
- * request-balancing-strategy - for replicated (vs distributed) hotrod server clusters, the client balances requests to the
- * servers according to this strategy. Defaults to {@link org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy}
- * </li>
- * <li>
- * force-return-value - weather or not to implicitly {@link org.infinispan.client.hotrod.Flag#FORCE_RETURN_VALUE} for all calls.
- * Defaults to false.
- * </li>
- * <li>
- * tcp-no-delay - TCP no delay flag switch. Defaults to true.
- * </li>
- *  <li>
- * ping-on-startup - if true, a ping request is sent to a back end server in order to fetch cluster's topology. True by default.
- * </li>
+ * <li><tt>infinispan.client.hotrod.request_balancing_strategy</tt>, default = org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy.  For replicated (vs distributed) hotrod server clusters, the client balances requests to the
+ * servers according to this strategy.</li>
+ * <li><tt>infinispan.client.hotrod.server_list</tt>, default = 127.0.0.1:11311.  This is the initial list of hotrod servers to connect to, specified in the following format: host1:port1;host2:port2...
+ * At least one host:port must be specified.</li>
+ * <li><tt>infinispan.client.hotrod.force_return_values</tt>, default = false.  Whether or not to implicitly {@link org.infinispan.client.hotrod.Flag#FORCE_RETURN_VALUE} for all calls.</li>
+ * <li><tt>infinispan.client.hotrod.tcp_no_delay</tt>, default = true.  Affects TCP NODELAY on the TCP stack.</li>
+ * <li><tt>infinispan.client.hotrod.ping_on_startup</tt>, default = true.  If true, a ping request is sent to a back end server in order to fetch cluster's topology.</li>
+ * <li><tt>infinispan.client.hotrod.transport_factory</tt>, default = org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory - controls which transport to use.  Currently only the TcpTransport is supported.</li>
+ * <li><tt>infinispan.client.hotrod.marshaller</tt>, default = org.infinispan.marshall.jboss.GenericJBossMarshaller.  Allows you to specify a custom {@link org.infinispan.marshall.Marshaller} implementation to serialize and deserialize user objects.</li>
+ * <li><tt>infinispan.client.hotrod.async_executor_factory</tt>, default = org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory.  Allows you to specify a custom asynchroous executor for async calls.</li>
+ * <li><tt>infinispan.client.hotrod.default_executor_factory.pool_size</tt>, default = 10.  If the default executor is used, this configures the number of threads to initialize the executor with.</li>
+ * <li><tt>infinispan.client.hotrod.default_executor_factory.queue_size</tt>, default = 100000.  If the default executor is used, this configures the queue size to initialize the executor with.</li>
+ * <li><tt>infinispan.client.hotrod.hash_function_impl.1</tt>, default = org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashV1.  This specifies the version of the hash function and consistent hash algorithm in use, and is closely tied with the HotRod server version used.</li>
+ * <li><tt>infinispan.client.hotrod.key_size_estimate</tt>, default = 64.  This hint allows sizing of byte buffers when serializing and deserializing keys, to minimize array resizing.</li>
+ * <li><tt>infinispan.client.hotrod.value_size_estimate</tt>, default = 512.  This hint allows sizing of byte buffers when serializing and deserializing values, to minimize array resizing.</li>
+ * </ul>
  * <br/>
- * <i>below is connection pooling config</i>:
+ * <i>The following properties are related to connection pooling</i>:
  * <p/>
- * <li>maxActive - controls the maximum number of connections per server that are allocated (checked out to client threads, or idle in
+ * <ul>
+ * <li><tt>maxActive</tt> - controls the maximum number of connections per server that are allocated (checked out to client threads, or idle in
  * the pool) at one time. When non-positive, there is no limit to the number of connections per server. When maxActive
  * is reached, the connection pool for that server is said to be exhausted. The default setting for this parameter is
  * -1, i.e. there is no limit.</li>
- * <li>maxTotal - sets a global limit on the number persistent connections that can be in circulation within the combined set of
+ * <li><tt>maxTotal</tt> - sets a global limit on the number persistent connections that can be in circulation within the combined set of
  * servers. When non-positive, there is no limit to the total number of persistent connections in circulation. When
  * maxTotal is exceeded, all connections pools are exhausted. The default setting for this parameter is -1 (no limit).
  * </li>
  * <p/>
- * <li>maxIdle - controls the maximum number of idle persistent connections, per server, at any time. When negative, there is no limit
+ * <li><tt>maxIdle</tt> - controls the maximum number of idle persistent connections, per server, at any time. When negative, there is no limit
  * to the number of connections that may be idle per server. The default setting for this parameter is -1.</li>
  * <p/>
  * <li>
- * whenExhaustedAction - specifies what happens when asking for a connection from a server's pool, and that pool is exhausted. Possible values:
+ * <tt>whenExhaustedAction</tt> - specifies what happens when asking for a connection from a server's pool, and that pool is exhausted. Possible values:
  * <ul>
- * <li> 0 - an exception will be thrown to the calling user</li>
- * <li> 1 - the caller will block (invoke waits until a new or idle connections is available.
- * <li> 2 - a new persistent connection will be created and and returned (essentially making maxActive meaningless.) </li>
+ * <li> <tt>0</tt> - an exception will be thrown to the calling user</li>
+ * <li> <tt>1</tt> - the caller will block (invoke waits until a new or idle connections is available.
+ * <li> <tt>2</tt> - a new persistent connection will be created and and returned (essentially making maxActive meaningless.) </li>
  * </ul>
  * The default whenExhaustedAction setting is 1.
  * </li>
@@ -97,33 +95,25 @@
  * eviction" thread, which runs asynchronously. The idle object evictor does not lock the pool
  * throughout its execution.  The idle connection eviction thread may be configured using the following attributes:
  * <ul>
- * <li>timeBetweenEvictionRunsMillis - indicates how long the eviction thread should sleep before "runs" of examining idle
+ * <li><tt>timeBetweenEvictionRunsMillis</tt> - indicates how long the eviction thread should sleep before "runs" of examining idle
  * connections. When non-positive, no eviction thread will be launched. The default setting for this parameter is
  * 2 minutes </li>
- * <li> minEvictableIdleTimeMillis - specifies the minimum amount of time that an connection may sit idle in the pool before it
+ * <li> <tt>minEvictableIdleTimeMillis</tt> - specifies the minimum amount of time that an connection may sit idle in the pool before it
  * is eligible for eviction due to idle time. When non-positive, no connection will be dropped from the pool due to
  * idle time alone. This setting has no effect unless timeBetweenEvictionRunsMillis > 0. The default setting for this
  * parameter is 1800000(30 minutes). </li>
- * <li> testWhileIdle - indicates whether or not idle connections should be validated by sending an TCP packet to the server,
+ * <li> <tt>testWhileIdle</tt> - indicates whether or not idle connections should be validated by sending an TCP packet to the server,
  * during idle connection eviction runs.  Connections that fail to validate will be dropped from the pool. This setting
  * has no effect unless timeBetweenEvictionRunsMillis > 0.  The default setting for this parameter is true.
  * </li>
- * <li>minIdle - sets a target value for the minimum number of idle connections (per server) that should always be available.
+ * <li><tt>minIdle</tt> - sets a target value for the minimum number of idle connections (per server) that should always be available.
  * If this parameter is set to a positive number and timeBetweenEvictionRunsMillis > 0, each time the idle connection
  * eviction thread runs, it will try to create enough idle instances so that there will be minIdle idle instances
  * available for each server.  The default setting for this parameter is 1. </li>
  * </ul>
  * </li>
  * <li>
- * async-executor-factory - the ExecutorFactory that will hold the thread pool used for async calls. It must implement
- * {@link org.infinispan.executors.ExecutorFactory}. If not specified, defaults to {@link DefaultAsyncExecutorFactory} </li>
- * <li>default-executor-factory.poolSize - used as a configuration for {@link DefaultAsyncExecutorFactory}, and defined the number
- * of threads to keep in the pool. If not specified defaults to 1. </li>
- * <li> default-executor-factory.queueSize - queue to use for holding async requests before they are executed. Defaults
- * to 100000</li>
- * <li>
- * consistent-hash.[version] - see {@link org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashFactory}
- * <ul>
+ * </ul>
  *
  * @author Mircea.Markus at jboss.com
  * @since 4.1
@@ -134,19 +124,7 @@
 
    public static final String HOTROD_CLIENT_PROPERTIES = "hotrod-client.properties";
 
-   public static final String CONF_HOTROD_SERVERS = "hotrod-servers";
-
-   public static final String OVERRIDE_HOTROD_SERVERS = "infinispan.hotrod.client.servers";
-
-   private static final String KEY_SIZE = "marshaller.default-array-size.key";
-
-   private static final String VALUE_SIZE = "marshaller.default-array-size.value";
-
-   private static final int DEFAULT_KEY_SIZE = 64;
-   private static final int DEFAULT_VALUE_SIZE = 512;
-
-
-   private TypedProperties props;
+   private ConfigurationProperties config;
    private TransportFactory transportFactory;
    private Marshaller marshaller;
    private boolean started = false;
@@ -173,17 +151,17 @@
    }
 
    /**
-    * Same as {@link org.infinispan.client.hotrod.RemoteCacheManager#RemoteCacheManager(Marshaller, java.util.Properties, boolean)} with start = true.
+    * Same as {@link #RemoteCacheManager(Marshaller, java.util.Properties, boolean)} with start = true.
     */
-   public RemoteCacheManager(Marshaller hotRodMarshaller, Properties props) {
-      this(hotRodMarshaller, props, false);
+   public RemoteCacheManager(Marshaller marshaller, Properties props) {
+      this(marshaller, props, true);
    }
 
    /**
     * Build a cache manager based on supplied properties.
     */
    public RemoteCacheManager(Properties props, boolean start) {
-      this.props = TypedProperties.toTypedProperties(props);
+      this.config = new ConfigurationProperties(props);
       if (start) start();
    }
 
@@ -207,7 +185,7 @@
       InputStream stream = loader.getResourceAsStream(HOTROD_CLIENT_PROPERTIES);
       if (stream == null) {
          log.warn("Could not find '" + HOTROD_CLIENT_PROPERTIES + "' file in classpath, using defaults.");
-         props = new TypedProperties();
+         config = new ConfigurationProperties();
       } else {
          loadFromStream(stream);
       }
@@ -227,8 +205,7 @@
     * @param start weather or not to start the RemoteCacheManager.
     */
    public RemoteCacheManager(String host, int port, boolean start) {
-      props = new TypedProperties();
-      props.put(TransportFactory.CONF_HOTROD_SERVERS, host + ":" + port);
+      config = new ConfigurationProperties(host + ":" + port);
       if (start) start();
    }
 
@@ -244,8 +221,7 @@
     * server.
     */
    public RemoteCacheManager(String servers, boolean start) {
-      props = new TypedProperties();
-      props.put(TransportFactory.CONF_HOTROD_SERVERS, servers);
+      config = new ConfigurationProperties(servers);
       if (start) start();
    }
 
@@ -302,34 +278,21 @@
 
    @Override
    public void start() {
-      String factory = props.getProperty("transport-factory");
-      if (factory == null) {
-         factory = TcpTransportFactory.class.getName();
-         log.info("'transport-factory' factory not specified, using " + factory);
-      }
+      String factory = config.getTransportFactory();
       transportFactory = (TransportFactory) getInstance(factory);
-      String servers = props.getProperty(CONF_HOTROD_SERVERS);
-      transportFactory.start(props, getStaticConfiguredServers(servers), topologyId);
+      Collection<InetSocketAddress> servers = config.getServerList();
+      transportFactory.start(config, servers, topologyId);
       if (marshaller == null) {
-         String marshaller = props.getProperty("marshaller");
-         if (marshaller == null) {
-            marshaller = GenericJBossMarshaller.class.getName();
-            log.info("'marshaller' not specified, using " + marshaller);
-         }
-         setMarshaller((Marshaller) getInstance(marshaller));
+         String marshallerName = config.getMarshaller();
+         setMarshaller((Marshaller) getInstance(marshallerName));
       }
 
-      String asyncExecutorClass = DefaultAsyncExecutorFactory.class.getName();
-      if (props.contains("asyn-executor-factory")) {
-         asyncExecutorClass = props.getProperty("asyn-executor-factory");
-      }
+      String asyncExecutorClass = config.getAsyncExecutorFactory();
       ExecutorFactory executorFactory = (ExecutorFactory) getInstance(asyncExecutorClass);
-      asyncExecutorService = executorFactory.getExecutor(props);
+      asyncExecutorService = executorFactory.getExecutor(config.getProperties());
 
+      forceReturnValueDefault = config.getForceReturnValues();
 
-      if (props.get("force-return-value") != null && props.get("force-return-value").equals("true")) {
-         forceReturnValueDefault = true;
-      }
       synchronized (cacheName2RemoteCache) {
          for (RemoteCacheImpl remoteCache : cacheName2RemoteCache.values()) {
             startRemoteCache(remoteCache);
@@ -351,12 +314,13 @@
    }
 
    private void loadFromStream(InputStream stream) {
-      props = new TypedProperties();
+      Properties properties = new Properties();
       try {
-         props.load(stream);
+         properties.load(stream);
       } catch (IOException e) {
          throw new HotRodClientException("Issues configuring from client hotrod-client.properties", e);
       }
+      config = new ConfigurationProperties(properties);
    }
 
    private <K, V> RemoteCache<K, V> createRemoteCache(String cacheName, boolean forceReturnValue) {
@@ -374,40 +338,9 @@
 
    private <K, V> void startRemoteCache(RemoteCacheImpl<K, V> result) {
       OperationsFactory operationsFactory = new OperationsFactory(transportFactory, result.getName(), topologyId, forceReturnValueDefault);
-      result.init(marshaller, asyncExecutorService, operationsFactory, props.getIntProperty(KEY_SIZE, DEFAULT_KEY_SIZE),
-              props.getIntProperty(VALUE_SIZE, DEFAULT_VALUE_SIZE));
+      result.init(marshaller, asyncExecutorService, operationsFactory, config.getKeySizeEstimate(), config.getValueSizeEstimate());
    }
 
-   private Set<InetSocketAddress> getStaticConfiguredServers(String servers) {
-      Set<InetSocketAddress> serverAddresses = new HashSet<InetSocketAddress>();
-      if (servers == null) {
-         servers = System.getProperty(OVERRIDE_HOTROD_SERVERS);
-         if (servers != null) {
-            log.info("Overwriting default server properties (-D" + OVERRIDE_HOTROD_SERVERS + ") with " + servers);
-         } else {
-            servers = "127.0.0.1:11311";
-         }
-         log.info("'hotrod-servers' property not specified in config, using " + servers);
-      }
-      StringTokenizer tokenizer = new StringTokenizer(servers, ";");
-      while (tokenizer.hasMoreTokens()) {
-         String server = tokenizer.nextToken();
-         String[] serverDef = tokenizeServer(server);
-         String serverHost = serverDef[0];
-         int serverPort = Integer.parseInt(serverDef[1]);
-         serverAddresses.add(new InetSocketAddress(serverHost, serverPort));
-      }
-      if (serverAddresses.isEmpty()) {
-         throw new IllegalStateException("No hot-rod servers specified!");
-      }
-      return serverAddresses;
-   }
-
-   private String[] tokenizeServer(String server) {
-      StringTokenizer t = new StringTokenizer(server, ":");
-      return new String[]{t.nextToken(), t.nextToken()};
-   }
-
    private void setMarshaller(Marshaller marshaller) {
       this.marshaller = marshaller;
    }

Copied: branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java (from rev 2040, trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java)
===================================================================
--- branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java	                        (rev 0)
+++ branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -0,0 +1,118 @@
+package org.infinispan.client.hotrod.impl;
+
+import org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory;
+import org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy;
+import org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory;
+import org.infinispan.marshall.jboss.GenericJBossMarshaller;
+import org.infinispan.util.TypedProperties;
+
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/**
+ * Encpasulate all config properties here
+ *
+ * @author Manik Surtani
+ * @version 4.1
+ */
+public class ConfigurationProperties {
+   public static final String TRANSPORT_FACTORY = "infinispan.client.hotrod.transport_factory";
+   public static final String SERVER_LIST = "infinispan.client.hotrod.server_list";
+   public static final String MARSHALLER = "infinispan.client.hotrod.marshaller";
+   public static final String ASYNC_EXECUTOR_FACTORY = "infinispan.client.hotrod.async_executor_factory";
+   public static final String DEFAULT_EXECUTOR_FACTORY_POOL_SIZE = "infinispan.client.hotrod.default_executor_factory.pool_size";
+   public static final String TCP_NO_DELAY = "infinispan.client.hotrod.tcp_no_delay";
+   public static final String PING_ON_STARTUP = "infinispan.client.hotrod.ping_on_startup";
+   public static final String REQUEST_BALANCING_STRATEGY = "infinispan.client.hotrod.request_balancing_strategy";
+   public static final String KEY_SIZE_ESTIMATE = "infinispan.client.hotrod.key_size_estimate";
+   public static final String VALUE_SIZE_ESTIMATE = "infinispan.client.hotrod.value_size_estimate";
+   public static final String FORCE_RETURN_VALUES = "infinispan.client.hotrod.force_return_values";
+   public static final String HASH_FUNCTION_PREFIX = "infinispan.client.hotrod.hash_function_impl";
+   public static final String DEFAULT_EXECUTOR_FACTORY_QUEUE_SIZE ="infinispan.client.hotrod.default_executor_factory.queue_size";
+   
+   // defaults
+
+   private static final int DEFAULT_KEY_SIZE = 64;
+   private static final int DEFAULT_VALUE_SIZE = 512;
+
+   private final TypedProperties props;
+
+
+   public ConfigurationProperties() {
+      this.props = new TypedProperties();
+   }
+
+   public ConfigurationProperties(String serverList) {
+      this();
+      props.setProperty(SERVER_LIST, serverList);
+   }
+
+   public ConfigurationProperties(Properties props) {
+      this.props = props == null ? new TypedProperties() : TypedProperties.toTypedProperties(props);
+   }
+
+   public String getTransportFactory() {
+      return props.getProperty(TRANSPORT_FACTORY, TcpTransportFactory.class.getName());
+   }
+
+   public Collection<InetSocketAddress> getServerList() {
+      Set<InetSocketAddress> addresses = new HashSet<InetSocketAddress>();
+      String servers = props.getProperty(SERVER_LIST, "127.0.0.1:11311");
+      for (String server: servers.split(";")) {
+         String[] components = server.trim().split(":");
+         String host = components[0];
+         int port = 11311;
+         if (components.length > 1) port = Integer.parseInt(components[1]);
+         addresses.add(new InetSocketAddress(host, port));
+      }
+
+      if (addresses.isEmpty()) throw new IllegalStateException("No Hot Rod servers specified!");
+      
+      return addresses;
+   }
+
+   public String getMarshaller() {
+      return props.getProperty(MARSHALLER, GenericJBossMarshaller.class.getName());
+   }
+
+   public String getAsyncExecutorFactory() {
+      return props.getProperty(ASYNC_EXECUTOR_FACTORY, DefaultAsyncExecutorFactory.class.getName());
+   }
+
+   public int getDefaultExecutorFactoryPoolSize() {
+      return 99; // TODO
+   }
+
+   public boolean getTcpNoDelay() {
+      return props.getBooleanProperty(TCP_NO_DELAY, true);
+   }
+
+   public boolean getPingOnStartup() {
+      return props.getBooleanProperty(PING_ON_STARTUP, true);
+   }
+
+   public String getRequestBalancingStrategy() {
+      return props.getProperty(REQUEST_BALANCING_STRATEGY, RoundRobinBalancingStrategy.class.getName());
+   }
+
+   public int getKeySizeEstimate() {
+      return props.getIntProperty(KEY_SIZE_ESTIMATE, DEFAULT_KEY_SIZE);
+   }
+
+   public int getValueSizeEstimate() {
+      return props.getIntProperty(VALUE_SIZE_ESTIMATE, DEFAULT_VALUE_SIZE);
+   }
+
+   public boolean getForceReturnValues() {
+      return props.getBooleanProperty(FORCE_RETURN_VALUES, false);
+   }
+
+   public Properties getProperties() {
+      return props;
+   }
+}

Modified: branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/async/DefaultAsyncExecutorFactory.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/async/DefaultAsyncExecutorFactory.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/async/DefaultAsyncExecutorFactory.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,6 +1,9 @@
 package org.infinispan.client.hotrod.impl.async;
 
+import com.sun.corba.se.impl.orb.ORBConfiguratorImpl;
+import org.infinispan.client.hotrod.impl.ConfigurationProperties;
 import org.infinispan.executors.ExecutorFactory;
+import org.infinispan.util.TypedProperties;
 
 import java.util.Properties;
 import java.util.concurrent.ExecutorService;
@@ -12,19 +15,14 @@
 
 /**
  * Default implementation for {@link org.infinispan.executors.ExecutorFactory} based on an {@link ThreadPoolExecutor}.
- * Accepts following configuration parameters:
- * <ul>
- *  <li> - default-executor-factory.poolSize = the fixed size fo the pool</li>
- *  <li> - default-executor-factory.queueSize = The size of the {@link LinkedBlockingQueue} backing up the executor</li>
- * </ul>
  *
  * @author Mircea.Markus at jboss.com
  * @since 4.1
  */
 public class DefaultAsyncExecutorFactory implements ExecutorFactory {
-   public static final String THREAD_NAME = "Hotrod-client-async-pool";
+   public static final String THREAD_NAME = "HotRod-client-async-pool";
    public static final AtomicInteger counter = new AtomicInteger(0);
-   private int poolSize = 1;
+   private int poolSize = 10;
    private int queueSize = 100000;
 
    @Override
@@ -45,11 +43,8 @@
    }
 
    private void readParams(Properties props) {
-      if (props.contains("default-executor-factory.poolSize")) {
-         poolSize = Integer.parseInt(props.getProperty("default-executor-factory.poolSize"));
-      }
-      if (props.contains("default-executor-factory.queueSize")) {
-         queueSize = Integer.parseInt("default-executor-factory.queueSize");
-      }
+      TypedProperties tp = TypedProperties.toTypedProperties(props);
+      poolSize = tp.getIntProperty(ConfigurationProperties.DEFAULT_EXECUTOR_FACTORY_POOL_SIZE, 10);
+      queueSize = tp.getIntProperty(ConfigurationProperties.DEFAULT_EXECUTOR_FACTORY_QUEUE_SIZE, 100000);
    }
 }

Modified: branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/consistenthash/ConsistentHashFactory.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/consistenthash/ConsistentHashFactory.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/consistenthash/ConsistentHashFactory.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,6 +1,7 @@
 package org.infinispan.client.hotrod.impl.consistenthash;
 
 
+import org.infinispan.client.hotrod.impl.ConfigurationProperties;
 import org.infinispan.util.Util;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
@@ -10,12 +11,14 @@
 import java.util.Map;
 import java.util.Properties;
 
+import static org.infinispan.client.hotrod.impl.ConfigurationProperties.HASH_FUNCTION_PREFIX;
+
 /**
  * Factory for {@link org.infinispan.client.hotrod.impl.consistenthash.ConsistentHash} function. It will try to look
  * into the configuration for consistent hash definitions as follows:
  * consistent-hash.[version]=[fully qualified class implementing ConsistentHash]
  * e.g.
- * consistent-hash.1=org.infinispan.client.hotrod.impl.consistenthash.ConsitentHashV1
+ * infinispan.client.hotrod.hash_function_impl.1=org.infinispan.client.hotrod.impl.consistenthash.ConsitentHashV1
  * <p/>
  * If no CH function is defined for a certain version, then it will be defaulted to "org.infinispan.client.hotrod.impl.ConsistentHashV[version]".
  * E.g. if the server indicates that in use CH is version 1, and it is not defined within the configuration, it will be defaulted to
@@ -30,13 +33,14 @@
 
    private final Map<Integer, String> version2ConsistentHash = new HashMap<Integer, String>();
 
-   public void init(Properties props) {
-      for (String propName : props.stringPropertyNames()) {
-         if (propName.indexOf("consistent-hash") >= 0) {
+   public void init(ConfigurationProperties config) {
+
+      for (String propName : config.getProperties().stringPropertyNames()) {
+         if (propName.startsWith(HASH_FUNCTION_PREFIX)) {
             if (log.isTraceEnabled()) log.trace("Processing consistent hash: " + propName);
-            String versionString = propName.substring("consistent-hash.".length());
+            String versionString = propName.substring((HASH_FUNCTION_PREFIX + ".").length());
             int version = Integer.parseInt(versionString);
-            String hashFunction = props.getProperty(propName);
+            String hashFunction = config.getProperties().getProperty(propName);
             version2ConsistentHash.put(version, hashFunction);
             if (log.isTraceEnabled()) {
                log.trace("Added consistent hash version " + version + ": " + hashFunction);
@@ -51,6 +55,7 @@
          if (log.isTraceEnabled()) log.trace("No hash function configured for version " + version);
          hashFunctionClass = ConsistentHashFactory.class.getPackage().getName() + ".ConsistentHashV" + version;
          if (log.isTraceEnabled()) log.trace("Trying to use default value: " + hashFunctionClass);
+         version2ConsistentHash.put(version, hashFunctionClass);
       }
       return (ConsistentHash) Util.getInstance(hashFunctionClass);
    }

Modified: branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/TransportFactory.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/TransportFactory.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/TransportFactory.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,5 +1,7 @@
 package org.infinispan.client.hotrod.impl.transport;
 
+import org.infinispan.client.hotrod.impl.ConfigurationProperties;
+
 import java.net.InetSocketAddress;
 import java.util.Collection;
 import java.util.LinkedHashMap;
@@ -15,13 +17,11 @@
  */
 public interface TransportFactory {
 
-   public static final String CONF_HOTROD_SERVERS = "hotrod-servers";
-
    public Transport getTransport();
 
    public void releaseTransport(Transport transport);
 
-   void start(Properties props, Collection<InetSocketAddress> staticConfiguredServers, AtomicInteger topologyId);
+   void start(ConfigurationProperties props, Collection<InetSocketAddress> staticConfiguredServers, AtomicInteger topologyId);
 
    void updateServers(Collection<InetSocketAddress> newServers);
 

Modified: branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -3,6 +3,7 @@
 import net.jcip.annotations.ThreadSafe;
 import org.apache.commons.pool.impl.GenericKeyedObjectPool;
 import org.infinispan.client.hotrod.exceptions.TransportException;
+import org.infinispan.client.hotrod.impl.ConfigurationProperties;
 import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHash;
 import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashFactory;
 import org.infinispan.client.hotrod.impl.transport.Transport;
@@ -41,17 +42,14 @@
    private final ConsistentHashFactory hashFactory = new ConsistentHashFactory();
 
    @Override
-   public void start(Properties props, Collection<InetSocketAddress> staticConfiguredServers, AtomicInteger topologyId) {
-      hashFactory.init(props);
-      String pingOnStartup = props.getProperty("ping-on-startup");
+   public void start(ConfigurationProperties cfg, Collection<InetSocketAddress> staticConfiguredServers, AtomicInteger topologyId) {
+      hashFactory.init(cfg);
+      boolean pingOnStartup = cfg.getPingOnStartup();
       servers = staticConfiguredServers;
-      String balancerClass = props.getProperty("request-balancing-strategy", RoundRobinBalancingStrategy.class.getName());
+      String balancerClass = cfg.getRequestBalancingStrategy();
       balancer = (RequestBalancingStrategy) Util.getInstance(balancerClass);
-      tcpNoDelay = Boolean.valueOf(props.getProperty("tcp-no-delay", "true"));
-      if (log.isDebugEnabled()) log.debug("TCP no delay flag value is: {0}", tcpNoDelay);
-      boolean skipPingOnStartup = pingOnStartup != null && !Boolean.valueOf(pingOnStartup);
-      log.trace("'ping-on-startup' set to " + !skipPingOnStartup);
-      PropsKeyedObjectPoolFactory poolFactory = new PropsKeyedObjectPoolFactory(new TransportObjectFactory(this, topologyId, !skipPingOnStartup), props);
+      tcpNoDelay = cfg.getTcpNoDelay();
+      PropsKeyedObjectPoolFactory poolFactory = new PropsKeyedObjectPoolFactory(new TransportObjectFactory(this, topologyId, pingOnStartup), cfg.getProperties());
       createAndPreparePool(staticConfiguredServers, poolFactory);
       balancer.setServers(servers);
    }

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/CSAIntegrationTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/CSAIntegrationTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/CSAIntegrationTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -100,8 +100,8 @@
 
       //Important: this only connects to one of the two servers!
       Properties props = new Properties();
-      props.put("hotrod-servers", "localhost:" + hotRodServer2.getPort() + ";localhost:" + hotRodServer2.getPort());
-      props.put("ping-on-startup", "false");
+      props.put("infinispan.client.hotrod.server_list", "localhost:" + hotRodServer2.getPort() + ";localhost:" + hotRodServer2.getPort());
+      props.put("infinispan.client.hotrod.ping_on_startup", "false");
       remoteCacheManager = new RemoteCacheManager(props);
       remoteCache = remoteCacheManager.getCache();
 

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -2,6 +2,7 @@
 
 import org.apache.commons.pool.impl.GenericKeyedObjectPool;
 import org.infinispan.Cache;
+import org.infinispan.client.hotrod.impl.ConfigurationProperties;
 import org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory;
 import org.infinispan.commands.VisitableCommand;
 import org.infinispan.context.InvocationContext;
@@ -67,7 +68,7 @@
 
       String servers = TestHelper.getServersString(hotRodServer1, hotRodServer2);
       Properties hotrodClientConf = new Properties();
-      hotrodClientConf.put(RemoteCacheManager.CONF_HOTROD_SERVERS, servers);
+      hotrodClientConf.put(ConfigurationProperties.SERVER_LIST, servers);
       hotrodClientConf.put("maxActive", 2);
       hotrodClientConf.put("maxTotal", 8);
       hotrodClientConf.put("maxIdle", 6);
@@ -79,7 +80,7 @@
       hotrodClientConf.put("testWhileIdle", "true");
       hotrodClientConf.put("minIdle", "-5");
       hotrodClientConf.put("lifo", "true");
-      hotrodClientConf.put("ping-on-startup", "false");
+      hotrodClientConf.put("infinispan.client.hotrod.ping_on_startup", "false");
 
       remoteCacheManager = new RemoteCacheManager(hotrodClientConf);
       remoteCache = remoteCacheManager.getCache();

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ConsistentHashFactoryTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ConsistentHashFactoryTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ConsistentHashFactoryTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,5 +1,6 @@
 package org.infinispan.client.hotrod;
 
+import org.infinispan.client.hotrod.impl.ConfigurationProperties;
 import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHash;
 import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashFactory;
 import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashV1;
@@ -19,9 +20,9 @@
    public void testPropertyCorrectlyRead() {
       Properties propos = new Properties();
       String value = "org.infinispan.client.hotrod.impl.consistenthash.SomeCustomConsitentHashV1";
-      propos.put("consistent-hash.1", value);
+      propos.put(ConfigurationProperties.HASH_FUNCTION_PREFIX + ".1", value);
       ConsistentHashFactory chf = new ConsistentHashFactory();
-      chf.init(propos);
+      chf.init(new ConfigurationProperties(propos));
       String s = chf.getVersion2ConsistentHash().get(1);
       assert s != null;
       assert value.equals(s);

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/DroppedConnectionsTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/DroppedConnectionsTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/DroppedConnectionsTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -36,7 +36,7 @@
       hrClientConfig.put("minIdle","1");
       hrClientConfig.put("maxIdle","2");
       hrClientConfig.put("maxActive","2");
-      hrClientConfig.put("hotrod-servers", "127.0.0.1:" + hotRodServer.getPort());
+      hrClientConfig.put("infinispan.client.hotrod.server_list", "127.0.0.1:" + hotRodServer.getPort());
       remoteCacheManager = new RemoteCacheManager(hrClientConfig);
       rc = remoteCacheManager.getCache();
       transportFactory = (TcpTransportFactory) TestingUtil.extractField(remoteCacheManager, "transportFactory");

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HeavyLoadConnectionPoolingTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HeavyLoadConnectionPoolingTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HeavyLoadConnectionPoolingTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -41,10 +41,10 @@
       hotRodServer = TestHelper.startHotRodServer(cacheManager);
 
       Properties hotrodClientConf = new Properties();
-      hotrodClientConf.put("hotrod-servers", "localhost:"+hotRodServer.getPort());
+      hotrodClientConf.put("infinispan.client.hotrod.server_list", "localhost:"+hotRodServer.getPort());
       hotrodClientConf.put("timeBetweenEvictionRunsMillis", "3000");
       hotrodClientConf.put("minEvictableIdleTimeMillis", "1000");
-      hotrodClientConf.put("ping-on-startup", "1000");
+      hotrodClientConf.put("infinispan.client.hotrod.ping_on_startup", "true");
       remoteCacheManager = new RemoteCacheManager(hotrodClientConf);
       remoteCache = remoteCacheManager.getCache();
 

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodIntegrationTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodIntegrationTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodIntegrationTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -63,7 +63,7 @@
 
    protected RemoteCacheManager getRemoteCacheManager() {
       Properties config = new Properties();
-      config.put("hotrod-servers", "127.0.0.1:" + hotrodServer.getPort());
+      config.put("infinispan.client.hotrod.server_list", "127.0.0.1:" + hotrodServer.getPort());
       return new RemoteCacheManager(config);
    }
 

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/PingOnStartupTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/PingOnStartupTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/PingOnStartupTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -56,8 +56,8 @@
 
    public void testTopologyFetched() throws Exception {
       Properties props = new Properties();
-      props.put("hotrod-servers", "localhost:" + hotRodServer2.getPort() + ";localhost:" + hotRodServer2.getPort());
-      props.put("ping-on-startup", "true");
+      props.put("infinispan.client.hotrod.server_list", "localhost:" + hotRodServer2.getPort() + ";localhost:" + hotRodServer2.getPort());
+      props.put("infinispan.client.hotrod.ping_on_startup", "true");
       props.put("timeBetweenEvictionRunsMillis", "500");
       RemoteCacheManager remoteCacheManager = new RemoteCacheManager(props);
 
@@ -78,8 +78,8 @@
 
    public void testTopologyNotFetched() {
       Properties props = new Properties();
-      props.put("hotrod-servers", "localhost:" + hotRodServer2.getPort() + ";localhost:" + hotRodServer2.getPort());
-      props.put("ping-on-startup", "false");
+      props.put("infinispan.client.hotrod.server_list", "localhost:" + hotRodServer2.getPort() + ";localhost:" + hotRodServer2.getPort());
+      props.put("infinispan.client.hotrod.ping_on_startup", "false");
       RemoteCacheManager remoteCacheManager = new RemoteCacheManager(props);
 
       TcpTransportFactory tcpConnectionFactory = (TcpTransportFactory) TestingUtil.extractField(remoteCacheManager, "transportFactory");

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteAsyncAPITest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteAsyncAPITest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteAsyncAPITest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -30,8 +30,8 @@
       cache = cm.getCache();
       hotrodServer = TestHelper.startHotRodServer(cm);
       Properties props = new Properties();
-      props.put("hotrod-servers", "127.0.0.1:" + hotrodServer.getPort());
-      props.put("force-return-value","true");
+      props.put("infinispan.client.hotrod.server_list", "127.0.0.1:" + hotrodServer.getPort());
+      props.put("infinispan.client.hotrod.force_return_values","true");
       props.put("testOnBorrow", "false");
       rcm = new RemoteCacheManager(props);
       c = rcm.getCache(true);

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteCacheManagerTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteCacheManagerTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RemoteCacheManagerTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -19,13 +19,11 @@
 
    EmbeddedCacheManager cacheManager = null;
    HotRodServer hotrodServer = null;
-   private String prevValue;
 
    @Override
    protected EmbeddedCacheManager createCacheManager() throws Exception {
       cacheManager = TestCacheManagerFactory.createLocalCacheManager();
       hotrodServer = TestHelper.startHotRodServer(cacheManager);
-      prevValue = System.setProperty(RemoteCacheManager.OVERRIDE_HOTROD_SERVERS, "localhost:" + hotrodServer.getPort());
       return cacheManager;
    }
 
@@ -37,11 +35,6 @@
       } catch (Exception e) {
          e.printStackTrace();
       }
-      if (prevValue != null) {
-         System.setProperty(RemoteCacheManager.OVERRIDE_HOTROD_SERVERS, prevValue);
-      } else {
-         System.getProperties().remove(RemoteCacheManager.OVERRIDE_HOTROD_SERVERS);
-      }
    }
 
    public void testNoArgConstructor() {

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerRestartTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerRestartTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerRestartTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -38,7 +38,7 @@
       log.info("Started server on port: " + hotrodServer.getPort());
 
       Properties config = new Properties();
-      config.put("hotrod-servers", "127.0.0.1:" + hotrodServer.getPort());
+      config.put("infinispan.client.hotrod.server_list", "127.0.0.1:" + hotrodServer.getPort());
       config.put("timeBetweenEvictionRunsMillis", "2000");      
       remoteCacheManager = new RemoteCacheManager(config);
       defaultRemote = remoteCacheManager.getCache();

Modified: branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/retry/AbstractRetryTest.java
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/retry/AbstractRetryTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/retry/AbstractRetryTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -68,8 +68,8 @@
       waitForClusterToForm();
 
       Properties clientConfig = new Properties();
-      clientConfig.put("hotrod-servers", "localhost:" + hotRodServer2.getPort());
-      clientConfig.put("force-return-value", "true");
+      clientConfig.put("infinispan.client.hotrod.server_list", "localhost:" + hotRodServer2.getPort());
+      clientConfig.put("infinispan.client.hotrod.force_return_values", "true");
       clientConfig.put("maxActive",1); //this ensures that only one server is active at a time
 
       remoteCacheManager = new RemoteCacheManager(clientConfig);

Modified: branches/4.1.x/client/hotrod-client/src/test/resources/hotrod-client.properties
===================================================================
--- branches/4.1.x/client/hotrod-client/src/test/resources/hotrod-client.properties	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/client/hotrod-client/src/test/resources/hotrod-client.properties	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,9 +1,20 @@
-hotrod-servers=127.0.0.1:11311
-force-return-value=false
-ping-on-startup=true 
+# hopefully this port is available
+infinispan.client.hotrod.transport_factory = org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory
+infinispan.client.hotrod.server_list = 127.0.0.1:11311
+infinispan.client.hotrod.marshaller = org.infinispan.marshall.jboss.GenericJBossMarshaller
+infinispan.client.hotrod.async_executor_factory = org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory
+infinispan.client.hotrod.default_executor_factory.pool_size = 1
+infinispan.client.hotrod.default_executor_factory.queue_size = 10000
+infinispan.client.hotrod.hash_function_impl.1 = org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashV1
+infinispan.client.hotrod.tcp_no_delay = true
+infinispan.client.hotrod.ping_on_startup = true
+infinispan.client.hotrod.request_balancing_strategy = org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy
+infinispan.client.hotrod.key_size_estimate = 64
+infinispan.client.hotrod.value_size_estimate = 512
+infinispan.client.hotrod.force_return_values = false
 
-##bellow is connection pooling config
-maxActive= -1
+## below is connection pooling config
+maxActive=-1
 maxTotal = -1
 maxIdle = -1
 whenExhaustedAction = 1
@@ -12,8 +23,3 @@
 testWhileIdle = true
 minIdle = 1
 
-asyn-executor-factory=org.infinispan.client.hotrod.DefaultAsyncExecutorFactory
-default-executor-factory.poolSize = 1;
-default-executor-factory.queueSize = 100000
-consistent-hash.1=org.infinispan.client.hotrod.impl.consistenthash.ConsitentHashV1
-

Copied: branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportSystemProperties.java (from rev 2040, trunk/core/src/main/java/org/infinispan/util/LegacyKeySupportSystemProperties.java)
===================================================================
--- branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportSystemProperties.java	                        (rev 0)
+++ branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportSystemProperties.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -0,0 +1,42 @@
+package org.infinispan.util;
+
+import org.infinispan.util.logging.Log;
+import org.infinispan.util.logging.LogFactory;
+
+import java.util.Properties;
+
+/**
+ * A wrapper around system properties that supports legacy keys
+ *
+ * @author Manik Surtani
+ * @version 4.1
+ */
+public class LegacyKeySupportSystemProperties {
+
+   private static final Log log = LogFactory.getLog(LegacyKeySupportSystemProperties.class);
+
+   private static void warnLegacy(String oldKey, String newKey) {
+      if (log.isInfoEnabled()) log.info("Could not find value for key {0}, but did find value under deprecated key {1}. Please use {0} as support for {1} will eventually be discontinued.", newKey, oldKey);
+   }
+
+   public static String getProperty(String key, String legacyKey) {
+      String val = System.getProperty(key);
+      if (val == null) {
+         val = System.getProperty(legacyKey);
+         if (val != null) warnLegacy(legacyKey, key);
+      }
+      return val;
+   }
+
+   public static String getProperty(String key, String legacyKey, String defaultValue) {
+      String val = System.getProperty(key);
+      if (val == null) {
+         val = System.getProperty(legacyKey);
+         if (val != null)
+            warnLegacy(legacyKey, key);
+         else
+            val = defaultValue;
+      }
+      return val;
+   }   
+}

Copied: branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportTypedProperties.java (from rev 2040, trunk/core/src/main/java/org/infinispan/util/LegacyKeySupportTypedProperties.java)
===================================================================
--- branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportTypedProperties.java	                        (rev 0)
+++ branches/4.1.x/core/src/main/java/org/infinispan/util/LegacyKeySupportTypedProperties.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -0,0 +1,111 @@
+package org.infinispan.util;
+
+import org.infinispan.util.logging.Log;
+import org.infinispan.util.logging.LogFactory;
+
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * An extension of TypedProperties that has support for legacy keys.  Construct this Properties type with mappings
+ * of currently expected keys to their legacy, deprecated counterparts and you will simply have to look up the new,
+ * updated keys and still be able to support the legacy keys, while logging a message that an old key was used. 
+ *
+ * @author Manik Surtani
+ * @version 4.1
+ */
+public class LegacyKeySupportTypedProperties extends TypedProperties {
+   private final Map<String, String> legacyKeyMapping;
+   private static final Log log = LogFactory.getLog(LegacyKeySupportTypedProperties.class);
+
+   public LegacyKeySupportTypedProperties(Properties p, Map<String, String> legacyKeyMapping) {
+      super(p);
+      this.legacyKeyMapping = legacyKeyMapping;
+   }
+
+   public LegacyKeySupportTypedProperties(Map<String, String> legacyKeyMapping) {
+      this.legacyKeyMapping = legacyKeyMapping;
+   }
+
+   private void warnLegacy(String oldKey, String newKey) {
+      if (log.isInfoEnabled()) log.info("Could not find value for key {0}, but did find value under deprecated key {1}. Please use {0} as support for {1} will eventually be discontinued.", newKey, oldKey);
+   }
+
+   @Override
+   public String getProperty(String key) {
+      if (containsKey(key))
+         return super.getProperty(key);
+      else {
+         String legacyKey = legacyKeyMapping.get(key);
+         if (legacyKey == null) return null;
+         String val = super.getProperty(legacyKey);
+         if (val != null) warnLegacy(legacyKey, key);
+         return val;
+      }
+   }
+
+   @Override
+   public String getProperty(String key, String defaultValue) {
+      if (containsKey(key))
+         return super.getProperty(key);
+      else {
+         String legacyKey = legacyKeyMapping.get(key);
+         if (legacyKey == null) return defaultValue;
+         String val = super.getProperty(legacyKey);
+         if (val != null) {
+            warnLegacy(legacyKey, key);
+            return val;
+         } else {
+            return defaultValue;
+         }
+      }
+   }
+
+   @Override
+   public int getIntProperty(String key, int defaultValue) {
+      if (containsKey(key))
+         return super.getIntProperty(key, defaultValue);
+      else {
+         String legacyKey = legacyKeyMapping.get(key);
+         if (legacyKey == null) return defaultValue;
+         if (containsKey(legacyKey)) {
+            warnLegacy(legacyKey, key);
+            return super.getIntProperty(legacyKey, defaultValue);
+         } else {
+            return defaultValue;
+         }
+      }
+   }
+
+   @Override
+   public long getLongProperty(String key, long defaultValue) {
+      if (containsKey(key))
+         return super.getLongProperty(key, defaultValue);
+      else {
+         String legacyKey = legacyKeyMapping.get(key);
+         if (legacyKey == null) return defaultValue;
+         if (containsKey(legacyKey)) {
+            warnLegacy(legacyKey, key);
+            return super.getLongProperty(legacyKey, defaultValue);
+         } else {
+            return defaultValue;
+         }
+      }
+   }
+
+   @Override
+   public boolean getBooleanProperty(String key, boolean defaultValue) {
+      if (containsKey(key))
+         return super.getBooleanProperty(key, defaultValue);
+      else {
+         String legacyKey = legacyKeyMapping.get(key);
+         if (legacyKey == null) return defaultValue;
+         if (containsKey(legacyKey)) {
+            warnLegacy(legacyKey, key);
+            return super.getBooleanProperty(legacyKey, defaultValue);
+         } else {
+            return defaultValue;
+         }
+      }
+   }
+}

Modified: branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/JGroupsConfigBuilder.java
===================================================================
--- branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/JGroupsConfigBuilder.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/JGroupsConfigBuilder.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -2,6 +2,7 @@
 
 import org.infinispan.config.parsing.JGroupsStackParser;
 import org.infinispan.config.parsing.XmlConfigHelper;
+import org.infinispan.util.LegacyKeySupportSystemProperties;
 import org.jgroups.util.Util;
 import org.w3c.dom.Element;
 
@@ -66,7 +67,7 @@
    private static final Pattern UDP_MCAST_PORT = Pattern.compile("mcast_port=[^;]*");
 
    static {
-      JGROUPS_STACK = System.getProperties().getProperty("protocol.stack", "tcp");
+      JGROUPS_STACK = LegacyKeySupportSystemProperties.getProperty("infinispan.test.jgroups.protocol", "protocol.stack", "tcp");
       System.out.println("Transport protocol stack used = " + JGROUPS_STACK);
 
       try {

Modified: branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/SuiteResourcesAndLogTest.java
===================================================================
--- branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/SuiteResourcesAndLogTest.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/SuiteResourcesAndLogTest.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -32,7 +32,7 @@
       log("sun.arch.data.model = " + System.getProperty("sun.arch.data.model"));
       log("sun.cpu.endian = " + System.getProperty("sun.cpu.endian"));
       log("protocol.stack = " + System.getProperty("protocol.stack"));
-//      log("infinispan.marshaller.class = " + System.getProperty("infinispan.marshaller.class"));
+      log("infinispan.test.jgroups.protocol = " + System.getProperty("infinispan.test.jgroups.protocol"));
       String preferIpV4 = System.getProperty("java.net.preferIPv4Stack");
       log("java.net.preferIPv4Stack = " + preferIpV4);
       log("java.net.preferIPv6Stack = " + System.getProperty("java.net.preferIPv6Stack"));

Modified: branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java
===================================================================
--- branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -8,6 +8,7 @@
 import org.infinispan.manager.DefaultCacheManager;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
+import org.infinispan.util.LegacyKeySupportSystemProperties;
 import org.infinispan.util.Util;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
@@ -31,7 +32,7 @@
 
    private static AtomicInteger jmxDomainPostfix = new AtomicInteger();
 
-   public static final String MARSHALLER = System.getProperties().getProperty("infinispan.marshaller.class");
+   public static final String MARSHALLER = LegacyKeySupportSystemProperties.getProperty("infinispan.test.marshaller.class", "infinispan.marshaller.class");
    private static Log log = LogFactory.getLog(TestCacheManagerFactory.class);
 
    private static ThreadLocal<PerThreadCacheManagers> perThreadCacheManagers = new ThreadLocal<PerThreadCacheManagers>() {

Modified: branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TransactionSetup.java
===================================================================
--- branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TransactionSetup.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/core/src/test/java/org/infinispan/test/fwk/TransactionSetup.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -23,6 +23,7 @@
 
 import org.infinispan.transaction.lookup.DummyTransactionManagerLookup;
 import org.infinispan.transaction.lookup.JBossStandaloneJTAManagerLookup;
+import org.infinispan.util.LegacyKeySupportSystemProperties;
 
 import javax.transaction.TransactionManager;
 import javax.transaction.UserTransaction;
@@ -43,7 +44,7 @@
       TransactionManager getManager();
    }
 
-   public static final String JTA = System.getProperty("infinispan.tm");
+   public static final String JTA = LegacyKeySupportSystemProperties.getProperty("infinispan.test.jta.tm", "infinispan.tm");
    public static final String JBOSS_TM = "jbosstm";
 
    private static Operations operations;

Modified: branches/4.1.x/demos/ec2/src/main/java/org/infinispan/ec2demo/InfluenzaDataLoader.java
===================================================================
--- branches/4.1.x/demos/ec2/src/main/java/org/infinispan/ec2demo/InfluenzaDataLoader.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/demos/ec2/src/main/java/org/infinispan/ec2demo/InfluenzaDataLoader.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -6,6 +6,7 @@
 import com.martiansoftware.jsap.JSAPResult;
 import org.infinispan.Cache;
 import org.infinispan.remoting.transport.Address;
+import org.infinispan.util.LegacyKeySupportSystemProperties;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
 import org.xml.sax.SAXException;
@@ -30,7 +31,7 @@
 	private static final Log myLogger = LogFactory.getLog(InfluenzaDataLoader.class);
 
 	public void createCache(String configFile) throws IOException {
-		String cfgFileName = System.getProperty("infinispan.demo.cfg");		
+		String cfgFileName = LegacyKeySupportSystemProperties.getProperty("infinispan.configuration", "infinispan.demo.cfg");		
 		if (cfgFileName == null)
 			cfgFileName = configFile;
 		

Modified: branches/4.1.x/demos/gridfs-webdav/src/main/java/org/infinispan/demos/gridfs/CacheManagerHolder.java
===================================================================
--- branches/4.1.x/demos/gridfs-webdav/src/main/java/org/infinispan/demos/gridfs/CacheManagerHolder.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/demos/gridfs-webdav/src/main/java/org/infinispan/demos/gridfs/CacheManagerHolder.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -17,7 +17,7 @@
 
    private static final Log log = LogFactory.getLog(CacheManagerHolder.class);
 
-   private static final String CFG_PROPERTY = "infinispan.gridfs.cfg";
+   private static final String CFG_PROPERTY = "infinispan.config";
    private static final String DATA_CACHE_NAME_PROPERTY = "infinispan.gridfs.cache.data";
    private static final String METADATA_CACHE_NAME_PROPERTY = "infinispan.gridfs.cache.metadata";
 
@@ -27,7 +27,7 @@
    @Override
    public void init(ServletConfig cfg) throws ServletException {
       super.init(cfg);
-      String cfgFile = System.getProperty(CFG_PROPERTY, cfg.getInitParameter(CFG_PROPERTY));
+      String cfgFile = cfg.getInitParameter(CFG_PROPERTY);
       if (cfgFile == null)
          cacheContainer = new DefaultCacheManager();
       else {
@@ -39,7 +39,7 @@
          }
       }
 
-      dataCacheName = System.getProperty(DATA_CACHE_NAME_PROPERTY, cfg.getInitParameter(DATA_CACHE_NAME_PROPERTY));
-      metadataCacheName = System.getProperty(METADATA_CACHE_NAME_PROPERTY, cfg.getInitParameter(METADATA_CACHE_NAME_PROPERTY));
+      dataCacheName = cfg.getInitParameter(DATA_CACHE_NAME_PROPERTY);
+      metadataCacheName = cfg.getInitParameter(METADATA_CACHE_NAME_PROPERTY);
    }
 }

Modified: branches/4.1.x/demos/gridfs-webdav/src/main/webapp/WEB-INF/web.xml
===================================================================
--- branches/4.1.x/demos/gridfs-webdav/src/main/webapp/WEB-INF/web.xml	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/demos/gridfs-webdav/src/main/webapp/WEB-INF/web.xml	2010-07-15 17:02:51 UTC (rev 2041)
@@ -13,19 +13,10 @@
       <servlet-name>InitServlet</servlet-name>
       <servlet-class>org.infinispan.demos.gridfs.CacheManagerHolder</servlet-class>
 
-      <!--
-         All of the values below can be overridden using JVM system properties.
-         E.g.,
-
-            -Dinfinispan.gridfs.cache.data=some_other_cache
-
-         would override the data cache used to 'some_other_cache' as defined in your configuration XML.
-         -->
-      
       <!-- specify your cache configuration file -->
       <init-param>
-         <param-name>infinispan.gridfs.cfg</param-name>
-         <param-value>default.xml</param-value>
+         <param-name>infinispan.configuration</param-name>
+         <param-value>infinispan.xml</param-value>
       </init-param>
 
       <!-- specify your data cache name, as defined in your configuration file -->
@@ -109,32 +100,6 @@
       <url-pattern>/*</url-pattern>
    </servlet-mapping>
 
-   <!-- ================ Security Constraints for Testing =============== -->
-
-   <!--
-       <security-constraint>
-       <web-resource-collection>
-       <web-resource-name>The Entire Web Application</web-resource-name>
-       <url-pattern>/*</url-pattern>
-       </web-resource-collection>
-       <auth-constraint>
-       <role-name>webdav</role-name>
-       </auth-constraint>
-       </security-constraint>
-
-       <login-config>
-       <auth-method>BASIC</auth-method>
-       <realm-name>Tomcat Supported Realm</realm-name>
-       </login-config>
-
-       <security-role>
-       <description>
-       An example role defined in "conf/tomcat-users.xml"
-       </description>
-       <role-name>webdav</role-name>
-       </security-role>
-    -->
-
    <welcome-file-list>
       <welcome-file />
    </welcome-file-list>

Modified: branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.form
===================================================================
--- branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.form	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.form	2010-07-15 17:02:51 UTC (rev 2041)
@@ -120,7 +120,7 @@
                 </constraints>
                 <properties>
                   <font size="12" style="2"/>
-                  <text value="Note that you can specify a configuration file to use by passing in -Dinfinispan.demo.cfg=file:/path/to/config.xml"/>
+                  <text value="Note that you can specify a configuration file to use by passing in -Dinfinispan.configuration=file:/path/to/config.xml"/>
                 </properties>
               </component>
             </children>

Modified: branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.java
===================================================================
--- branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/demos/gui/src/main/java/org/infinispan/demo/InfinispanDemo.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -13,6 +13,7 @@
 import org.infinispan.notifications.cachemanagerlistener.annotation.ViewChanged;
 import org.infinispan.notifications.cachemanagerlistener.event.ViewChangedEvent;
 import org.infinispan.remoting.transport.Address;
+import org.infinispan.util.LegacyKeySupportSystemProperties;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
 
@@ -85,7 +86,7 @@
    private CachedDataTableModel cachedDataTableModel;
 
    public static void main(String[] args) {
-      String cfgFileName = System.getProperty("infinispan.demo.cfg", "config-samples/gui-demo-cache-config.xml");
+      String cfgFileName = LegacyKeySupportSystemProperties.getProperty("infinispan.configuration", "infinispan.demo.cfg", "config-samples/gui-demo-cache-config.xml");
       frame = new JFrame("Infinispan GUI Demo (STOPPED)");
       frame.setContentPane(new InfinispanDemo(cfgFileName).panel1);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Modified: branches/4.1.x/jopr-plugin/src/main/resources/META-INF/rhq-plugin.xml
===================================================================
--- branches/4.1.x/jopr-plugin/src/main/resources/META-INF/rhq-plugin.xml	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/jopr-plugin/src/main/resources/META-INF/rhq-plugin.xml	2010-07-15 17:02:51 UTC (rev 2041)
@@ -61,8 +61,13 @@
           >
 
 
-           <operation name="Activation.resetStatistics" displayName="[Activation] Reset statistics" description="Resets statistics gathered by this component">
+           <operation name="Transactions.resetStatistics" displayName="[Transactions] Reset Statistics" description="Resets statistics gathered by this component">
            </operation>
+           <operation name="Transactions.setStatisticsEnabled" displayName="[Transactions] Enable/disable statistics" description="Enable/disable statistics">
+              <parameters>
+                 <c:simple-property name="enabled" description="Whether statistics should be enabled or disabled (true/false)"/>
+              </parameters>
+           </operation>
            <operation name="RpcManager.resetStatistics" displayName="[RpcManager] Reset statistics" description="Resets statistics gathered by this component">
            </operation>
            <operation name="RpcManager.setStatisticsEnabled" displayName="[RpcManager] Enable/disable statistics" description="Enable/disable statistics">
@@ -70,8 +75,27 @@
                  <c:simple-property name="enabled" description="Whether statistics should be enabled or disabled (true/false)"/>
               </parameters>
            </operation>
+           <operation name="Activation.resetStatistics" displayName="[Activation] Reset statistics" description="Resets statistics gathered by this component">
+           </operation>
            <operation name="CacheLoader.resetStatistics" displayName="[CacheLoader] Reset Statistics" description="Resets statistics gathered by this component">
            </operation>
+           <operation name="DeadlockDetectingLockManager.resetStatistics" displayName="[DeadlockDetectingLockManager] Reset statistics" description="Resets statistics gathered by this component">
+           </operation>
+           <operation name="CacheStore.resetStatistics" displayName="[CacheStore] Reset statistics" description="Resets statistics gathered by this component">
+           </operation>
+           <operation name="Invalidation.resetStatistics" displayName="[Invalidation] Reset statistics" description="Resets statistics gathered by this component">
+           </operation>
+           <operation name="Invalidation.setStatisticsEnabled" displayName="[Invalidation] Enable/disable statistics" description="Enable/disable statistics">
+              <parameters>
+                 <c:simple-property name="enabled" description="Whether statistics should be enabled or disabled (true/false)"/>
+              </parameters>
+           </operation>
+           <operation name="Statistics.resetStatistics" displayName="[Statistics] Reset Statistics (Statistics)" description="Resets statistics gathered by this component">
+           </operation>
+           <operation name="Cache.start" displayName="[Cache] Starts cache." description="Starts the cache.">
+           </operation>
+           <operation name="Cache.stop" displayName="[Cache] Stops cache." description="Stops the cache.">
+           </operation>
            <operation name="DistributionManager.isAffectedByRehash" displayName="[DistributionManager] Could key be affected by reshah?" description="Determines whether a given key is affected by an ongoing rehash, if any.">
               <parameters>
                  <c:simple-property name="key" description="Key to check"/>
@@ -96,45 +120,17 @@
                  <c:simple-property name="operationResult" />
               </results>
            </operation>
-           <operation name="DeadlockDetectingLockManager.resetStatistics" displayName="[DeadlockDetectingLockManager] Reset statistics" description="Resets statistics gathered by this component">
-           </operation>
            <operation name="Passivation.resetStatistics" displayName="[Passivation] Reset statistics" description="Resets statistics gathered by this component">
            </operation>
-           <operation name="Invalidation.resetStatistics" displayName="[Invalidation] Reset statistics" description="Resets statistics gathered by this component">
-           </operation>
-           <operation name="Invalidation.setStatisticsEnabled" displayName="[Invalidation] Enable/disable statistics" description="Enable/disable statistics">
-              <parameters>
-                 <c:simple-property name="enabled" description="Whether statistics should be enabled or disabled (true/false)"/>
-              </parameters>
-           </operation>
-           <operation name="Statistics.resetStatistics" displayName="[Statistics] Reset Statistics (Statistics)" description="Resets statistics gathered by this component">
-           </operation>
-           <operation name="Cache.start" displayName="[Cache] Starts cache." description="Starts the cache.">
-           </operation>
-           <operation name="Cache.stop" displayName="[Cache] Stops cache." description="Stops the cache.">
-           </operation>
-           <operation name="CacheStore.resetStatistics" displayName="[CacheStore] Reset statistics" description="Resets statistics gathered by this component">
-           </operation>
-           <operation name="Transactions.resetStatistics" displayName="[Transactions] Reset Statistics" description="Resets statistics gathered by this component">
-           </operation>
-           <operation name="Transactions.setStatisticsEnabled" displayName="[Transactions] Enable/disable statistics" description="Enable/disable statistics">
-              <parameters>
-                 <c:simple-property name="enabled" description="Whether statistics should be enabled or disabled (true/false)"/>
-              </parameters>
-           </operation>
 
-           <metric property="Activation.Activations" displayName="[Activation] Number of cache entries activated" displayType="detail" units="none" dataType="measurement"
-                   description="Number of activation events" />
-           <metric property="Activation.CacheLoaderLoads" displayName="[Activation] Number of cache store loads" displayType="detail" units="none" dataType="measurement"
-                   description="Number of entries loaded from cache store" />
-           <metric property="Activation.CacheLoaderMisses" displayName="[Activation] Number of cache store load misses" displayType="detail" units="none" dataType="measurement"
-                   description="Number of entries that did not exist in cache store" />
-           <metric property="LockManager.ConcurrencyLevel" displayName="[LockManager] Concurrency level" displayType="detail" units="none" dataType="trait"
-                   description="The concurrency level that the MVCC Lock Manager has been configured with." />
-           <metric property="LockManager.NumberOfLocksHeld" displayName="[LockManager] Number of locks held" displayType="detail" units="none" dataType="measurement"
-                   description="The number of exclusive locks that are held." />
-           <metric property="LockManager.NumberOfLocksAvailable" displayName="[LockManager] Number of locks available" displayType="detail" units="none" dataType="measurement"
-                   description="The number of exclusive locks that are available." />
+           <metric property="Transactions.StatisticsEnabled" displayName="[Transactions] Statistics enabled" displayType="detail" units="none" dataType="trait"
+                   description="Statistics enabled" />
+           <metric property="Transactions.Prepares" displayName="[Transactions] Prepares" displayType="summary" units="none" dataType="measurement"
+                   description="Number of transaction prepares performed since last reset" />
+           <metric property="Transactions.Commits" displayName="[Transactions] Commits" displayType="summary" units="none" dataType="measurement"
+                   description="Number of transaction commits performed since last reset" />
+           <metric property="Transactions.Rollbacks" displayName="[Transactions] Rollbacks" displayType="summary" units="none" dataType="measurement"
+                   description="Number of transaction rollbacks performed since last reset" />
            <metric property="RpcManager.Members" displayName="[RpcManager] Cluster members" displayType="summary" units="none" dataType="trait"
                    description="List of members in the cluster" />
            <metric property="RpcManager.StatisticsEnabled" displayName="[RpcManager] Statistics enabled" displayType="detail" units="none" dataType="trait"
@@ -153,14 +149,16 @@
                    description="Successful replications as a ratio of total replications in numeric double format" />
            <metric property="RpcManager.AverageReplicationTime" displayName="[RpcManager] Average time spent in the transport layer" displayType="summary" units="milliseconds" dataType="measurement"
                    description="The average time spent in the transport layer, in milliseconds" />
+           <metric property="Activation.Activations" displayName="[Activation] Number of cache entries activated" displayType="detail" units="none" dataType="measurement"
+                   description="Number of activation events" />
+           <metric property="Activation.CacheLoaderLoads" displayName="[Activation] Number of cache store loads" displayType="detail" units="none" dataType="measurement"
+                   description="Number of entries loaded from cache store" />
+           <metric property="Activation.CacheLoaderMisses" displayName="[Activation] Number of cache store load misses" displayType="detail" units="none" dataType="measurement"
+                   description="Number of entries that did not exist in cache store" />
            <metric property="CacheLoader.CacheLoaderLoads" displayName="[CacheLoader] Number of cache store loads" displayType="detail" units="none" dataType="measurement"
                    description="Number of entries loaded from cache store" />
            <metric property="CacheLoader.CacheLoaderMisses" displayName="[CacheLoader] Number of cache store load misses" displayType="detail" units="none" dataType="measurement"
                    description="Number of entries that did not exist in cache store" />
-           <metric property="DistributionManager.RehashInProgress" displayName="[DistributionManager] Is rehash in progress?" displayType="detail" units="none" dataType="trait"
-                   description="Checks whether the node is involved in a rehash." />
-           <metric property="DistributionManager.JoinComplete" displayName="[DistributionManager] Is join completed?" displayType="detail" units="none" dataType="trait"
-                   description="If true, the node has successfully joined the grid and is considered to hold state.  If false, the join process is still in progress." />
            <metric property="DeadlockDetectingLockManager.OverlapWithNotDeadlockAwareLockOwners" displayName="[DeadlockDetectingLockManager] Number of unsolvable deadlock situations" displayType="detail" units="none" dataType="measurement"
                    description="Number of situtations when we try to determine a deadlock and the other lock owner is e.g. a local tx. In this scenario we cannot run the deadlock detection mechanism" />
            <metric property="DeadlockDetectingLockManager.LocallyInterruptedTransactions" displayName="[DeadlockDetectingLockManager] Number of interrupted local transactions" displayType="detail" units="none" dataType="measurement"
@@ -177,8 +175,8 @@
                    description="The number of exclusive locks that are held." />
            <metric property="DeadlockDetectingLockManager.NumberOfLocksAvailable" displayName="[DeadlockDetectingLockManager] Number of locks available" displayType="detail" units="none" dataType="measurement"
                    description="The number of exclusive locks that are available." />
-           <metric property="Passivation.Passivations" displayName="[Passivation] Number of cache passivations" displayType="detail" units="none" dataType="measurement"
-                   description="Number of passivation events" />
+           <metric property="CacheStore.CacheLoaderStores" displayName="[CacheStore] Number of cache stores" displayType="detail" units="none" dataType="measurement"
+                   description="number of cache loader stores" />
            <metric property="Invalidation.StatisticsEnabled" displayName="[Invalidation] Statistics enabled" displayType="detail" units="none" dataType="trait"
                    description="Statistics enabled" />
            <metric property="Invalidation.Invalidations" displayName="[Invalidation] Number of invalidations" displayType="detail" units="none" dataType="measurement"
@@ -213,16 +211,18 @@
                    description="Returns the cache status" />
            <metric property="Cache.CacheName" displayName="[Cache] Cache name" displayType="summary" units="none" dataType="trait"
                    description="Returns the cache name" />
-           <metric property="CacheStore.CacheLoaderStores" displayName="[CacheStore] Number of cache stores" displayType="detail" units="none" dataType="measurement"
-                   description="number of cache loader stores" />
-           <metric property="Transactions.StatisticsEnabled" displayName="[Transactions] Statistics enabled" displayType="detail" units="none" dataType="trait"
-                   description="Statistics enabled" />
-           <metric property="Transactions.Prepares" displayName="[Transactions] Prepares" displayType="summary" units="none" dataType="measurement"
-                   description="Number of transaction prepares performed since last reset" />
-           <metric property="Transactions.Commits" displayName="[Transactions] Commits" displayType="summary" units="none" dataType="measurement"
-                   description="Number of transaction commits performed since last reset" />
-           <metric property="Transactions.Rollbacks" displayName="[Transactions] Rollbacks" displayType="summary" units="none" dataType="measurement"
-                   description="Number of transaction rollbacks performed since last reset" />
+           <metric property="DistributionManager.RehashInProgress" displayName="[DistributionManager] Is rehash in progress?" displayType="detail" units="none" dataType="trait"
+                   description="Checks whether the node is involved in a rehash." />
+           <metric property="DistributionManager.JoinComplete" displayName="[DistributionManager] Is join completed?" displayType="detail" units="none" dataType="trait"
+                   description="If true, the node has successfully joined the grid and is considered to hold state.  If false, the join process is still in progress." />
+           <metric property="LockManager.ConcurrencyLevel" displayName="[LockManager] Concurrency level" displayType="detail" units="none" dataType="trait"
+                   description="The concurrency level that the MVCC Lock Manager has been configured with." />
+           <metric property="LockManager.NumberOfLocksHeld" displayName="[LockManager] Number of locks held" displayType="detail" units="none" dataType="measurement"
+                   description="The number of exclusive locks that are held." />
+           <metric property="LockManager.NumberOfLocksAvailable" displayName="[LockManager] Number of locks available" displayType="detail" units="none" dataType="measurement"
+                   description="The number of exclusive locks that are available." />
+           <metric property="Passivation.Passivations" displayName="[Passivation] Number of cache passivations" displayType="detail" units="none" dataType="measurement"
+                   description="Number of passivation events" />
 
 
        </service>

Modified: branches/4.1.x/parent/pom.xml
===================================================================
--- branches/4.1.x/parent/pom.xml	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/parent/pom.xml	2010-07-15 17:02:51 UTC (rev 2041)
@@ -211,8 +211,8 @@
                <forkMode>none</forkMode>
                <systemProperties>
                   <property>
-                     <name>protocol.stack</name>
-                     <value>${protocol.stack}</value>
+                     <name>infinispan.test.jgroups.protocol</name>
+                     <value>${infinispan.test.jgroups.protocol}</value>
                   </property>
                   <property>
                      <name>bind.address</name>
@@ -223,8 +223,8 @@
                      <value>true</value>
                   </property>
                   <property>
-                     <name>infinispan.marshaller.class</name>
-                     <value>${marshaller.class}</value>
+                     <name>infinispan.test.marshaller.class</name>
+                     <value>${infinispan.test.marshaller.class}</value>
                   </property>
                </systemProperties>
                <trimStackTrace>false</trimStackTrace>
@@ -377,14 +377,14 @@
          </activation>
          <properties>
             <defaultTestGroup>functional,unit</defaultTestGroup>
-            <protocol.stack>tcp</protocol.stack>
+            <infinispan.test.jgroups.protocol>tcp</infinispan.test.jgroups.protocol>
          </properties>
       </profile>
       <profile>
          <id>test-functional</id>
          <properties>
             <defaultTestGroup>functional</defaultTestGroup>
-            <protocol.stack>tcp</protocol.stack>
+            <infinispan.test.jgroups.protocol>tcp</infinispan.test.jgroups.protocol>
          </properties>
       </profile>
       <profile>
@@ -409,7 +409,7 @@
          <id>debug-tests</id>
          <properties>
             <testNGListener>org.infinispan.test.fwk.DebuggingUnitTestNGListener</testNGListener>
-            <protocol.stack>tcp</protocol.stack>
+            <infinispan.test.jgroups.protocol>tcp</infinispan.test.jgroups.protocol>
          </properties>
       </profile>
    </profiles>

Modified: branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala
===================================================================
--- branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala	2010-07-15 17:02:51 UTC (rev 2041)
@@ -14,12 +14,12 @@
  * @since 4.1
  */
 abstract class AbstractProtocolServer(threadNamePrefix: String) extends ProtocolServer {
-   private var host: String = _
-   private var port: Int = _
-   private var masterThreads: Int = _
-   private var workerThreads: Int = _
-   private var transport: Transport = _
-   private var cacheManager: EmbeddedCacheManager = _
+   protected var host: String = _
+   protected var port: Int = _
+   protected var masterThreads: Int = _
+   protected var workerThreads: Int = _
+   protected var transport: Transport = _
+   protected var cacheManager: EmbeddedCacheManager = _
 
    def start(properties: Properties, cacheManager: EmbeddedCacheManager, defaultPort: Int) {
       this.host = properties.getProperty(PROP_KEY_HOST, HOST_DEFAULT)
@@ -62,6 +62,10 @@
       // Start default cache
       startDefaultCache
       val address =  new InetSocketAddress(host, port)
+      startTransport(address, idleTimeout, tcpNoDelay, sendBufSize, recvBufSize)
+   }
+
+   def startTransport(address: InetSocketAddress, idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int) {
       val encoder = getEncoder
       val nettyEncoder = if (encoder != null) new EncoderAdapter(encoder) else null
       transport = new NettyTransport(this, nettyEncoder, address, masterThreads, workerThreads, idleTimeout,

Modified: branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/Main.scala
===================================================================
--- branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/Main.scala	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/server/core/src/main/scala/org/infinispan/server/core/Main.scala	2010-07-15 17:02:51 UTC (rev 2041)
@@ -3,7 +3,6 @@
 import scala.collection.JavaConversions._
 import scala.collection.mutable
 import scala.collection.immutable
-import org.infinispan.util.Util
 import java.io.IOException
 import java.security.{PrivilegedAction, AccessController}
 import java.util.concurrent.{ThreadFactory, ExecutionException, Callable, Executors}
@@ -12,6 +11,7 @@
 import org.infinispan.manager.{CacheContainer, DefaultCacheManager}
 import java.util.Properties
 import org.infinispan.config.GlobalConfiguration.ShutdownHookBehavior
+import org.infinispan.util.{TypedProperties, Util}
 
 /**
  * Main class for server startup.
@@ -46,9 +46,8 @@
     * information to get the server up and running. Use System
     * properties for defaults.
     */
-   private val props: Properties = new Properties(System.getProperties)
+   private val props: Properties = new TypedProperties(System.getProperties)
    
-   private var programName: String = _
    private var server: ProtocolServer = _
 
    def main(args: Array[String]) {
@@ -81,12 +80,45 @@
       // First process the command line to pickup custom props/settings
       processCommandLine(args)
 
+      val properties = new Properties
+
+      val masterThreads = props.getProperty(PROP_KEY_MASTER_THREADS).toInt
+      if (masterThreads < 0)
+         throw new IllegalArgumentException("Master threads can't be lower than 0: " + masterThreads)
+      
+      val workerThreads = props.getProperty(PROP_KEY_WORKER_THREADS).toInt
+      if (workerThreads < 0)
+         throw new IllegalArgumentException("Worker threads can't be lower than 0: " + masterThreads)
+
       var protocol = props.getProperty(PROP_KEY_PROTOCOL)
       if (protocol == null) {
          System.err.println("ERROR: Please indicate protocol to run with -r parameter")
          showAndExit
       }
       
+      val idleTimeout = props.getProperty(PROP_KEY_IDLE_TIMEOUT).toInt
+      if (idleTimeout < -1)
+         throw new IllegalArgumentException("Idle timeout can't be lower than -1: " + idleTimeout)
+
+      val tcpNoDelay = props.getProperty(PROP_KEY_TCP_NO_DELAY)
+      try {
+         tcpNoDelay.toBoolean
+      } catch {
+         case n: NumberFormatException => {
+            throw new IllegalArgumentException("TCP no delay flag switch must be a boolean: " + tcpNoDelay)
+         }
+      }
+
+      val sendBufSize = props.getProperty(PROP_KEY_SEND_BUF_SIZE).toInt
+      if (sendBufSize < 0) {
+         throw new IllegalArgumentException("Send buffer size can't be lower than 0: " + sendBufSize)
+      }
+
+      val recvBufSize = props.getProperty(PROP_KEY_SEND_BUF_SIZE).toInt
+      if (recvBufSize < 0) {
+         throw new IllegalArgumentException("Send buffer size can't be lower than 0: " + sendBufSize)
+      }
+
       // TODO: move class name and protocol number to a resource file under the corresponding project
       val clazz = protocol match {
          case "memcached" => "org.infinispan.server.memcached.MemcachedServer"
@@ -95,9 +127,28 @@
       }
       val server = Util.getInstance(clazz).asInstanceOf[ProtocolServer]
 
+      val port = {
+         if (props.getProperty(PROP_KEY_PORT) == null) {
+            protocol match {
+               case "memcached" => 11211
+               case "hotrod" => 11311
+               case "websocket" => 8181
+            }
+         } else {
+            props.getProperty(PROP_KEY_PORT).toInt
+         }
+      }
+      props.setProperty(PROP_KEY_PORT, port.toString)
+
+      // If no proxy host given, external host defaults to configured host
+      val externalHost = props.getProperty(PROP_KEY_PROXY_HOST, props.getProperty(PROP_KEY_HOST))
+      props.setProperty(PROP_KEY_PROXY_HOST, externalHost)
+      // If no proxy port given, external port defaults to configured port
+      val externalPort = props.getProperty(PROP_KEY_PROXY_PORT, props.getProperty(PROP_KEY_PORT))
+      props.setProperty(PROP_KEY_PROXY_PORT, externalPort)
+
       val configFile = props.getProperty(PROP_KEY_CACHE_CONFIG)
       val cacheManager = if (configFile == null) new DefaultCacheManager else new DefaultCacheManager(configFile)
-      // Servers need a shutdown hook to close down network layer, so there's no need for an extra shutdown hook.
       // Removing Infinispan's hook also makes shutdown procedures for server and cache manager sequential, avoiding
       // issues with having the JGroups channel disconnected before it's removed itself from the topology view.
       cacheManager.getGlobalConfiguration.setShutdownHookBehavior(ShutdownHookBehavior.DONT_REGISTER)
@@ -106,7 +157,6 @@
    }
 
    private def processCommandLine(args: Array[String]) {
-      programName = System.getProperty("program.name", "startServer")
       var sopts = "-:hD:Vp:l:m:t:c:r:i:n:s:e:o:x:"
       var lopts = Array(
          new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h'),
@@ -124,12 +174,12 @@
          new LongOpt("proxy_host", LongOpt.REQUIRED_ARGUMENT, null, 'o'),
          new LongOpt("proxy_port", LongOpt.REQUIRED_ARGUMENT, null, 'x')
          )
-      var getopt = new Getopt(programName, args, sopts, lopts)
+      var getopt = new Getopt("startServer", args, sopts, lopts)
       var code: Int = 0
       while ((({code = getopt.getopt; code})) != -1) {
          code match {
             case ':' | '?' => System.exit(1)
-            case 1 => System.err.println(programName + ": unused non-option argument: " + getopt.getOptarg)
+            case 1 => System.err.println("startServer: unused non-option argument: " + getopt.getOptarg)
             case 'h' => showAndExit
             case 'V' => {
                Version.printFullVersionInformation
@@ -176,7 +226,7 @@
    }
 
    private def showAndExit {
-      println("usage: " + programName + " [options]")
+      println("usage: startServer [options]")
       println
       println("options:")
       println("    -h, --help                         Show this help message")

Modified: branches/4.1.x/server/rest/src/main/scala/org/infinispan/rest/StartupListener.scala
===================================================================
--- branches/4.1.x/server/rest/src/main/scala/org/infinispan/rest/StartupListener.scala	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/server/rest/src/main/scala/org/infinispan/rest/StartupListener.scala	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,8 +1,9 @@
 package org.infinispan.rest
 
-import javax.servlet.{ServletContextListener, ServletContextEvent}
 import org.infinispan.manager.DefaultCacheManager
 import scala.collection.JavaConversions._
+import javax.servlet.{ServletConfig, ServletContextListener, ServletContextEvent}
+import javax.servlet.http.HttpServlet
 
 /**
  * To init the cache manager. Nice to do this on startup as any config problems will be picked up before any
@@ -12,28 +13,20 @@
  * @author Galder Zamarreno
  * @since 4.0
  */
-class StartupListener extends ServletContextListener {
-  val INFINISPAN_CONF = "infinispan.server.rest.cfg"
+class StartupListener extends HttpServlet {
+   override def init(cfg: ServletConfig) {
+      super.init(cfg)
+      val cfgFile = cfg getInitParameter "infinispan.config"
+      if (cfgFile == null)
+         ManagerInstance.instance = new DefaultCacheManager
+      else {
+         ManagerInstance.instance = new DefaultCacheManager(cfgFile)
+      }
 
-  override def contextInitialized(ev: ServletContextEvent) {
-     ManagerInstance.instance = makeCacheManager(ev)
-     ManagerInstance.instance.start
-
      // Start defined caches to avoid issues with lazily started caches
      for (cacheName <- asIterator(ManagerInstance.instance.getCacheNames.iterator))
         ManagerInstance.instance.getCache(cacheName)
      // Finally, start default cache as well
      ManagerInstance.instance.getCache[String, Any]
   }
-
-  override def contextDestroyed(ev: ServletContextEvent) =  ManagerInstance.instance.stop
-
-  /** Prefer the system property, but also allow the servlet context to set the path to the config */
-  def makeCacheManager(ev: ServletContextEvent) = 
-    (System.getProperty(INFINISPAN_CONF), ev.getServletContext.getAttribute(INFINISPAN_CONF)) match {
-      case (s: String, null) => new DefaultCacheManager(s)
-      case (null, s: String) => new DefaultCacheManager(s)
-      case _ => new DefaultCacheManager //fall back to LOCAL mode
-    }
-
 }
\ No newline at end of file

Modified: branches/4.1.x/server/rest/src/main/webapp/WEB-INF/web.xml
===================================================================
--- branches/4.1.x/server/rest/src/main/webapp/WEB-INF/web.xml	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/server/rest/src/main/webapp/WEB-INF/web.xml	2010-07-15 17:02:51 UTC (rev 2041)
@@ -1,38 +1,47 @@
 <?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">
+<!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>Infinispan cache REST server</display-name>
+   <display-name>Infinispan cache REST server</display-name>
 
-    
-    <context-param>
-        <param-name>resteasy.resources</param-name>
-        <param-value>org.infinispan.rest.Server</param-value>
-    </context-param>
+   <context-param>
+      <param-name>resteasy.resources</param-name>
+      <param-value>org.infinispan.rest.Server</param-value>
+   </context-param>
 
 
-    <listener>
-        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
-    </listener>
+   <listener>
+      <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
+   </listener>
 
-    <listener>
-        <listener-class>org.infinispan.rest.StartupListener</listener-class>
-    </listener>
+   <servlet>
+      <servlet-name>InitServlet</servlet-name>
+      <servlet-class>org.infinispan.rest.StartupListener</servlet-class>
 
+      <!-- specify your cache configuration file -->
+      <init-param>
+         <param-name>infinispan.configuration</param-name>
+         <param-value>infinispan.xml</param-value>
+      </init-param>
 
-    <servlet>
-        <servlet-name>Resteasy</servlet-name>
-        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
-    </servlet>
+      <load-on-startup>1</load-on-startup>
+   </servlet>
 
-    <servlet-mapping>
-        <servlet-name>Resteasy</servlet-name>
-        <url-pattern>/rest/*</url-pattern>
-    </servlet-mapping>
+   <servlet>
+      <servlet-name>Resteasy</servlet-name>
+      <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
+   </servlet>
 
-    <welcome-file-list>
-        <welcome-file>/index.html</welcome-file>
-    </welcome-file-list>
+   <servlet-mapping>
+      <servlet-name>Resteasy</servlet-name>
+      <url-pattern>/rest/*</url-pattern>
+   </servlet-mapping>
 
+   <welcome-file-list>
+      <welcome-file>/index.html</welcome-file>
+   </welcome-file-list>
 
+
 </web-app>
+

Modified: branches/4.1.x/server/rest/src/main/webapp/index.html
===================================================================
--- branches/4.1.x/server/rest/src/main/webapp/index.html	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/server/rest/src/main/webapp/index.html	2010-07-15 17:02:51 UTC (rev 2041)
@@ -42,7 +42,7 @@
 			<h4>
                 Configuration</h4>                                    <!-- class="proj_define"  FOR BOX EFFECT -->
 <p>
-    Out of the box, Infinispan will use its LOCAL mode cache. To set a custom configuration, create an infinispan config file (xml) and set the PATH to it as either the System property called "infinispan.server.rest.cfg" (without quotes, obviously) or a web context attribute of the same name. The value should be a path to your config file (eg on the command line: -Dinfinispan.server.rest.cfg=/somewhere/infinispan.xml). Please note that the REST server only allows interaction with either the default cache named as "___defaultcache" or one of the named caches in the configuration file. This is because the REST server starts default and pre-defined caches on startup in order to provide a more consistent behaivour. So, if you don't pass any configuration file, you'll only be able to interact with the default cache. To interact with more caches, pass a configuration file with the desired named caches.
+    Out of the box, Infinispan will use its LOCAL mode cache. To set a custom configuration, create an infinispan config file (xml) and set the PATH to it in your web.xml file, under the key <b>infinispan.configuration</b>.  See the sample web.xml file for details.  The value should be a path to your config file. Please note that the REST server only allows interaction with either the default cache named as "___defaultcache" or one of the named caches in the configuration file. This is because the REST server starts default and pre-defined caches on startup in order to provide a more consistent behaivour. So, if you don't pass any configuration file, you'll only be able to interact with the default cache. To interact with more caches, pass a configuration file with the desired named caches.
 		</div><div style="clear: both;"></div><div id="commonContent"  >
 
     <h5>

Modified: branches/4.1.x/server/rest/src/test/scala/org/infinispan/rest/ServerInstance.scala
===================================================================
--- branches/4.1.x/server/rest/src/test/scala/org/infinispan/rest/ServerInstance.scala	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/server/rest/src/test/scala/org/infinispan/rest/ServerInstance.scala	2010-07-15 17:02:51 UTC (rev 2041)
@@ -3,7 +3,7 @@
 
 import org.apache.commons.httpclient.{HttpClient, HttpMethodBase}
 import org.jboss.resteasy.plugins.server.servlet.{ResteasyBootstrap, HttpServletDispatcher}
-import org.mortbay.jetty.servlet.Context
+import org.mortbay.jetty.servlet.{ServletHolder, ServletHandler, Context}
 
 /**
  * 
@@ -19,8 +19,10 @@
     val ctx = new Context(server, "/", Context.SESSIONS)
     ctx.setInitParams(params)
     ctx.addEventListener(new ResteasyBootstrap)
-    ctx.addEventListener(new StartupListener)
     ctx.addServlet(classOf[HttpServletDispatcher], "/rest/*")
+    val sh = new ServletHolder(classOf[StartupListener])
+    sh setInitOrder 1
+    ctx.addServlet(sh, "/listener/*")
     server.setStopAtShutdown(true)
     server.start
     server

Modified: branches/4.1.x/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java
===================================================================
--- branches/4.1.x/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java	2010-07-15 16:21:29 UTC (rev 2040)
+++ branches/4.1.x/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java	2010-07-15 17:02:51 UTC (rev 2041)
@@ -78,38 +78,38 @@
    }
 
    @Override
-   public void start(Properties properties, EmbeddedCacheManager cacheManager) {
-      if (properties == null)
-         properties = new Properties();
+   public void start(Properties p, EmbeddedCacheManager cacheManager) {
+      Properties properties = p == null ? new Properties() : p;
+      super.start(properties, cacheManager, 8181);
+   }
 
-      String host = properties.getProperty("infinispan.server.host", "127.0.0.1");
-      int port = Integer.parseInt(properties.getProperty("infinispan.server.port", "8181"));
-      int masterThreads = Integer.parseInt(properties.getProperty("infinispan.server.master_threads"));
-      int workerThreads = Integer.parseInt(properties.getProperty("infinispan.server.worker_threads"));
-
-      InetSocketAddress address = new InetSocketAddress(host, port);
-
+   @Override
+   public void startTransport(InetSocketAddress address, int idleTimeout, boolean tcpNoDelay, int sendBufSize, int recvBufSize) {
       Executor masterExecutor =
-         masterThreads == 0 ?
+         masterThreads() == 0 ?
             Executors.newCachedThreadPool() :
-            Executors.newFixedThreadPool(masterThreads);
+            Executors.newFixedThreadPool(masterThreads());
       Executor workerExecutor =
-         workerThreads == 0 ?
+         workerThreads() == 0 ?
             Executors.newCachedThreadPool():
-            Executors.newFixedThreadPool(workerThreads);
+            Executors.newFixedThreadPool(workerThreads());
 
       NioServerSocketChannelFactory factory =
-         workerThreads == 0 ?
+         workerThreads() == 0 ?
             new NioServerSocketChannelFactory(masterExecutor, workerExecutor) :
-            new NioServerSocketChannelFactory(masterExecutor, workerExecutor, workerThreads);
+            new NioServerSocketChannelFactory(masterExecutor, workerExecutor, workerThreads());
 
       // Configure the server.
       ServerBootstrap bootstrap = new ServerBootstrap(factory);
 
       // Set up the event pipeline factory.
-      bootstrap.setPipelineFactory(new WebSocketServerPipelineFactory(cacheManager));
+      bootstrap.setPipelineFactory(new WebSocketServerPipelineFactory(cacheManager()));
 
       // Bind and start to accept incoming connections.
+      bootstrap.setOption("child.tcpNoDelay", tcpNoDelay);
+      if (sendBufSize > 0) bootstrap.setOption("child.sendBufferSize", sendBufSize);
+      if (recvBufSize > 0) bootstrap.setOption("receiveBufferSize", recvBufSize);
+
       bootstrap.bind(address);
    }
 



More information about the infinispan-commits mailing list