Author: jmesnil
Date: 2010-06-29 10:53:51 -0400 (Tue, 29 Jun 2010)
New Revision: 9370
Modified:
trunk/docs/user-manual/en/management.xml
trunk/src/main/org/hornetq/api/core/management/HornetQServerControl.java
trunk/src/main/org/hornetq/api/core/management/ObjectNameBuilder.java
trunk/src/main/org/hornetq/core/management/impl/HornetQServerControlImpl.java
trunk/src/main/org/hornetq/core/server/HornetQServer.java
trunk/src/main/org/hornetq/core/server/cluster/ClusterManager.java
trunk/src/main/org/hornetq/core/server/cluster/impl/ClusterManagerImpl.java
trunk/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java
trunk/src/main/org/hornetq/core/server/management/impl/ManagementServiceImpl.java
trunk/tests/src/org/hornetq/tests/integration/management/DivertControlTest.java
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlTest.java
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlUsingCoreTest.java
trunk/tests/src/org/hornetq/tests/integration/management/ManagementControlHelper.java
Log:
https://jira.jboss.org/browse/HORNETQ-89: Create and manage diverts and bridges through
management API
* add createBridge/destroyBridge methods to HornetQServerControl API
* add getBridgeNames/getDivertNames to HornetQServerControl API
* add test to HornetQServerControlTest
* documentation
Modified: trunk/docs/user-manual/en/management.xml
===================================================================
--- trunk/docs/user-manual/en/management.xml 2010-06-29 14:51:31 UTC (rev 9369)
+++ trunk/docs/user-manual/en/management.xml 2010-06-29 14:53:51 UTC (rev 9370)
@@ -131,6 +131,18 @@
configuration through all its attributes (e.g.
<literal>getVersion()</literal>
method to retrieve the server's version, etc.)</para>
</listitem>
+ <listitem>
+ <para>Listing, creating and destroying Core bridges and
diverts</para>
+ <para>A list of deployed core bridges (resp. diverts) can be
retrieved using the <literal
+ >getBridgeNames()</literal> (resp.
<literal>getDivertNames()</literal>) method.</para>
+ <para>Core bridges (resp. diverts) can be created or destroyed
using the management operations
+ <literal>createBridge()</literal> and
<literal>destroyBridge()</literal>
+ (resp. <literal>createDivert()</literal> and
<literal>destroyDivert()</literal>) on the <literal
+ >HornetQServerControl</literal> (with the ObjectName
<literal
+ >org.hornetq:module=Core,type=Server</literal> or the
resource name <literal
+ >core.server</literal>).</para>
+ </listitem>
+
</itemizedlist>
</section>
<section>
Modified: trunk/src/main/org/hornetq/api/core/management/HornetQServerControl.java
===================================================================
--- trunk/src/main/org/hornetq/api/core/management/HornetQServerControl.java 2010-06-29
14:51:31 UTC (rev 9369)
+++ trunk/src/main/org/hornetq/api/core/management/HornetQServerControl.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -521,6 +521,8 @@
@Operation(desc = "returns the address settings as a JSON string for an address
match", impact = MBeanOperationInfo.INFO)
String getAddressSettingsAsJSON(@Parameter(desc="an address match",
name="addressMatch") String addressMatch) throws Exception;
+ String[] getDivertNames();
+
@Operation(desc= "Create a Divert", impact = MBeanOperationInfo.ACTION)
void createDivert(@Parameter(name="name", desc="Name of the
divert") String name,
@Parameter(name="routingName", desc="Routing name of
the divert") String routingName,
@@ -532,4 +534,44 @@
@Operation(desc= "Destroy a Divert", impact = MBeanOperationInfo.ACTION)
void destroyDivert(@Parameter(name="name", desc="Name of the
divert") String name) throws Exception;
+
+ String[] getBridgeNames();
+
+ @Operation(desc= "Create a Bridge using a pair of connectors", impact =
MBeanOperationInfo.ACTION)
+ void createBridge(@Parameter(name="name", desc="Name of the
bridge") String name,
+ @Parameter(name="queueName", desc="Name of the source
queue") String queueName,
+ @Parameter(name="forwardingAddress", desc="Forwarding
address") String forwardingAddress,
+ @Parameter(name="filterString", desc="Filter of the
brdige") String filterString,
+ @Parameter(name="transformerClassName", desc="Class
name of the bridge transformer") String transformerClassName,
+ @Parameter(name="retryInterval", desc="Connection
retry interval") long retryInterval,
+ @Parameter(name="retryIntervalMultiplier",
desc="Connection retry interval multiplier") double retryIntervalMultiplier,
+ @Parameter(name="reconnectAttempts", desc="Number of
reconnection attempts") int reconnectAttempts,
+ @Parameter(name="failoverOnServerShutdown",
desc="Failover when the server shuts down?") boolean failoverOnServerShutdown,
+ @Parameter(name="useDuplicateDetection", desc="Use
duplicate detection") boolean useDuplicateDetection,
+ @Parameter(name="confirmationWindowSize",
desc="Confirmation window size") int confirmationWindowSize,
+ @Parameter(name="clientFailureCheckPeriod",
desc="Period to check client failure") long clientFailureCheckPeriod,
+ @Parameter(name="liveConnector", desc="Name of the
connector to the live server") String liveConnector,
+ @Parameter(name="backupConnector", desc="Name of the
connector to the backup server") String backupConnector,
+ @Parameter(name="user", desc="User name") String
user,
+ @Parameter(name="password", desc="User
password") String password) throws Exception;
+
+ @Operation(desc= "Create a Bridge using a discovery group", impact =
MBeanOperationInfo.ACTION)
+ void createBridge(@Parameter(name="name", desc="Name of the
bridge") String name,
+ @Parameter(name="queueName", desc="Name of the source
queue") String queueName,
+ @Parameter(name="forwardingAddress", desc="Forwarding
address") String forwardingAddress,
+ @Parameter(name="filterString", desc="Filter of the
brdige") String filterString,
+ @Parameter(name="transformerClassName", desc="Class
name of the bridge transformer") String transformerClassName,
+ @Parameter(name="retryInterval", desc="Connection
retry interval") long retryInterval,
+ @Parameter(name="retryIntervalMultiplier",
desc="Connection retry interval multiplier") double retryIntervalMultiplier,
+ @Parameter(name="reconnectAttempts", desc="Number of
reconnection attempts") int reconnectAttempts,
+ @Parameter(name="failoverOnServerShutdown",
desc="Failover when the server shuts down?") boolean failoverOnServerShutdown,
+ @Parameter(name="useDuplicateDetection", desc="Use
duplicate detection") boolean useDuplicateDetection,
+ @Parameter(name="confirmationWindowSize",
desc="Confirmation window size") int confirmationWindowSize,
+ @Parameter(name="clientFailureCheckPeriod",
desc="Period to check client failure") long clientFailureCheckPeriod,
+ @Parameter(name="name", desc="Name of the discovery
group") String discoveryGroupName,
+ @Parameter(name="user", desc="User name") String
user,
+ @Parameter(name="password", desc="User
password") String password) throws Exception;
+
+ @Operation(desc= "Destroy a bridge", impact = MBeanOperationInfo.ACTION)
+ void destroyBridge(@Parameter(name="name", desc="Name of the
bridge") String name) throws Exception;
}
Modified: trunk/src/main/org/hornetq/api/core/management/ObjectNameBuilder.java
===================================================================
--- trunk/src/main/org/hornetq/api/core/management/ObjectNameBuilder.java 2010-06-29
14:51:31 UTC (rev 9369)
+++ trunk/src/main/org/hornetq/api/core/management/ObjectNameBuilder.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -100,7 +100,7 @@
*
* @see DivertControl
*/
- public ObjectName getDivertObjectName(final SimpleString name) throws Exception
+ public ObjectName getDivertObjectName(final String name) throws Exception
{
return createObjectName(ObjectNameBuilder.CORE_MODULE, "Divert",
name.toString());
}
@@ -132,7 +132,7 @@
*/
public ObjectName getBridgeObjectName(final String name) throws Exception
{
- return createObjectName(ObjectNameBuilder.CORE_MODULE, "JMSBridge",
name);
+ return createObjectName(ObjectNameBuilder.CORE_MODULE, "Bridge", name);
}
/**
Modified: trunk/src/main/org/hornetq/core/management/impl/HornetQServerControlImpl.java
===================================================================
---
trunk/src/main/org/hornetq/core/management/impl/HornetQServerControlImpl.java 2010-06-29
14:51:31 UTC (rev 9369)
+++
trunk/src/main/org/hornetq/core/management/impl/HornetQServerControlImpl.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -14,8 +14,16 @@
package org.hornetq.core.management.impl;
import java.text.DateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanNotificationInfo;
@@ -27,12 +35,16 @@
import javax.transaction.xa.Xid;
import org.hornetq.api.core.HornetQException;
+import org.hornetq.api.core.Pair;
import org.hornetq.api.core.SimpleString;
import org.hornetq.api.core.TransportConfiguration;
import org.hornetq.api.core.management.AddressControl;
+import org.hornetq.api.core.management.BridgeControl;
+import org.hornetq.api.core.management.DivertControl;
import org.hornetq.api.core.management.HornetQServerControl;
import org.hornetq.api.core.management.NotificationType;
import org.hornetq.api.core.management.QueueControl;
+import org.hornetq.core.config.BridgeConfiguration;
import org.hornetq.core.config.Configuration;
import org.hornetq.core.config.DivertConfiguration;
import org.hornetq.core.logging.Logger;
@@ -1381,6 +1393,29 @@
}
}
+ public String[] getDivertNames()
+ {
+ checkStarted();
+
+ clearIO();
+ try
+ {
+ Object[] diverts =
server.getManagementService().getResources(DivertControl.class);
+ String[] names = new String[diverts.length];
+ for (int i = 0; i < diverts.length; i++)
+ {
+ DivertControl divert = (DivertControl)diverts[i];
+ names[i] = divert.getUniqueName();
+ }
+
+ return names;
+ }
+ finally
+ {
+ blockOnIO();
+ }
+ }
+
public void createDivert(String name,
String routingName,
String address,
@@ -1388,22 +1423,170 @@
boolean exclusive,
String filterString,
String transformerClassName) throws Exception
+ {
+ checkStarted();
+
+ clearIO();
+ try
+ {
+ DivertConfiguration config = new DivertConfiguration(name,
+ routingName,
+ address,
+ forwardingAddress,
+ exclusive,
+ filterString,
+ transformerClassName);
+ server.deployDivert(config);
+ }
+ finally
+ {
+ blockOnIO();
+ }
+ }
+
+ public void destroyDivert(String name) throws Exception
{
- DivertConfiguration config = new DivertConfiguration(name,
- routingName,
- address,
- forwardingAddress,
- exclusive,
- filterString,
- transformerClassName);
- server.deployDivert(config);
+ checkStarted();
+
+ clearIO();
+ try
+ {
+ server.destroyDivert(SimpleString.toSimpleString(name));
+ }
+ finally
+ {
+ blockOnIO();
+ }
}
- public void destroyDivert(String name) throws Exception
+ public String[] getBridgeNames()
{
- server.destroyDivert(SimpleString.toSimpleString(name));
+ checkStarted();
+
+ clearIO();
+ try
+ {
+ Object[] bridges =
server.getManagementService().getResources(BridgeControl.class);
+ String[] names = new String[bridges.length];
+ for (int i = 0; i < bridges.length; i++)
+ {
+ BridgeControl bridge = (BridgeControl)bridges[i];
+ names[i] = bridge.getName();
+ }
+
+ return names;
+ }
+ finally
+ {
+ blockOnIO();
+ }
}
+ public void createBridge(final String name,
+ final String queueName,
+ final String forwardingAddress,
+ final String filterString,
+ final String transformerClassName,
+ final long retryInterval,
+ final double retryIntervalMultiplier,
+ final int reconnectAttempts,
+ final boolean failoverOnServerShutdown,
+ final boolean useDuplicateDetection,
+ final int confirmationWindowSize,
+ final long clientFailureCheckPeriod,
+ final String liveConnector,
+ final String backupConnector,
+ final String user,
+ final String password) throws Exception
+ {
+ checkStarted();
+
+ clearIO();
+ try
+ {
+ Pair<String, String> connectors = new Pair<String,
String>(liveConnector, backupConnector);
+ BridgeConfiguration config = new BridgeConfiguration(name,
+ queueName,
+ forwardingAddress,
+ filterString,
+ transformerClassName,
+ retryInterval,
+ retryIntervalMultiplier,
+ reconnectAttempts,
+ failoverOnServerShutdown,
+ useDuplicateDetection,
+ confirmationWindowSize,
+ clientFailureCheckPeriod,
+ connectors,
+ user,
+ password);
+ server.deployBridge(config);
+ }
+ finally
+ {
+ blockOnIO();
+ }
+ }
+
+ public void createBridge(final String name,
+ final String queueName,
+ final String forwardingAddress,
+ final String filterString,
+ final String transformerClassName,
+ final long retryInterval,
+ final double retryIntervalMultiplier,
+ final int reconnectAttempts,
+ final boolean failoverOnServerShutdown,
+ final boolean useDuplicateDetection,
+ final int confirmationWindowSize,
+ final long clientFailureCheckPeriod,
+ final String discoveryGroupName,
+ final String user,
+ final String password) throws Exception
+ {
+ checkStarted();
+
+ clearIO();
+ try
+ {
+ BridgeConfiguration config = new BridgeConfiguration(name,
+ queueName,
+ forwardingAddress,
+ filterString,
+ transformerClassName,
+ retryInterval,
+ retryIntervalMultiplier,
+ reconnectAttempts,
+ failoverOnServerShutdown,
+ useDuplicateDetection,
+ confirmationWindowSize,
+ clientFailureCheckPeriod,
+ discoveryGroupName,
+ user,
+ password);
+ server.deployBridge(config);
+ }
+ finally
+ {
+ blockOnIO();
+ }
+ }
+
+ public void destroyBridge(final String name) throws Exception
+ {
+ checkStarted();
+
+ clearIO();
+ try
+ {
+ server.destroyBridge(name);
+ }
+ finally
+ {
+ blockOnIO();
+ }
+ }
+
// NotificationEmitter implementation ----------------------------
public void removeNotificationListener(final NotificationListener listener,
Modified: trunk/src/main/org/hornetq/core/server/HornetQServer.java
===================================================================
--- trunk/src/main/org/hornetq/core/server/HornetQServer.java 2010-06-29 14:51:31 UTC (rev
9369)
+++ trunk/src/main/org/hornetq/core/server/HornetQServer.java 2010-06-29 14:53:51 UTC (rev
9370)
@@ -19,6 +19,7 @@
import javax.management.MBeanServer;
import org.hornetq.api.core.SimpleString;
+import org.hornetq.core.config.BridgeConfiguration;
import org.hornetq.core.config.Configuration;
import org.hornetq.core.config.DivertConfiguration;
import org.hornetq.core.management.impl.HornetQServerControlImpl;
@@ -151,4 +152,8 @@
void deployDivert(DivertConfiguration config) throws Exception;
void destroyDivert(SimpleString name) throws Exception;
+
+ void deployBridge(BridgeConfiguration config) throws Exception;
+
+ void destroyBridge(String name) throws Exception;
}
Modified: trunk/src/main/org/hornetq/core/server/cluster/ClusterManager.java
===================================================================
--- trunk/src/main/org/hornetq/core/server/cluster/ClusterManager.java 2010-06-29 14:51:31
UTC (rev 9369)
+++ trunk/src/main/org/hornetq/core/server/cluster/ClusterManager.java 2010-06-29 14:53:51
UTC (rev 9370)
@@ -17,6 +17,7 @@
import java.util.Set;
import org.hornetq.api.core.SimpleString;
+import org.hornetq.core.config.BridgeConfiguration;
import org.hornetq.core.server.HornetQComponent;
/**
@@ -38,4 +39,8 @@
Set<BroadcastGroup> getBroadcastGroups();
void activate();
+
+ void deployBridge(BridgeConfiguration config) throws Exception;
+
+ void destroyBridge(String name) throws Exception;
}
Modified: trunk/src/main/org/hornetq/core/server/cluster/impl/ClusterManagerImpl.java
===================================================================
--- trunk/src/main/org/hornetq/core/server/cluster/impl/ClusterManagerImpl.java 2010-06-29
14:51:31 UTC (rev 9369)
+++ trunk/src/main/org/hornetq/core/server/cluster/impl/ClusterManagerImpl.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -357,7 +357,7 @@
group.start();
}
- private synchronized void deployBridge(final BridgeConfiguration config) throws
Exception
+ public synchronized void deployBridge(final BridgeConfiguration config) throws
Exception
{
if (config.getName() == null)
{
@@ -503,6 +503,16 @@
bridge.start();
}
+ public synchronized void destroyBridge(final String name) throws Exception
+ {
+ Bridge bridge = bridges.remove(name);
+ if (bridge != null)
+ {
+ bridge.stop();
+ managementService.unregisterBridge(name);
+ }
+ }
+
private synchronized void deployClusterConnection(final ClusterConnectionConfiguration
config) throws Exception
{
if (config.getName() == null)
Modified: trunk/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java
===================================================================
--- trunk/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java 2010-06-29 14:51:31
UTC (rev 9369)
+++ trunk/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java 2010-06-29 14:53:51
UTC (rev 9370)
@@ -42,6 +42,7 @@
import org.hornetq.core.client.impl.ClientSessionFactoryImpl;
import org.hornetq.core.client.impl.FailoverManager;
import org.hornetq.core.client.impl.FailoverManagerImpl;
+import org.hornetq.core.config.BridgeConfiguration;
import org.hornetq.core.config.Configuration;
import org.hornetq.core.config.CoreQueueConfiguration;
import org.hornetq.core.config.DivertConfiguration;
@@ -1456,6 +1457,22 @@
managementService.addNotificationListener(groupingHandler);
}
}
+
+ public void deployBridge(BridgeConfiguration config) throws Exception
+ {
+ if (clusterManager != null)
+ {
+ clusterManager.deployBridge(config);
+ }
+ }
+
+ public void destroyBridge(String name) throws Exception
+ {
+ if (clusterManager != null)
+ {
+ clusterManager.destroyBridge(name);
+ }
+ }
private Transformer instantiateTransformer(final String transformerClassName)
{
Modified:
trunk/src/main/org/hornetq/core/server/management/impl/ManagementServiceImpl.java
===================================================================
---
trunk/src/main/org/hornetq/core/server/management/impl/ManagementServiceImpl.java 2010-06-29
14:51:31 UTC (rev 9369)
+++
trunk/src/main/org/hornetq/core/server/management/impl/ManagementServiceImpl.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -282,7 +282,7 @@
public synchronized void registerDivert(final Divert divert, final DivertConfiguration
config) throws Exception
{
- ObjectName objectName =
objectNameBuilder.getDivertObjectName(divert.getUniqueName());
+ ObjectName objectName =
objectNameBuilder.getDivertObjectName(divert.getUniqueName().toString());
DivertControl divertControl = new DivertControlImpl(divert, storageManager,
config);
registerInJMX(objectName, new StandardMBean(divertControl, DivertControl.class));
registerInRegistry(ResourceNames.CORE_DIVERT + config.getName(), divertControl);
@@ -295,7 +295,7 @@
public synchronized void unregisterDivert(final SimpleString name) throws Exception
{
- ObjectName objectName = objectNameBuilder.getDivertObjectName(name);
+ ObjectName objectName = objectNameBuilder.getDivertObjectName(name.toString());
unregisterFromJMX(objectName);
unregisterFromRegistry(ResourceNames.CORE_DIVERT + name);
}
Modified: trunk/tests/src/org/hornetq/tests/integration/management/DivertControlTest.java
===================================================================
---
trunk/tests/src/org/hornetq/tests/integration/management/DivertControlTest.java 2010-06-29
14:51:31 UTC (rev 9369)
+++
trunk/tests/src/org/hornetq/tests/integration/management/DivertControlTest.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -54,7 +54,7 @@
public void testAttributes() throws Exception
{
- checkResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(new
SimpleString(divertConfig.getName())));
+
checkResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(divertConfig.getName()));
DivertControl divertControl = createManagementControl(divertConfig.getName());
@@ -120,7 +120,7 @@
{
service.stop();
- checkNoResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(new
SimpleString(divertConfig.getName())));
+
checkNoResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(divertConfig.getName()));
service = null;
Modified:
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlTest.java
===================================================================
---
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlTest.java 2010-06-29
14:51:31 UTC (rev 9369)
+++
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlTest.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -25,7 +25,9 @@
import org.hornetq.api.core.client.ClientProducer;
import org.hornetq.api.core.client.ClientSession;
import org.hornetq.api.core.client.ClientSessionFactory;
+import org.hornetq.api.core.client.HornetQClient;
import org.hornetq.api.core.management.AddressSettingsInfo;
+import org.hornetq.api.core.management.BridgeControl;
import org.hornetq.api.core.management.DivertControl;
import org.hornetq.api.core.management.HornetQServerControl;
import org.hornetq.api.core.management.ObjectNameBuilder;
@@ -509,13 +511,14 @@
public void testCreateAndDestroyDivert() throws Exception
{
String address = RandomUtil.randomString();
- SimpleString name = RandomUtil.randomSimpleString();
+ String name = RandomUtil.randomString();
String routingName = RandomUtil.randomString();
String forwardingAddress = RandomUtil.randomString();
HornetQServerControl serverControl = createManagementControl();
checkNoResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(name));
+ assertEquals(0, serverControl.getDivertNames().length);
serverControl.createDivert(name.toString(), routingName, address,
forwardingAddress, true, null, null);
@@ -528,6 +531,9 @@
assertTrue(divertControl.isExclusive());
assertNull(divertControl.getFilter());
assertNull(divertControl.getTransformerClassName());
+ String[] divertNames = serverControl.getDivertNames();
+ assertEquals(1, divertNames.length);
+ assertEquals(name, divertNames[0]);
// check that a message sent to the address is diverted exclusively
ClientSessionFactory csf = new ClientSessionFactoryImpl(new
TransportConfiguration(InVMConnectorFactory.class.getName()));
@@ -556,6 +562,9 @@
serverControl.destroyDivert(name.toString());
+ checkNoResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(name));
+ assertEquals(0, serverControl.getDivertNames().length);
+
// check that a message is no longer diverted
message = session.createMessage(false);
String text2 = RandomUtil.randomString();
@@ -567,12 +576,101 @@
assertNotNull(message);
assertEquals(text2, message.getStringProperty("prop"));
+ consumer.close();
+ divertedConsumer.close();
+ session.deleteQueue(queue);
+ session.deleteQueue(divertQueue);
session.close();
+ }
+
+ public void testCreateAndDestroyBridge() throws Exception
+ {
+ String name = RandomUtil.randomString();
+ String sourceAddress = RandomUtil.randomString();
+ String sourceQueue = RandomUtil.randomString();
+ String targetAddress = RandomUtil.randomString();
+ String targetQueue = RandomUtil.randomString();
+
+ HornetQServerControl serverControl = createManagementControl();
+
+ checkNoResource(ObjectNameBuilder.DEFAULT.getBridgeObjectName(name));
+ assertEquals(0, serverControl.getBridgeNames().length);
+
+ ClientSessionFactory csf = new ClientSessionFactoryImpl(new
TransportConfiguration(InVMConnectorFactory.class.getName()));
+ ClientSession session = csf.createSession();
+
+ session.createQueue(sourceAddress, sourceQueue);
+ session.createQueue(targetAddress, targetQueue);
+
+ serverControl.createBridge(name,
+ sourceQueue,
+ targetAddress,
+ null,
+ null,
+ HornetQClient.DEFAULT_RETRY_INTERVAL,
+ HornetQClient.DEFAULT_RETRY_INTERVAL_MULTIPLIER,
+ HornetQClient.DEFAULT_RECONNECT_ATTEMPTS,
+ HornetQClient.DEFAULT_FAILOVER_ON_SERVER_SHUTDOWN,
+ false,
+ 1,
+ HornetQClient.DEFAULT_CLIENT_FAILURE_CHECK_PERIOD,
+ connectorConfig.getName(),
+ null,
+ null,
+ null);
+
+ checkResource(ObjectNameBuilder.DEFAULT.getBridgeObjectName(name));
+ String[] bridgeNames = serverControl.getBridgeNames();
+ assertEquals(1, bridgeNames.length);
+ assertEquals(name, bridgeNames[0]);
+
+ BridgeControl bridgeControl = ManagementControlHelper.createBridgeControl(name,
mbeanServer);
+ assertEquals(name, bridgeControl.getName());
+
+ // check that a message sent to the sourceAddress is put in the tagetQueue
+ ClientProducer producer = session.createProducer(sourceAddress);
+ ClientMessage message = session.createMessage(false);
+ String text = RandomUtil.randomString();
+ message.putStringProperty("prop", text);
+ producer.send(message);
- checkNoResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(name));
+ ClientConsumer sourceConsumer = session.createConsumer(sourceQueue);
+ ClientConsumer targetConsumer = session.createConsumer(targetQueue);
+
+ session.start();
+
+ message = targetConsumer.receive(5000);
+ assertNotNull(message);
+ assertEquals(text, message.getStringProperty("prop"));
+ assertNull(sourceConsumer.receiveImmediate());
+
+
+ serverControl.destroyBridge(name);
+
+ checkNoResource(ObjectNameBuilder.DEFAULT.getBridgeObjectName(name));
+ assertEquals(0, serverControl.getBridgeNames().length);
+
+ // check that a message is no longer diverted
+ message = session.createMessage(false);
+ String text2 = RandomUtil.randomString();
+ message.putStringProperty("prop", text2);
+ producer.send(message);
+
+ assertNull(targetConsumer.receiveImmediate());
+ message = sourceConsumer.receive(5000);
+ assertNotNull(message);
+ assertEquals(text2, message.getStringProperty("prop"));
+
+ sourceConsumer.close();
+ targetConsumer.close();
+
+ session.deleteQueue(sourceQueue);
+ session.deleteQueue(targetQueue);
+
+ session.close();
}
-
+
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
@@ -583,7 +681,7 @@
super.setUp();
Map<String, Object> params = new HashMap<String, Object>();
- params.put(RandomUtil.randomString(), RandomUtil.randomBoolean());
+ //params.put(RandomUtil.randomString(), RandomUtil.randomBoolean());
connectorConfig = new TransportConfiguration(InVMConnectorFactory.class.getName(),
params,
RandomUtil.randomString());
@@ -593,7 +691,6 @@
conf.setJMXManagementEnabled(true);
conf.getAcceptorConfigurations().clear();
conf.getAcceptorConfigurations().add(new
TransportConfiguration(InVMAcceptorFactory.class.getName()));
-
server = HornetQServers.newHornetQServer(conf, mbeanServer, true);
conf.getConnectorConfigurations().put(connectorConfig.getName(), connectorConfig);
server.start();
Modified:
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlUsingCoreTest.java
===================================================================
---
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlUsingCoreTest.java 2010-06-29
14:51:31 UTC (rev 9369)
+++
trunk/tests/src/org/hornetq/tests/integration/management/HornetQServerControlUsingCoreTest.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -13,7 +13,8 @@
package org.hornetq.tests.integration.management;
-import org.hornetq.api.core.SimpleString;
+import java.util.Set;
+
import org.hornetq.api.core.TransportConfiguration;
import org.hornetq.api.core.client.ClientSession;
import org.hornetq.api.core.client.ClientSessionFactory;
@@ -24,12 +25,7 @@
import org.hornetq.core.config.Configuration;
import org.hornetq.core.remoting.impl.invm.InVMConnectorFactory;
import org.hornetq.core.security.Role;
-import org.hornetq.core.settings.impl.AddressFullMessagePolicy;
-import org.hornetq.core.settings.impl.AddressSettings;
-import org.hornetq.utils.json.JSONObject;
-import java.util.Set;
-
/**
* A HornetQServerControlUsingCoreTest
*
@@ -527,6 +523,11 @@
return (String)proxy.invokeOperation("getAddressSettingsAsJSON",
addressMatch);
}
+ public String[] getDivertNames()
+ {
+ return
HornetQServerControlUsingCoreTest.toStringArray((Object[])proxy.retrieveAttributeValue("divertNames"));
+ }
+
public void createDivert(String name,
String routingName,
String address,
@@ -542,6 +543,85 @@
{
proxy.invokeOperation("destroyDivert", name);
}
+
+
+ public String[] getBridgeNames()
+ {
+ return
HornetQServerControlUsingCoreTest.toStringArray((Object[])proxy.retrieveAttributeValue("bridgeNames"));
+ }
+
+ public void createBridge(String name,
+ String queueName,
+ String forwardingAddress,
+ String filterString,
+ String transformerClassName,
+ long retryInterval,
+ double retryIntervalMultiplier,
+ int reconnectAttempts,
+ boolean failoverOnServerShutdown,
+ boolean useDuplicateDetection,
+ int confirmationWindowSize,
+ long clientFailureCheckPeriod,
+ String discoveryGroupName,
+ String user,
+ String password) throws Exception
+ {
+ proxy.invokeOperation("createBridge", name,
+ queueName,
+ forwardingAddress,
+ filterString,
+ transformerClassName,
+ retryInterval,
+ retryIntervalMultiplier,
+ reconnectAttempts,
+ failoverOnServerShutdown,
+ useDuplicateDetection,
+ confirmationWindowSize,
+ clientFailureCheckPeriod,
+ discoveryGroupName,
+ user,
+ password);
+ }
+
+ public void createBridge(String name,
+ String queueName,
+ String forwardingAddress,
+ String filterString,
+ String transformerClassName,
+ long retryInterval,
+ double retryIntervalMultiplier,
+ int reconnectAttempts,
+ boolean failoverOnServerShutdown,
+ boolean useDuplicateDetection,
+ int confirmationWindowSize,
+ long clientFailureCheckPeriod,
+ String liveConnector,
+ String backupConnector,
+ String user,
+ String password) throws Exception
+ {
+ proxy.invokeOperation("createBridge", name,
+ queueName,
+ forwardingAddress,
+ filterString,
+ transformerClassName,
+ retryInterval,
+ retryIntervalMultiplier,
+ reconnectAttempts,
+ failoverOnServerShutdown,
+ useDuplicateDetection,
+ confirmationWindowSize,
+ clientFailureCheckPeriod,
+ liveConnector,
+ backupConnector,
+ user,
+ password);
+ }
+
+ public void destroyBridge(String name) throws Exception {
+ proxy.invokeOperation("destroyBridge", name);
+
+ }
};
}
// Package protected ---------------------------------------------
Modified:
trunk/tests/src/org/hornetq/tests/integration/management/ManagementControlHelper.java
===================================================================
---
trunk/tests/src/org/hornetq/tests/integration/management/ManagementControlHelper.java 2010-06-29
14:51:31 UTC (rev 9369)
+++
trunk/tests/src/org/hornetq/tests/integration/management/ManagementControlHelper.java 2010-06-29
14:53:51 UTC (rev 9370)
@@ -80,7 +80,7 @@
public static DivertControl createDivertControl(final String name, final MBeanServer
mbeanServer) throws Exception
{
- return
(DivertControl)ManagementControlHelper.createProxy(ObjectNameBuilder.DEFAULT.getDivertObjectName(new
SimpleString(name)),
+ return
(DivertControl)ManagementControlHelper.createProxy(ObjectNameBuilder.DEFAULT.getDivertObjectName(name),
DivertControl.class,
mbeanServer);
}