[hornetq-commits] JBoss hornetq SVN: r8981 - in trunk: tests/src/org/hornetq/tests/integration/persistence and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Mar 27 09:18:24 EDT 2010


Author: jmesnil
Date: 2010-03-27 09:18:24 -0400 (Sat, 27 Mar 2010)
New Revision: 8981

Added:
   trunk/src/main/org/hornetq/jms/server/config/impl/TransportConfigurationEncodingSupport.java
   trunk/tests/src/org/hornetq/tests/integration/persistence/TransportConfigurationEncodingSupportTest.java
Modified:
   trunk/src/main/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
   trunk/tests/src/org/hornetq/tests/integration/persistence/JMSConnectionFactoryConfigurationStorageTest.java
Log:
JMS Configuration persistence

* persist TransportConfiguration connectorConfigs from ConnectionFactoryConfigurationImpl

Modified: trunk/src/main/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
===================================================================
--- trunk/src/main/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java	2010-03-27 12:41:58 UTC (rev 8980)
+++ trunk/src/main/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java	2010-03-27 13:18:24 UTC (rev 8981)
@@ -14,7 +14,6 @@
 package org.hornetq.jms.server.config.impl;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.hornetq.api.core.HornetQBuffer;
@@ -574,6 +573,8 @@
          connectorNames.add(new Pair<String, String>(a, b));
       }
 
+      connectorConfigs = TransportConfigurationEncodingSupport.decodeConfigs(buffer);
+
       clientID = BufferHelper.readNullableSimpleStringAsString(buffer);
 
       discoveryRefreshTimeout = buffer.readLong();
@@ -659,6 +660,8 @@
          }
       }
 
+      TransportConfigurationEncodingSupport.encodeConfigs(buffer, connectorConfigs);
+
       BufferHelper.writeAsNullableSimpleString(buffer, clientID);
 
       buffer.writeLong(discoveryRefreshTimeout);
@@ -752,6 +755,8 @@
              
              sizeOfConnectors() +
              
+             TransportConfigurationEncodingSupport.getEncodeSize(connectorConfigs) +
+
              BufferHelper.sizeOfNullableSimpleString(clientID) +
              
              DataConstants.SIZE_LONG + // discoveryRefreshTimeout 

Added: trunk/src/main/org/hornetq/jms/server/config/impl/TransportConfigurationEncodingSupport.java
===================================================================
--- trunk/src/main/org/hornetq/jms/server/config/impl/TransportConfigurationEncodingSupport.java	                        (rev 0)
+++ trunk/src/main/org/hornetq/jms/server/config/impl/TransportConfigurationEncodingSupport.java	2010-03-27 13:18:24 UTC (rev 8981)
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package org.hornetq.jms.server.config.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.hornetq.api.core.HornetQBuffer;
+import org.hornetq.api.core.Pair;
+import org.hornetq.api.core.TransportConfiguration;
+import org.hornetq.utils.BufferHelper;
+import org.hornetq.utils.DataConstants;
+
+/**
+ * A TransportConfigurationEncodingSupport
+ *
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ *
+ */
+public class TransportConfigurationEncodingSupport
+{
+   public static List<Pair<TransportConfiguration, TransportConfiguration>> decodeConfigs(HornetQBuffer buffer)
+   {
+      int size = buffer.readInt();
+      List<Pair<TransportConfiguration, TransportConfiguration>> configs = new ArrayList<Pair<TransportConfiguration, TransportConfiguration>>(size);
+
+      for (int i = 0; i < size; i++)
+      {
+         TransportConfiguration live = decode(buffer);
+         boolean hasBackup = buffer.readBoolean();
+         TransportConfiguration backup = null;
+         if (hasBackup)
+         {
+            backup = decode(buffer);
+         }
+         configs.add(new Pair<TransportConfiguration, TransportConfiguration>(live, backup));
+      }
+
+      return configs;
+   }
+
+   public static TransportConfiguration decode(HornetQBuffer buffer)
+   {
+      String name = BufferHelper.readNullableSimpleStringAsString(buffer);
+      String factoryClassName = buffer.readSimpleString().toString();
+      int paramSize = buffer.readInt();
+      Map<String, Object> params = new HashMap<String, Object>();
+      for (int i = 0; i < paramSize; i++)
+      {
+         String key = buffer.readSimpleString().toString();
+         String value = buffer.readSimpleString().toString();
+         params.put(key, value);
+      }
+      TransportConfiguration config = new TransportConfiguration(factoryClassName, params, name);
+      return config;
+   }
+
+   public static void encodeConfigs(HornetQBuffer buffer,
+                                    List<Pair<TransportConfiguration, TransportConfiguration>> configs)
+   {
+      buffer.writeInt(configs == null ? 0 : configs.size());
+      if (configs != null)
+      {
+         for (Pair<TransportConfiguration, TransportConfiguration> pair : configs)
+         {
+            encode(buffer, pair.a);
+            boolean backup = (pair.b != null);
+            buffer.writeBoolean(backup);
+            if (backup)
+            {
+               encode(buffer, pair.b);
+            }
+         }
+      }
+   }
+
+   public static void encode(HornetQBuffer buffer, TransportConfiguration config)
+   {
+      BufferHelper.writeAsNullableSimpleString(buffer, config.getName());
+      BufferHelper.writeAsSimpleString(buffer, config.getFactoryClassName());
+      buffer.writeInt(config.getParams().size());
+      for (Entry<String, Object> param : config.getParams().entrySet())
+      {
+         BufferHelper.writeAsSimpleString(buffer, param.getKey());
+         BufferHelper.writeAsSimpleString(buffer, param.getValue().toString());
+      }
+   }
+
+   public static int getEncodeSize(TransportConfiguration config)
+   {
+      int size = BufferHelper.sizeOfNullableSimpleString(config.getName()) +
+                 BufferHelper.sizeOfSimpleString(config.getFactoryClassName());
+
+      size += DataConstants.SIZE_INT; // number of params
+      for (Entry<String, Object> param : config.getParams().entrySet())
+      {
+         size += BufferHelper.sizeOfSimpleString(param.getKey());
+         size += BufferHelper.sizeOfSimpleString(param.getValue().toString());
+      }
+      return size;
+   }
+
+   public static int getEncodeSize(List<Pair<TransportConfiguration, TransportConfiguration>> configs)
+   {
+      int size = DataConstants.SIZE_INT; // number of configs;
+      if (configs != null)
+      {
+         for (Pair<TransportConfiguration, TransportConfiguration> pair : configs)
+         {
+            size += getEncodeSize(pair.a);
+            size += DataConstants.SIZE_BOOLEAN; // whether there is a backup config
+            if (pair.b != null)
+            {
+               size += getEncodeSize(pair.b);
+            }
+         }
+      }
+      return size;
+   }
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}

Modified: trunk/tests/src/org/hornetq/tests/integration/persistence/JMSConnectionFactoryConfigurationStorageTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/persistence/JMSConnectionFactoryConfigurationStorageTest.java	2010-03-27 12:41:58 UTC (rev 8980)
+++ trunk/tests/src/org/hornetq/tests/integration/persistence/JMSConnectionFactoryConfigurationStorageTest.java	2010-03-27 13:18:24 UTC (rev 8981)
@@ -13,15 +13,21 @@
 
 package org.hornetq.tests.integration.persistence;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.hornetq.api.core.HornetQBuffer;
 import org.hornetq.api.core.HornetQBuffers;
+import org.hornetq.api.core.Pair;
+import org.hornetq.api.core.TransportConfiguration;
+import org.hornetq.integration.transports.netty.NettyConnectorFactory;
+import org.hornetq.integration.transports.netty.TransportConstants;
 import org.hornetq.jms.persistence.config.PersistedConnectionFactory;
 import org.hornetq.jms.server.config.ConnectionFactoryConfiguration;
 import org.hornetq.jms.server.config.impl.ConnectionFactoryConfigurationImpl;
+import org.hornetq.tests.util.RandomUtil;
 
 /**
  * A JMSConnectionFactoryConfigurationStorageTest
@@ -120,7 +126,61 @@
       assertEquals(size, buffer.writerIndex());
       
    }
+   
+   public void testSettingsWithConnectorConfigs() throws Exception
+   {
 
+      createJMSStorage();
+
+      String str[] = new String[5];
+      for (int i = 0; i < 5; i++)
+      {
+         str[i] = "str" + i;
+      }
+
+      ConnectionFactoryConfiguration config = new ConnectionFactoryConfigurationImpl("some-name", str);
+      List<Pair<TransportConfiguration, TransportConfiguration>> connectorConfigs = new ArrayList<Pair<TransportConfiguration,TransportConfiguration>>();
+      Map<String, Object> liveParams = new HashMap<String, Object>();
+      liveParams.put(TransportConstants.PORT_PROP_NAME, 5665);
+      TransportConfiguration live1 = new TransportConfiguration(NettyConnectorFactory.class.getName(), liveParams );
+      Map<String, Object> backupParams = new HashMap<String, Object>();
+      backupParams.put(TransportConstants.PORT_PROP_NAME, 5775);
+      TransportConfiguration backup1 = new TransportConfiguration(NettyConnectorFactory.class.getName(), backupParams);
+      Map<String, Object> liveParams2 = new HashMap<String, Object>();
+      liveParams2.put(TransportConstants.PORT_PROP_NAME, 6665);
+      TransportConfiguration live2 = new TransportConfiguration(NettyConnectorFactory.class.getName(), liveParams2);
+      
+      connectorConfigs.add(new Pair<TransportConfiguration, TransportConfiguration>(live1, backup1));
+      connectorConfigs.add(new Pair<TransportConfiguration, TransportConfiguration>(live2, null));
+
+      config.setConnectorConfigs(connectorConfigs );
+      List<Pair<String, String>> connectors = new ArrayList<Pair<String,String>>();
+      connectors.add(new Pair<String, String>(RandomUtil.randomString(), null));
+      config.setConnectorNames(connectors);
+      config.setCallTimeout(RandomUtil.randomPositiveLong());
+      
+      addSetting(new PersistedConnectionFactory(config));
+
+      jmsJournal.stop();
+
+      createJMSStorage();
+
+      List<PersistedConnectionFactory> cfs = jmsJournal.recoverConnectionFactories();
+
+      assertEquals(1, cfs.size());
+
+      assertEquals("some-name", cfs.get(0).getName());
+
+      assertEquals(config.getCallTimeout(), cfs.get(0).getConfig().getCallTimeout());
+
+      assertEquals(5, cfs.get(0).getConfig().getBindings().length);
+
+      for (int i = 0; i < 5; i++)
+      {
+         assertEquals("str" + i, cfs.get(0).getConfig().getBindings()[i]);
+      }
+   }
+
    /**
     * @param journal
     * @throws Exception

Added: trunk/tests/src/org/hornetq/tests/integration/persistence/TransportConfigurationEncodingSupportTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/persistence/TransportConfigurationEncodingSupportTest.java	                        (rev 0)
+++ trunk/tests/src/org/hornetq/tests/integration/persistence/TransportConfigurationEncodingSupportTest.java	2010-03-27 13:18:24 UTC (rev 8981)
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package org.hornetq.tests.integration.persistence;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hornetq.api.core.HornetQBuffer;
+import org.hornetq.api.core.HornetQBuffers;
+import org.hornetq.api.core.Pair;
+import org.hornetq.api.core.TransportConfiguration;
+import org.hornetq.integration.transports.netty.NettyConnectorFactory;
+import org.hornetq.integration.transports.netty.TransportConstants;
+import org.hornetq.jms.server.config.impl.TransportConfigurationEncodingSupport;
+import org.hornetq.tests.util.RandomUtil;
+
+import junit.framework.TestCase;
+
+/**
+ * A TransportConfigurationEncodingSupportTest
+ *
+ * @author jmesnil
+ *
+ *
+ */
+public class TransportConfigurationEncodingSupportTest extends TestCase
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   public void testTransportConfiguration() throws Exception
+   {
+      Map<String, Object> params = new HashMap<String, Object>();
+      params.put(TransportConstants.PORT_PROP_NAME, 5665);
+      params.put(TransportConstants.HOST_PROP_NAME, RandomUtil.randomString());
+      TransportConfiguration config = new TransportConfiguration(NettyConnectorFactory.class.getName(), params);
+
+      HornetQBuffer buffer = HornetQBuffers.fixedBuffer(TransportConfigurationEncodingSupport.getEncodeSize(config));
+      TransportConfigurationEncodingSupport.encode(buffer, config);
+
+      assertEquals(buffer.capacity(), buffer.writerIndex());
+      buffer.readerIndex(0);
+
+      TransportConfiguration decoded = TransportConfigurationEncodingSupport.decode(buffer);
+      assertNotNull(decoded);
+
+      assertEquals(config.getName(), decoded.getName());
+      assertEquals(config.getFactoryClassName(), decoded.getFactoryClassName());
+      assertEquals(config.getParams().size(), decoded.getParams().size());
+      for (String key : config.getParams().keySet())
+      {
+         assertEquals(config.getParams().get(key).toString(), decoded.getParams().get(key).toString());
+      }
+   }
+
+   public void testTransportConfigurations() throws Exception
+   {
+      List<Pair<TransportConfiguration, TransportConfiguration>> connectorConfigs = new ArrayList<Pair<TransportConfiguration, TransportConfiguration>>();
+      Map<String, Object> liveParams = new HashMap<String, Object>();
+      liveParams.put(TransportConstants.PORT_PROP_NAME, 5665);
+      TransportConfiguration live1 = new TransportConfiguration(NettyConnectorFactory.class.getName(), liveParams);
+      Map<String, Object> backupParams = new HashMap<String, Object>();
+      backupParams.put(TransportConstants.PORT_PROP_NAME, 5775);
+      TransportConfiguration backup1 = new TransportConfiguration(NettyConnectorFactory.class.getName(), backupParams);
+      Map<String, Object> liveParams2 = new HashMap<String, Object>();
+      liveParams2.put(TransportConstants.PORT_PROP_NAME, 6665);
+      TransportConfiguration live2 = new TransportConfiguration(NettyConnectorFactory.class.getName(), liveParams2);
+
+      connectorConfigs.add(new Pair<TransportConfiguration, TransportConfiguration>(live1, backup1));
+      connectorConfigs.add(new Pair<TransportConfiguration, TransportConfiguration>(live2, null));
+
+      HornetQBuffer buffer = HornetQBuffers.fixedBuffer(TransportConfigurationEncodingSupport.getEncodeSize(connectorConfigs));
+      TransportConfigurationEncodingSupport.encodeConfigs(buffer, connectorConfigs);
+
+      assertEquals(buffer.capacity(), buffer.writerIndex());
+      buffer.readerIndex(0);
+
+      List<Pair<TransportConfiguration, TransportConfiguration>> decodedConfigs = TransportConfigurationEncodingSupport.decodeConfigs(buffer);
+      assertNotNull(decodedConfigs);
+      assertEquals(2, decodedConfigs.size());
+
+      assertEquivalent(connectorConfigs.get(0).a, decodedConfigs.get(0).a);
+      assertEquivalent(connectorConfigs.get(0).b, decodedConfigs.get(0).b);
+      assertEquivalent(connectorConfigs.get(1).a, decodedConfigs.get(1).a);
+      assertNull(decodedConfigs.get(1).b);
+   }
+
+   // decoded TransportConfiguration have parameter values as String instead of primitive type
+   private static void assertEquivalent(TransportConfiguration expected, TransportConfiguration actual)
+   {
+      assertEquals(expected.getFactoryClassName(), actual.getFactoryClassName());
+      assertEquals(expected.getName(), actual.getName());
+      assertEquals(expected.getParams().size(), actual.getParams().size());
+      for (Map.Entry<String, Object> entry : expected.getParams().entrySet())
+      {
+         String key = entry.getKey();
+         assertEquals(expected.getParams().get(key).toString(), actual.getParams().get(key).toString());
+      }
+   }
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}



More information about the hornetq-commits mailing list