[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