[hornetq-commits] JBoss hornetq SVN: r9370 - in trunk: src/main/org/hornetq/api/core/management and 7 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Jun 29 10:53:52 EDT 2010


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);
    }



More information about the hornetq-commits mailing list