[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