[infinispan-commits] Infinispan SVN: r2258 - in trunk: server/core/src/main/scala/org/infinispan/server/core and 1 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Fri Aug 20 05:15:41 EDT 2010


Author: galder.zamarreno at jboss.com
Date: 2010-08-20 05:15:41 -0400 (Fri, 20 Aug 2010)
New Revision: 2258

Modified:
   trunk/core/src/main/java/org/infinispan/util/TypedProperties.java
   trunk/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala
   trunk/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala
Log:
[ISPN-612] (Allow substitution of Infinispan server properties) Done.

Modified: trunk/core/src/main/java/org/infinispan/util/TypedProperties.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/util/TypedProperties.java	2010-08-20 09:15:07 UTC (rev 2257)
+++ trunk/core/src/main/java/org/infinispan/util/TypedProperties.java	2010-08-20 09:15:41 UTC (rev 2258)
@@ -3,6 +3,7 @@
 import org.infinispan.config.TypedPropertiesAdapter;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
+import org.jboss.util.StringPropertyReplacer;
 
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@@ -55,11 +56,18 @@
    }
 
    public int getIntProperty(String key, int defaultValue) {
+      return getIntProperty(key, defaultValue, false);
+   }
+
+   public int getIntProperty(String key, int defaultValue, boolean doStringReplace) {
       String value = getProperty(key);
       if (value == null) return defaultValue;
       value = value.trim();
       if (value.length() == 0) return defaultValue;
 
+      if (doStringReplace)
+         value = StringPropertyReplacer.replaceProperties(value);
+
       try {
          return Integer.parseInt(value);
       }
@@ -70,11 +78,18 @@
    }
 
    public long getLongProperty(String key, long defaultValue) {
+      return getLongProperty(key, defaultValue, false);
+   }
+
+   public long getLongProperty(String key, long defaultValue, boolean doStringReplace) {
       String value = getProperty(key);
       if (value == null) return defaultValue;
       value = value.trim();
       if (value.length() == 0) return defaultValue;
 
+      if (doStringReplace)
+         value = StringPropertyReplacer.replaceProperties(value);
+
       try {
          return Long.parseLong(value);
       }
@@ -85,11 +100,18 @@
    }
 
    public boolean getBooleanProperty(String key, boolean defaultValue) {
+      return getBooleanProperty(key, defaultValue, false);
+   }
+
+   public boolean getBooleanProperty(String key, boolean defaultValue, boolean doStringReplace) {
       String value = getProperty(key);
       if (value == null) return defaultValue;
       value = value.trim();
       if (value.length() == 0) return defaultValue;
 
+      if (doStringReplace)
+         value = StringPropertyReplacer.replaceProperties(value);
+
       try {
          return Boolean.parseBoolean(value);
       }
@@ -98,4 +120,20 @@
          return defaultValue;
       }
    }
+
+   /**
+    * Get the property associated with the key, optionally applying string property replacement as defined in
+    * {@link StringPropertyReplacer#replaceProperties} to the result.
+    *
+    * @param   key               the hashtable key.
+    * @param   defaultValue      a default value.
+    * @param   doStringReplace   boolean indicating whether to apply string property replacement
+    * @return  the value in this property list with the specified key valu after optionally being inspected for String property replacement
+    */
+   public String getProperty(String key, String defaultValue, boolean doStringReplace) {
+      if (doStringReplace)
+         return StringPropertyReplacer.replaceProperties(getProperty(key, defaultValue));
+      else
+         return getProperty(key, defaultValue);
+   }
 }
\ No newline at end of file

Modified: trunk/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala
===================================================================
--- trunk/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala	2010-08-20 09:15:07 UTC (rev 2257)
+++ trunk/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala	2010-08-20 09:15:41 UTC (rev 2258)
@@ -27,33 +27,33 @@
    def start(properties: Properties, cacheManager: EmbeddedCacheManager, defaultPort: Int) {
       val typedProps = TypedProperties.toTypedProperties(properties)
       // Enabled added to make it easy to enable/disable endpoints in JBoss MC based beans for EDG
-      val toStart = typedProps.getBooleanProperty("enabled", true)
+      val toStart = typedProps.getBooleanProperty("enabled", true, true)
 
       if (toStart) {
          // By doing parameter validation here, both programmatic and command line clients benefit from it.
-         this.host = typedProps.getProperty(PROP_KEY_HOST, HOST_DEFAULT)
-         this.port = typedProps.getIntProperty(PROP_KEY_PORT, defaultPort)
-         this.masterThreads = typedProps.getIntProperty(PROP_KEY_MASTER_THREADS, MASTER_THREADS_DEFAULT)
+         this.host = typedProps.getProperty(PROP_KEY_HOST, HOST_DEFAULT, true)
+         this.port = typedProps.getIntProperty(PROP_KEY_PORT, defaultPort, true)
+         this.masterThreads = typedProps.getIntProperty(PROP_KEY_MASTER_THREADS, MASTER_THREADS_DEFAULT, true)
          if (masterThreads < 0)
             throw new IllegalArgumentException("Master threads can't be lower than 0: " + masterThreads)
 
-         this.workerThreads = typedProps.getIntProperty(PROP_KEY_WORKER_THREADS, WORKER_THREADS_DEFAULT)
+         this.workerThreads = typedProps.getIntProperty(PROP_KEY_WORKER_THREADS, WORKER_THREADS_DEFAULT, true)
          if (workerThreads < 0)
             throw new IllegalArgumentException("Worker threads can't be lower than 0: " + masterThreads)
 
          this.cacheManager = cacheManager
-         val idleTimeout = typedProps.getIntProperty(PROP_KEY_IDLE_TIMEOUT, IDLE_TIMEOUT_DEFAULT)
+         val idleTimeout = typedProps.getIntProperty(PROP_KEY_IDLE_TIMEOUT, IDLE_TIMEOUT_DEFAULT, true)
          if (idleTimeout < -1)
             throw new IllegalArgumentException("Idle timeout can't be lower than -1: " + idleTimeout)
 
-         val tcpNoDelay = typedProps.getBooleanProperty(PROP_KEY_TCP_NO_DELAY, TCP_NO_DELAY_DEFAULT)
+         val tcpNoDelay = typedProps.getBooleanProperty(PROP_KEY_TCP_NO_DELAY, TCP_NO_DELAY_DEFAULT, true)
 
-         val sendBufSize = typedProps.getIntProperty(PROP_KEY_SEND_BUF_SIZE, SEND_BUF_SIZE_DEFAULT)
+         val sendBufSize = typedProps.getIntProperty(PROP_KEY_SEND_BUF_SIZE, SEND_BUF_SIZE_DEFAULT, true)
          if (sendBufSize < 0) {
             throw new IllegalArgumentException("Send buffer size can't be lower than 0: " + sendBufSize)
          }
 
-         val recvBufSize = typedProps.getIntProperty(PROP_KEY_RECV_BUF_SIZE, RECV_BUF_SIZE_DEFAULT)
+         val recvBufSize = typedProps.getIntProperty(PROP_KEY_RECV_BUF_SIZE, RECV_BUF_SIZE_DEFAULT, true)
          if (recvBufSize < 0) {
             throw new IllegalArgumentException("Send buffer size can't be lower than 0: " + sendBufSize)
          }
@@ -62,12 +62,12 @@
          cacheManager.addListener(getRankCalculatorListener)
          // Start default cache
          startDefaultCache
-         val address = new InetSocketAddress(host, port)
-         startTransport(address, idleTimeout, tcpNoDelay, sendBufSize, recvBufSize)
+         startTransport(idleTimeout, tcpNoDelay, sendBufSize, recvBufSize)
       }
    }
 
-   def startTransport(address: InetSocketAddress, idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int) {
+   def startTransport(idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int) {
+      val address = new InetSocketAddress(host, port)
       val encoder = getEncoder
       val nettyEncoder = if (encoder != null) new EncoderAdapter(encoder) else null
       transport = new NettyTransport(this, nettyEncoder, address, masterThreads, workerThreads, idleTimeout,

Modified: trunk/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala
===================================================================
--- trunk/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala	2010-08-20 09:15:07 UTC (rev 2257)
+++ trunk/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala	2010-08-20 09:15:41 UTC (rev 2258)
@@ -5,6 +5,9 @@
 import transport.{Decoder, Encoder}
 import org.infinispan.server.core.Main._
 import org.infinispan.manager.{DefaultCacheManager, EmbeddedCacheManager}
+import org.testng.Assert._
+import java.net.InetSocketAddress
+import java.lang.reflect.Method
 
 /**
  * Abstract protocol server test.
@@ -51,6 +54,112 @@
       expectIllegalArgument(p, createServer)
    }
 
+   def testHostPropertySubstitution(m: Method) {
+      var host = "1.2.3.4";
+      var p = new Properties
+      p.setProperty(PROP_KEY_HOST, host);
+      var server = createServer
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getHost, host)
+
+      host = "${" + m.getName + "-myhost:5.6.7.8}"
+      p = new Properties
+      p.setProperty(PROP_KEY_HOST, host);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getHost, "5.6.7.8")
+
+      host = "${" + m.getName + "-myhost:9.10.11.12}"
+      System.setProperty(m.getName + "-myhost", "13.14.15.16");
+      p = new Properties
+      p.setProperty(PROP_KEY_HOST, host);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getHost, "13.14.15.16")
+
+      host = "${" + m.getName + "-otherhost}"
+      p = new Properties
+      p.setProperty(PROP_KEY_HOST, host);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getHost, host)
+
+      host = "${" + m.getName + "-otherhost}"
+      System.setProperty(m.getName + "-otherhost", "17.18.19.20");
+      p = new Properties
+      p.setProperty(PROP_KEY_HOST, host);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getHost, "17.18.19.20")
+   }
+
+   def testPortPropertySubstitution(m: Method) {
+      var port = "123"
+      var p = new Properties
+      p.setProperty(PROP_KEY_PORT, port);
+      var server = createServer
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getPort, port.toInt)
+
+      port = "${" + m.getName + "-myport:567}"
+      p = new Properties
+      p.setProperty(PROP_KEY_PORT, port);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getPort, 567)
+
+      port = "${" + m.getName + "-myport:891}"
+      System.setProperty(m.getName + "-myport", "234");
+      p = new Properties
+      p.setProperty(PROP_KEY_PORT, port);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getPort, 234)
+
+      port = "${" + m.getName + "-otherport}"
+      p = new Properties
+      p.setProperty(PROP_KEY_PORT, port);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getPort, 12345)
+
+      port = "${" + m.getName + "-otherport}"
+      System.setProperty(m.getName + "-otherport", "5567");
+      p = new Properties
+      p.setProperty(PROP_KEY_PORT, port);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.getPort, 5567)
+   }
+
+   def testTcpNoDelayPropertySubstitution(m: Method) {
+      var tcpNoDelay = "true"
+      var p = new Properties
+      p.setProperty(PROP_KEY_TCP_NO_DELAY, tcpNoDelay);
+      var server = createServer
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.tcpNoDelay, tcpNoDelay.toBoolean)
+
+      tcpNoDelay = "${" + m.getName + "-mytcpnodelay:false}"
+      p = new Properties
+      p.setProperty(PROP_KEY_TCP_NO_DELAY, tcpNoDelay);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.tcpNoDelay, false)
+
+      tcpNoDelay = "${" + m.getName + "-mytcpnodelay:true}"
+      System.setProperty(m.getName + "-mytcpnodelay", "false");
+      p = new Properties
+      p.setProperty(PROP_KEY_TCP_NO_DELAY, tcpNoDelay);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.tcpNoDelay, false)
+
+      tcpNoDelay = "${" + m.getName + "-othertcpnodelay}"
+      p = new Properties
+      p.setProperty(PROP_KEY_TCP_NO_DELAY, tcpNoDelay);
+      server.start(p, new DefaultCacheManager)
+      // Boolean.parseBoolean() returning false to anything other than true, no exception thrown
+      assertEquals(server.tcpNoDelay, false)
+
+      tcpNoDelay = "${" + m.getName + "-othertcpnodelay}"
+      System.setProperty(m.getName + "-othertcpnodelay", "true");
+      p = new Properties
+      p.setProperty(PROP_KEY_PORT, tcpNoDelay);
+      server.start(p, new DefaultCacheManager)
+      assertEquals(server.tcpNoDelay, true)
+   }
+
    private def expectIllegalArgument(p: Properties, server: ProtocolServer) {
       try {
          server.start(p, new DefaultCacheManager)
@@ -61,16 +170,22 @@
       }
    }
 
-   private def createServer : ProtocolServer = {
-      new AbstractProtocolServer("MyPrefix") {
-         override def start(properties: Properties, cacheManager: EmbeddedCacheManager) {
-            super.start(properties, cacheManager, 12345)
-         }
+   private def createServer : MockProtocolServer = new MockProtocolServer
 
-         override def getEncoder: Encoder = null
+   class MockProtocolServer extends AbstractProtocolServer("Mock") {
+      var tcpNoDelay: Boolean = _
 
-         override def getDecoder: Decoder = null
+      override def start(properties: Properties, cacheManager: EmbeddedCacheManager) {
+         super.start(properties, cacheManager, 12345)
       }
+
+      override def getEncoder: Encoder = null
+
+      override def getDecoder: Decoder = null
+
+      override def startTransport(idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int) {
+         this.tcpNoDelay = tcpNoDelay
+      }
    }
 
 }
\ No newline at end of file



More information about the infinispan-commits mailing list