You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jl...@apache.org on 2006/09/15 02:31:47 UTC

svn commit: r443534 - in /incubator/activemq/trunk/activemq-core/src: main/java/org/apache/activemq/broker/BrokerService.java test/java/org/apache/activemq/broker/BrokerServiceTest.java

Author: jlim
Date: Thu Sep 14 17:31:46 2006
New Revision: 443534

URL: http://svn.apache.org/viewvc?view=rev&rev=443534
Log:
fix for http://issues.apache.org/activemq/browse/AMQ-922

Added:
    incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/BrokerServiceTest.java
Modified:
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java?view=diff&rev=443534&r1=443533&r2=443534
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java Thu Sep 14 17:31:46 2006
@@ -186,6 +186,23 @@
         return connector;
     }
 
+
+    /**
+     * Stops and removes a transport connector from the broker.
+     * 
+     * @param connector
+     * @return true if the connector has been previously added to the broker
+     * @throws Exception
+     */
+    public boolean removeConnector(TransportConnector connector) throws Exception {        
+        boolean rc = transportConnectors.remove(connector);
+        if( rc ) {
+           unregisterConnectorMBean(connector);
+        }
+        return rc;
+        
+    }
+
     /**
      * Adds a new network connector using the given discovery address
      *
@@ -1015,20 +1032,52 @@
         }
     }
 
-    protected void registerConnectorMBean(TransportConnector connector, ObjectName objectName) throws IOException, URISyntaxException {
+    protected TransportConnector registerConnectorMBean(TransportConnector connector) throws IOException  {
         MBeanServer mbeanServer = getManagementContext().getMBeanServer();
         if (mbeanServer != null) {
-            ConnectorViewMBean view = new ConnectorView(connector);
+
             try {
+                ObjectName objectName = createConnectorObjectName(connector);
+                connector = connector.asManagedConnector(getManagementContext().getMBeanServer(), objectName);
+                ConnectorViewMBean view = new ConnectorView(connector);            
                 mbeanServer.registerMBean(view, objectName);
                 registeredMBeanNames.add(objectName);
+                return connector;
             }
             catch (Throwable e) {
-                throw IOExceptionSupport.create("Broker could not be registered in JMX: " + e.getMessage(), e);
+                throw IOExceptionSupport.create("Transport Connector could not be registered in JMX: " + e.getMessage(), e);
             }
         }
+        return connector;
+    }
+    
+    protected void unregisterConnectorMBean(TransportConnector connector) throws IOException {
+        if (isUseJmx()) {
+	        MBeanServer mbeanServer = getManagementContext().getMBeanServer();
+	        if (mbeanServer != null) {
+	            try {
+	                ObjectName objectName = createConnectorObjectName(connector);
+	
+	                if( registeredMBeanNames.remove(objectName) ) {
+	                       mbeanServer.unregisterMBean(objectName);
+	                }
+	            }
+	            catch (Throwable e) {
+	                throw IOExceptionSupport.create("Transport Connector could not be registered in JMX: " + e.getMessage(), e);
+	            }
+	        }
+        }
     }
 
+	private ObjectName createConnectorObjectName(TransportConnector connector) throws MalformedObjectNameException {
+		return new ObjectName(
+		        managementContext.getJmxDomainName()+":"+
+		        "BrokerName="+JMXSupport.encodeObjectNamePart(getBrokerName())+","+
+		        "Type=Connector,"+
+		        "ConnectorName="+JMXSupport.encodeObjectNamePart(connector.getName())
+		        );
+	}    
+
     protected void registerNetworkConnectorMBean(NetworkConnector connector) throws IOException {
         MBeanServer mbeanServer = getManagementContext().getMBeanServer();
         if (mbeanServer != null) {
@@ -1039,7 +1088,7 @@
                 registeredMBeanNames.add(objectName);
             }
             catch (Throwable e) {
-                throw IOExceptionSupport.create("Broker could not be registered in JMX: " + e.getMessage(), e);
+                throw IOExceptionSupport.create("Network Connector could not be registered in JMX: " + e.getMessage(), e);
             }
         }
     }
@@ -1056,13 +1105,12 @@
             if (mbeanServer != null) {
                 try {
                     ObjectName objectName = createNetworkConnectorObjectName(connector);
-                    if (registeredMBeanNames.contains(objectName)) {
-                        registeredMBeanNames.remove(objectName);
+                    if (registeredMBeanNames.remove(objectName)) {
                         mbeanServer.unregisterMBean(objectName);
                     }
                 }
                 catch (Exception e) {
-                    log.error("Failed to unregister MBean: " + e, e);
+                    log.error("Network Connector could not be unregistered from JMX: " + e, e);
                 }
             }
         }
@@ -1425,16 +1473,7 @@
         }
         
         if (isUseJmx()) {
-            
-            ObjectName objectName = new ObjectName(
-                    managementContext.getJmxDomainName()+":"+
-                    "BrokerName="+JMXSupport.encodeObjectNamePart(getBrokerName())+","+
-                    "Type=Connector,"+
-                    "ConnectorName="+JMXSupport.encodeObjectNamePart(connector.getName())
-                    );
-            
-            connector = connector.asManagedConnector(getManagementContext().getMBeanServer(), objectName);
-            registerConnectorMBean(connector, objectName);
+            connector = registerConnectorMBean(connector);
         }        
         connector.start();
     }

Added: incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/BrokerServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/BrokerServiceTest.java?view=auto&rev=443534
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/BrokerServiceTest.java (added)
+++ incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/BrokerServiceTest.java Thu Sep 14 17:31:46 2006
@@ -0,0 +1,76 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.apache.activemq.broker;
+
+import org.apache.activemq.network.NetworkConnector;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for the BrokerService class 
+ * @author chirino
+ */
+public class BrokerServiceTest extends TestCase {
+
+	public void testAddRemoveTransportsWithJMX() throws Exception {
+		BrokerService service = new BrokerService();
+		service.setUseJmx(true);
+		service.setPersistent(false);
+		TransportConnector connector = service.addConnector("tcp://localhost:0");
+		service.start();
+		
+		service.removeConnector(connector);
+		connector.stop();
+		service.stop();
+	}
+	
+	public void testAddRemoveTransportsWithoutJMX() throws Exception {
+		BrokerService service = new BrokerService();
+		service.setPersistent(false);
+		service.setUseJmx(false);
+		TransportConnector connector = service.addConnector("tcp://localhost:0");
+		service.start();
+		
+		service.removeConnector(connector);
+		connector.stop();
+		service.stop();
+	}
+	
+	public void testAddRemoveNetworkWithJMX() throws Exception {
+		BrokerService service = new BrokerService();
+		service.setPersistent(false);
+		service.setUseJmx(true);
+		NetworkConnector connector = service.addNetworkConnector("multicast://default");
+		service.start();
+		
+		service.removeNetworkConnector(connector);
+		connector.stop();
+		service.stop();
+	}
+	
+	public void testAddRemoveNetworkWithoutJMX() throws Exception {
+		BrokerService service = new BrokerService();
+		service.setPersistent(false);
+		service.setUseJmx(false);
+		NetworkConnector connector = service.addNetworkConnector("multicast://default");
+		service.start();
+		
+		service.removeNetworkConnector(connector);
+		connector.stop();
+		service.stop();
+	}
+}