You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2018/07/17 12:54:33 UTC
[1/2] activemq-artemis git commit: ARTEMIS-1954 Fixing RedeployTest
and moving JMS Parsing
Repository: activemq-artemis
Updated Branches:
refs/heads/master eda38ccf8 -> 29967bc83
ARTEMIS-1954 Fixing RedeployTest and moving JMS Parsing
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/b2d04b9c
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/b2d04b9c
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/b2d04b9c
Branch: refs/heads/master
Commit: b2d04b9ceb544ceb83c0c93e182a2b7f2841fbdb
Parents: eda38cc
Author: Clebert Suconic <cl...@apache.org>
Authored: Mon Jul 16 19:23:45 2018 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Mon Jul 16 22:35:07 2018 -0400
----------------------------------------------------------------------
.../artemis/integration/FileBroker.java | 47 +----
.../config/impl/LegacyJMSConfiguration.java | 196 +++++++++++++++++++
.../artemis/core/server/ActiveMQServers.java | 4 +-
.../core/server/embedded/EmbeddedActiveMQ.java | 4 +-
.../core/server/impl/ActiveMQServerImpl.java | 4 +
5 files changed, 209 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2d04b9c/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
index 744a0e6..3929ed3 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
@@ -18,22 +18,16 @@ package org.apache.activemq.artemis.integration;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
-import org.apache.activemq.artemis.api.core.RoutingType;
-import org.apache.activemq.artemis.core.config.CoreAddressConfiguration;
-import org.apache.activemq.artemis.core.config.CoreQueueConfiguration;
import org.apache.activemq.artemis.core.config.FileDeploymentManager;
import org.apache.activemq.artemis.core.config.impl.FileConfiguration;
+import org.apache.activemq.artemis.core.config.impl.LegacyJMSConfiguration;
import org.apache.activemq.artemis.core.server.ActiveMQComponent;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.ServiceComponent;
import org.apache.activemq.artemis.dto.ServerDTO;
import org.apache.activemq.artemis.integration.bootstrap.ActiveMQBootstrapLogger;
-import org.apache.activemq.artemis.jms.server.config.JMSQueueConfiguration;
-import org.apache.activemq.artemis.jms.server.config.TopicConfiguration;
-import org.apache.activemq.artemis.jms.server.config.impl.FileJMSConfiguration;
import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager;
public class FileBroker implements Broker {
@@ -60,49 +54,14 @@ public class FileBroker implements Broker {
//todo if we start to pullout more configs from the main config then we should pull out the configuration objects from factories if available
FileConfiguration configuration = new FileConfiguration();
- // Keep this as we still want to parse destinations in the <jms> element
- FileJMSConfiguration jmsConfiguration = new FileJMSConfiguration();
+ LegacyJMSConfiguration legacyJMSConfiguration = new LegacyJMSConfiguration(configuration);
FileDeploymentManager fileDeploymentManager = new FileDeploymentManager(configurationUrl);
- fileDeploymentManager.addDeployable(configuration).addDeployable(jmsConfiguration);
+ fileDeploymentManager.addDeployable(configuration).addDeployable(legacyJMSConfiguration);
fileDeploymentManager.readConfiguration();
createDirectories(configuration);
- /**
- * This is a bit of a hack for backwards config compatibility since we no longer want to start the broker
- * using the JMSServerManager which would normally deploy JMS destinations. Here we take the JMS destination
- * configurations from the parsed JMS configuration and add them to the core configuration.
- *
- * It's also important here that we are adding them to the core ADDRESS configurations as those will be
- * deployed first and therefore their configuration will take precedence over other legacy queue configurations
- * which are deployed later. This is so we can maintain support for configurations like those found in the
- * bridge and divert examples where there are JMS and core queues with the same name (which was itself a bit
- * of a hack).
- *
- * This should be removed when support for the old "jms" configuation element is also removed.
- */
- {
- for (JMSQueueConfiguration jmsQueueConfig : jmsConfiguration.getQueueConfigurations()) {
- List<CoreAddressConfiguration> coreAddressConfigurations = configuration.getAddressConfigurations();
- coreAddressConfigurations.add(new CoreAddressConfiguration()
- .setName(jmsQueueConfig.getName())
- .addRoutingType(RoutingType.ANYCAST)
- .addQueueConfiguration(new CoreQueueConfiguration()
- .setAddress(jmsQueueConfig.getName())
- .setName(jmsQueueConfig.getName())
- .setFilterString(jmsQueueConfig.getSelector())
- .setRoutingType(RoutingType.ANYCAST)));
- }
-
- for (TopicConfiguration topicConfig : jmsConfiguration.getTopicConfigurations()) {
- List<CoreAddressConfiguration> coreAddressConfigurations = configuration.getAddressConfigurations();
- coreAddressConfigurations.add(new CoreAddressConfiguration()
- .setName(topicConfig.getName())
- .addRoutingType(RoutingType.MULTICAST));
- }
- }
-
components = fileDeploymentManager.buildService(securityManager, ManagementFactory.getPlatformMBeanServer());
ArrayList<ActiveMQComponent> componentsByStartOrder = getComponentsByStartOrder(components);
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2d04b9c/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/LegacyJMSConfiguration.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/LegacyJMSConfiguration.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/LegacyJMSConfiguration.java
new file mode 100644
index 0000000..bc4a741
--- /dev/null
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/LegacyJMSConfiguration.java
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.core.config.impl;
+
+import javax.management.MBeanServer;
+import javax.xml.XMLConstants;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.activemq.artemis.api.core.RoutingType;
+import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.config.CoreAddressConfiguration;
+import org.apache.activemq.artemis.core.config.CoreQueueConfiguration;
+import org.apache.activemq.artemis.core.deployers.Deployable;
+import org.apache.activemq.artemis.core.server.ActiveMQComponent;
+import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager;
+import org.apache.activemq.artemis.utils.XMLConfigurationUtil;
+import org.apache.activemq.artemis.utils.XMLUtil;
+import org.jboss.logging.Logger;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class LegacyJMSConfiguration implements Deployable {
+
+ private static final Logger logger = Logger.getLogger(LegacyJMSConfiguration.class);
+
+ private static final String CONFIGURATION_SCHEMA_URL = "schema/artemis-jms.xsd";
+
+ private static final String CONFIGURATION_SCHEMA_ROOT_ELEMENT = "jms";
+
+ private static final String NAME_ATTR = "name";
+
+ private static final String QUEUE_NODE_NAME = "queue";
+
+ private static final String QUEUE_SELECTOR_NODE_NAME = "selector";
+
+ private static final String TOPIC_NODE_NAME = "topic";
+
+ private static final String JMX_DOMAIN_NAME = "jmx-domain";
+
+ private static final boolean DEFAULT_QUEUE_DURABILITY = true;
+
+ private URL configurationUrl;
+
+ final Configuration configuration;
+
+
+ public LegacyJMSConfiguration(Configuration configuration) {
+ this.configuration = configuration;
+ }
+
+
+ @Override
+ public void parse(Element config, URL url) throws Exception {
+ parseConfiguration(config);
+ }
+
+ public Configuration getConfiguration() {
+ return configuration;
+ }
+
+ @Override
+ public boolean isParsed() {
+ // always return false here so that the FileDeploymentManager will not invoke buildService()
+ return false;
+ }
+
+ @Override
+ public String getRootElement() {
+ return CONFIGURATION_SCHEMA_ROOT_ELEMENT;
+ }
+
+ @Override
+ public void buildService(ActiveMQSecurityManager securityManager,
+ MBeanServer mBeanServer,
+ Map<String, Deployable> deployables,
+ Map<String, ActiveMQComponent> components) throws Exception {
+ }
+
+ @Override
+ public String getSchema() {
+ return CONFIGURATION_SCHEMA_URL;
+ }
+
+
+ public void parseConfiguration(final InputStream input) throws Exception {
+ Reader reader = new InputStreamReader(input);
+ String xml = XMLUtil.readerToString(reader);
+ xml = XMLUtil.replaceSystemProps(xml);
+ Element e = XMLUtil.stringToElement(xml);
+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ Schema schema = schemaFactory.newSchema(XMLUtil.findResource(CONFIGURATION_SCHEMA_URL));
+ parseConfiguration(e);
+ }
+
+ /**
+ * Parse the JMS Configuration XML
+ */
+ public void parseConfiguration(final Node rootnode) throws Exception {
+
+ Element e = (Element) rootnode;
+
+ String[] elements = new String[]{QUEUE_NODE_NAME, TOPIC_NODE_NAME};
+ for (String element : elements) {
+ NodeList children = e.getElementsByTagName(element);
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ Node keyNode = node.getAttributes().getNamedItem(NAME_ATTR);
+ if (keyNode == null) {
+ logger.warn("Configuration missing jms key " + node);
+ continue;
+ }
+
+ if (node.getNodeName().equals(TOPIC_NODE_NAME)) {
+ parseTopicConfiguration(node);
+ } else if (node.getNodeName().equals(QUEUE_NODE_NAME)) {
+ parseQueueConfiguration(node);
+ }
+ }
+ }
+ }
+
+ /**
+ * Parse the topic node as a TopicConfiguration object
+ *
+ * @param node
+ * @return topic configuration
+ * @throws Exception
+ */
+ public void parseTopicConfiguration(final Node node) throws Exception {
+ String topicName = node.getAttributes().getNamedItem(NAME_ATTR).getNodeValue();
+ List<CoreAddressConfiguration> coreAddressConfigurations = configuration.getAddressConfigurations();
+ coreAddressConfigurations.add(new CoreAddressConfiguration()
+ .setName(topicName)
+ .addRoutingType(RoutingType.MULTICAST));
+ }
+
+ /**
+ * Parse the Queue Configuration node as a QueueConfiguration object
+ *
+ * @param node
+ * @return jms queue configuration
+ * @throws Exception
+ */
+ public void parseQueueConfiguration(final Node node) throws Exception {
+ Element e = (Element) node;
+ NamedNodeMap atts = node.getAttributes();
+ String queueName = atts.getNamedItem(NAME_ATTR).getNodeValue();
+ String selectorString = null;
+ boolean durable = XMLConfigurationUtil.getBoolean(e, "durable", DEFAULT_QUEUE_DURABILITY);
+ NodeList children = node.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ Node child = children.item(i);
+
+ if (QUEUE_SELECTOR_NODE_NAME.equals(children.item(i).getNodeName())) {
+ Node selectorNode = children.item(i);
+ Node attNode = selectorNode.getAttributes().getNamedItem("string");
+ selectorString = attNode.getNodeValue();
+ }
+ }
+
+ List<CoreAddressConfiguration> coreAddressConfigurations = configuration.getAddressConfigurations();
+ coreAddressConfigurations.add(new CoreAddressConfiguration()
+ .setName(queueName)
+ .addRoutingType(RoutingType.ANYCAST)
+ .addQueueConfiguration(new CoreQueueConfiguration()
+ .setAddress(queueName)
+ .setName(queueName)
+ .setFilterString(selectorString)
+ .setRoutingType(RoutingType.ANYCAST)));
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2d04b9c/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServers.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServers.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServers.java
index aed5944..0cb1de1 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServers.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServers.java
@@ -22,6 +22,7 @@ import java.lang.management.ManagementFactory;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.FileDeploymentManager;
import org.apache.activemq.artemis.core.config.impl.FileConfiguration;
+import org.apache.activemq.artemis.core.config.impl.LegacyJMSConfiguration;
import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
@@ -71,7 +72,8 @@ public final class ActiveMQServers {
final ActiveMQSecurityManager securityManager) throws Exception {
FileConfiguration config = new FileConfiguration();
- new FileDeploymentManager(configURL).addDeployable(config).readConfiguration();
+ LegacyJMSConfiguration legacyJMSConfiguration = new LegacyJMSConfiguration(config);
+ new FileDeploymentManager(configURL).addDeployable(config).addDeployable(legacyJMSConfiguration).readConfiguration();
ActiveMQServer server = ActiveMQServers.newActiveMQServer(config, mbeanServer, securityManager);
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2d04b9c/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/embedded/EmbeddedActiveMQ.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/embedded/EmbeddedActiveMQ.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/embedded/EmbeddedActiveMQ.java
index 1065a49..8a65126 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/embedded/EmbeddedActiveMQ.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/embedded/EmbeddedActiveMQ.java
@@ -22,6 +22,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.FileDeploymentManager;
import org.apache.activemq.artemis.core.config.impl.FileConfiguration;
+import org.apache.activemq.artemis.core.config.impl.LegacyJMSConfiguration;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.cluster.ClusterConnection;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
@@ -122,7 +123,8 @@ public class EmbeddedActiveMQ {
configResourcePath = "broker.xml";
FileDeploymentManager deploymentManager = new FileDeploymentManager(configResourcePath);
FileConfiguration config = new FileConfiguration();
- deploymentManager.addDeployable(config);
+ LegacyJMSConfiguration legacyJMSConfiguration = new LegacyJMSConfiguration(config);
+ deploymentManager.addDeployable(config).addDeployable(legacyJMSConfiguration);
deploymentManager.readConfiguration();
configuration = config;
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2d04b9c/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index 9359ecc..4a4ebb6 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -66,6 +66,7 @@ import org.apache.activemq.artemis.core.config.DivertConfiguration;
import org.apache.activemq.artemis.core.config.HAPolicyConfiguration;
import org.apache.activemq.artemis.core.config.StoreConfiguration;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
+import org.apache.activemq.artemis.core.config.impl.LegacyJMSConfiguration;
import org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
import org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser;
import org.apache.activemq.artemis.core.filter.Filter;
@@ -3151,6 +3152,9 @@ public class ActiveMQServerImpl implements ActiveMQServer {
public void reload(URL uri) throws Exception {
if (isActive()) {
Configuration config = new FileConfigurationParser().parseMainConfig(uri.openStream());
+ LegacyJMSConfiguration legacyJMSConfiguration = new LegacyJMSConfiguration(config);
+ legacyJMSConfiguration.parseConfiguration(uri.openStream());
+
ActiveMQServerLogger.LOGGER.reloadingConfiguration("security");
securityRepository.swap(config.getSecurityRoles().entrySet());
configuration.setSecurityRoles(config.getSecurityRoles());
[2/2] activemq-artemis git commit: This closes #2184
Posted by cl...@apache.org.
This closes #2184
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/29967bc8
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/29967bc8
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/29967bc8
Branch: refs/heads/master
Commit: 29967bc8355b23874f10dd9176222ceee6f10d0b
Parents: eda38cc b2d04b9
Author: Clebert Suconic <cl...@apache.org>
Authored: Tue Jul 17 08:54:27 2018 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Tue Jul 17 08:54:27 2018 -0400
----------------------------------------------------------------------
.../artemis/integration/FileBroker.java | 47 +----
.../config/impl/LegacyJMSConfiguration.java | 196 +++++++++++++++++++
.../artemis/core/server/ActiveMQServers.java | 4 +-
.../core/server/embedded/EmbeddedActiveMQ.java | 4 +-
.../core/server/impl/ActiveMQServerImpl.java | 4 +
5 files changed, 209 insertions(+), 46 deletions(-)
----------------------------------------------------------------------