Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 6813C200C25 for ; Fri, 24 Feb 2017 20:07:45 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 66B12160B69; Fri, 24 Feb 2017 19:07:45 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 413DE160B62 for ; Fri, 24 Feb 2017 20:07:44 +0100 (CET) Received: (qmail 24984 invoked by uid 500); 24 Feb 2017 19:07:43 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 24974 invoked by uid 99); 24 Feb 2017 19:07:43 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 24 Feb 2017 19:07:43 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 5D64BDFC1C; Fri, 24 Feb 2017 19:07:43 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: cshannon@apache.org To: commits@activemq.apache.org Message-Id: <2c66426efa54414296e73d14f0334591@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: activemq git commit: AMQ-6610 - Network connector mbean not registered on reload Date: Fri, 24 Feb 2017 19:07:43 +0000 (UTC) archived-at: Fri, 24 Feb 2017 19:07:45 -0000 Repository: activemq Updated Branches: refs/heads/master 0cf64783d -> bab0887ed AMQ-6610 - Network connector mbean not registered on reload On network connector add or update after broker start (such as the runtime plugins) the mbean was not created. There was also a couple of other properties not set. Fixed the network connector start to be the same for normal broker start and runtime reload. Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/bab0887e Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/bab0887e Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/bab0887e Branch: refs/heads/master Commit: bab0887ed60907d4ccac1824d83371a592f94925 Parents: 0cf6478 Author: Christopher L. Shannon (cshannon) Authored: Fri Feb 24 14:05:27 2017 -0500 Committer: Christopher L. Shannon (cshannon) Committed: Fri Feb 24 14:05:27 2017 -0500 ---------------------------------------------------------------------- .../apache/activemq/broker/BrokerService.java | 64 +++++++++++++------- .../plugin/NetworkConnectorProcessor.java | 6 +- .../java/JavaRuntimeConfigurationBroker.java | 2 +- .../apache/activemq/NetworkConnectorTest.java | 26 ++++++++ .../activemq/java/JavaNetworkConnectorTest.java | 30 ++++++++- .../activemq/network/SimpleNetworkTest.java | 3 + 6 files changed, 103 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/bab0887e/activemq-broker/src/main/java/org/apache/activemq/broker/BrokerService.java ---------------------------------------------------------------------- diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/BrokerService.java b/activemq-broker/src/main/java/org/apache/activemq/broker/BrokerService.java index 9d75f28..14e86e8 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/BrokerService.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/BrokerService.java @@ -50,6 +50,7 @@ import java.util.concurrent.atomic.AtomicLong; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import javax.management.InstanceNotFoundException; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; @@ -2270,7 +2271,7 @@ public class BrokerService implements Service { } } - protected ObjectName createNetworkConnectorObjectName(NetworkConnector connector) throws MalformedObjectNameException { + public ObjectName createNetworkConnectorObjectName(NetworkConnector connector) throws MalformedObjectNameException { return BrokerMBeanSupport.createNetworkConnectorName(getBrokerObjectName(), "networkConnectors", connector.getName()); } @@ -2603,7 +2604,6 @@ public class BrokerService implements Service { * @throws Exception */ public void startAllConnectors() throws Exception { - Set durableDestinations = getBroker().getDurableDestinations(); List al = new ArrayList<>(); for (Iterator iter = getTransportConnectors().iterator(); iter.hasNext();) { TransportConnector connector = iter.next(); @@ -2642,26 +2642,7 @@ public class BrokerService implements Service { for (Iterator iter = getNetworkConnectors().iterator(); iter.hasNext();) { final NetworkConnector connector = iter.next(); connector.setLocalUri(uri); - connector.setBrokerName(getBrokerName()); - connector.setDurableDestinations(durableDestinations); - if (getDefaultSocketURIString() != null) { - connector.setBrokerURL(getDefaultSocketURIString()); - } - if (networkConnectorStartExecutor != null) { - networkConnectorStartExecutor.execute(new Runnable() { - @Override - public void run() { - try { - LOG.info("Async start of {}", connector); - connector.start(); - } catch(Exception e) { - LOG.error("Async start of network connector: {} failed", connector, e); - } - } - }); - } else { - connector.start(); - } + startNetworkConnector(connector, networkConnectorStartExecutor); } if (networkConnectorStartExecutor != null) { // executor done when enqueued tasks are complete @@ -2683,6 +2664,45 @@ public class BrokerService implements Service { } } + public void startNetworkConnector(final NetworkConnector connector, + final ThreadPoolExecutor networkConnectorStartExecutor) throws Exception { + connector.setBrokerName(getBrokerName()); + //set the durable destinations to match the broker if not set on the connector + if (connector.getDurableDestinations() == null) { + connector.setDurableDestinations(getBroker().getDurableDestinations()); + } + String defaultSocketURI = getDefaultSocketURIString(); + if (defaultSocketURI != null) { + connector.setBrokerURL(defaultSocketURI); + } + //If using the runtime plugin to start a network connector then the mbean needs + //to be added, under normal start it will already exist so check for InstanceNotFoundException + if (isUseJmx()) { + ObjectName networkMbean = createNetworkConnectorObjectName(connector); + try { + getManagementContext().getObjectInstance(networkMbean); + } catch (InstanceNotFoundException e) { + LOG.debug("Network connector MBean {} not found, registering", networkMbean); + registerNetworkConnectorMBean(connector); + } + } + if (networkConnectorStartExecutor != null) { + networkConnectorStartExecutor.execute(new Runnable() { + @Override + public void run() { + try { + LOG.info("Async start of {}", connector); + connector.start(); + } catch(Exception e) { + LOG.error("Async start of network connector: {} failed", connector, e); + } + } + }); + } else { + connector.start(); + } + } + public TransportConnector startTransportConnector(TransportConnector connector) throws Exception { connector.setBrokerService(this); connector.setTaskRunnerFactory(getTaskRunnerFactory()); http://git-wip-us.apache.org/repos/asf/activemq/blob/bab0887e/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/NetworkConnectorProcessor.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/NetworkConnectorProcessor.java b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/NetworkConnectorProcessor.java index a761d5b..6ea1454 100644 --- a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/NetworkConnectorProcessor.java +++ b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/NetworkConnectorProcessor.java @@ -16,13 +16,13 @@ */ package org.apache.activemq.plugin; +import java.util.TreeMap; + import org.apache.activemq.network.DiscoveryNetworkConnector; import org.apache.activemq.network.NetworkConnector; import org.apache.activemq.schema.core.DtoNetworkConnector; import org.apache.activemq.util.IntrospectionSupport; -import java.util.TreeMap; - public class NetworkConnectorProcessor extends DefaultConfigurationProcessor { public NetworkConnectorProcessor(RuntimeConfigurationBroker plugin, Class configurationClass) { @@ -36,7 +36,7 @@ public class NetworkConnectorProcessor extends DefaultConfigurationProcessor { try { DiscoveryNetworkConnector nc = fromDto(networkConnector, new DiscoveryNetworkConnector()); plugin.getBrokerService().addNetworkConnector(nc); - nc.start(); + plugin.getBrokerService().startNetworkConnector(nc, null); plugin.info("started new network connector: " + nc); } catch (Exception e) { plugin.info("Failed to add new networkConnector " + networkConnector, e); http://git-wip-us.apache.org/repos/asf/activemq/blob/bab0887e/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/java/JavaRuntimeConfigurationBroker.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/java/JavaRuntimeConfigurationBroker.java b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/java/JavaRuntimeConfigurationBroker.java index 66f8560..23faeec 100644 --- a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/java/JavaRuntimeConfigurationBroker.java +++ b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/java/JavaRuntimeConfigurationBroker.java @@ -104,7 +104,7 @@ public class JavaRuntimeConfigurationBroker extends AbstractRuntimeConfiguration try { if (!getBrokerService().getNetworkConnectors().contains(nc)) { getBrokerService().addNetworkConnector(nc); - nc.start(); + getBrokerService().startNetworkConnector(nc, null); info("started new network connector: " + nc); } else { info("skipping network connector add, already exists: " + nc); http://git-wip-us.apache.org/repos/asf/activemq/blob/bab0887e/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java b/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java index 97ced17..400fbde 100644 --- a/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java +++ b/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java @@ -17,8 +17,13 @@ package org.apache.activemq; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import javax.management.InstanceNotFoundException; import org.apache.activemq.network.NetworkConnector; import org.apache.activemq.util.Wait; @@ -57,6 +62,10 @@ public class NetworkConnectorTest extends RuntimeConfigTestSupport { assertEquals("one statically included", 1, networkConnector.getStaticallyIncludedDestinations().size()); assertEquals("one dynamically included", 1, networkConnector.getDynamicallyIncludedDestinations().size()); assertEquals("one durable", 1, networkConnector.getDurableDestinations().size()); + assertFalse(networkConnector.getBrokerName().isEmpty()); + + assertNotNull(brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(networkConnector))); } @@ -84,6 +93,10 @@ public class NetworkConnectorTest extends RuntimeConfigTestSupport { applyNewConfig(brokerConfig, configurationSeed + "-mod-one-nc", SLEEP); assertEquals("no new network connectors", 1, brokerService.getNetworkConnectors().size()); assertSame("same instance", modNetworkConnector, brokerService.getNetworkConnectors().get(0)); + assertFalse(modNetworkConnector.getBrokerName().isEmpty()); + + assertNotNull(brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(modNetworkConnector))); } @Test @@ -95,6 +108,8 @@ public class NetworkConnectorTest extends RuntimeConfigTestSupport { assertTrue("broker alive", brokerService.isStarted()); assertEquals("correct network connectors", 2, brokerService.getNetworkConnectors().size()); + NetworkConnector two = brokerService.getNetworkConnectors().get(1); + applyNewConfig(brokerConfig, configurationSeed + "-one-nc", SLEEP); assertTrue("expected mod on time", Wait.waitFor(new Wait.Condition() { @@ -106,5 +121,16 @@ public class NetworkConnectorTest extends RuntimeConfigTestSupport { NetworkConnector remainingNetworkConnector = brokerService.getNetworkConnectors().get(0); assertEquals("name match", "one", remainingNetworkConnector.getName()); + + try { + brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(two)); + fail("mbean for nc2 should not exist"); + } catch (InstanceNotFoundException e) { + //should throw exception + } + + assertNotNull(brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(remainingNetworkConnector))); } } http://git-wip-us.apache.org/repos/asf/activemq/blob/bab0887e/activemq-runtime-config/src/test/java/org/apache/activemq/java/JavaNetworkConnectorTest.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/test/java/org/apache/activemq/java/JavaNetworkConnectorTest.java b/activemq-runtime-config/src/test/java/org/apache/activemq/java/JavaNetworkConnectorTest.java index db0b715..254414d 100644 --- a/activemq-runtime-config/src/test/java/org/apache/activemq/java/JavaNetworkConnectorTest.java +++ b/activemq-runtime-config/src/test/java/org/apache/activemq/java/JavaNetworkConnectorTest.java @@ -17,14 +17,19 @@ package org.apache.activemq.java; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.net.URI; import java.util.Arrays; import java.util.HashSet; import java.util.concurrent.TimeUnit; +import javax.management.InstanceNotFoundException; + import org.apache.activemq.RuntimeConfigTestSupport; import org.apache.activemq.broker.BrokerPlugin; import org.apache.activemq.broker.BrokerService; @@ -61,7 +66,6 @@ public class JavaNetworkConnectorTest extends RuntimeConfigTestSupport { startBroker(brokerService); assertTrue("broker alive", brokerService.isStarted()); assertEquals("no network connectors", 0, brokerService.getNetworkConnectors().size()); - DiscoveryNetworkConnector nc = createNetworkConnector(); javaConfigBroker.addNetworkConnector(nc); @@ -85,6 +89,10 @@ public class JavaNetworkConnectorTest extends RuntimeConfigTestSupport { assertEquals("one statically included", 1, networkConnector.getStaticallyIncludedDestinations().size()); assertEquals("one dynamically included", 1, networkConnector.getDynamicallyIncludedDestinations().size()); assertEquals("one durable", 1, networkConnector.getDurableDestinations().size()); + assertFalse(networkConnector.getBrokerName().isEmpty()); + + assertNotNull(brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(networkConnector))); } @@ -105,6 +113,8 @@ public class JavaNetworkConnectorTest extends RuntimeConfigTestSupport { // track the original NetworkConnector networkConnector = brokerService.getNetworkConnectors().get(0); assertEquals("network ttl is default", 1, networkConnector.getNetworkTTL()); + assertNotNull(networkConnector.getBrokerName()); + assertNotNull(networkConnector.getBrokerURL()); nc.setNetworkTTL(2); javaConfigBroker.updateNetworkConnector(nc); @@ -118,6 +128,10 @@ public class JavaNetworkConnectorTest extends RuntimeConfigTestSupport { javaConfigBroker.updateNetworkConnector(nc); assertEquals("no new network connectors", 1, brokerService.getNetworkConnectors().size()); assertSame("same instance", modNetworkConnector, brokerService.getNetworkConnectors().get(0)); + assertFalse(modNetworkConnector.getBrokerName().isEmpty()); + + assertNotNull(brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(modNetworkConnector))); } @Test @@ -135,7 +149,7 @@ public class JavaNetworkConnectorTest extends RuntimeConfigTestSupport { DiscoveryNetworkConnector nc2 = new DiscoveryNetworkConnector(); nc2.setUri(new URI("static:(tcp://localhost:5555)")); nc2.setNetworkTTL(1); - nc2.setName("one"); + nc2.setName("two"); javaConfigBroker.addNetworkConnector(nc1); javaConfigBroker.addNetworkConnector(nc2); @@ -154,6 +168,18 @@ public class JavaNetworkConnectorTest extends RuntimeConfigTestSupport { NetworkConnector remainingNetworkConnector = brokerService.getNetworkConnectors().get(0); assertEquals("name match", "one", remainingNetworkConnector.getName()); + + try { + brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(nc2)); + fail("mbean for nc2 should not exist"); + } catch (InstanceNotFoundException e) { + //should throw exception + } + + assertNotNull(brokerService.getManagementContext().getObjectInstance( + brokerService.createNetworkConnectorObjectName(nc1))); + } private DiscoveryNetworkConnector createNetworkConnector() throws Exception { http://git-wip-us.apache.org/repos/asf/activemq/blob/bab0887e/activemq-unit-tests/src/test/java/org/apache/activemq/network/SimpleNetworkTest.java ---------------------------------------------------------------------- diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/network/SimpleNetworkTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/network/SimpleNetworkTest.java index 5c6b35a..73d8a4f 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/network/SimpleNetworkTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/network/SimpleNetworkTest.java @@ -174,6 +174,9 @@ public class SimpleNetworkTest { assertNull(consumer2.receive(1000)); assertNetworkBridgeStatistics(MESSAGE_COUNT, 0); + + assertNotNull(localBroker.getManagementContext().getObjectInstance( + localBroker.createNetworkConnectorObjectName(localBroker.getNetworkConnectors().get(0)))); } private void waitForConsumerRegistration(final BrokerService brokerService, final int min, final ActiveMQDestination destination) throws Exception {