http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/security/basic-security
----------------------------------------------------------------------
diff --git 
a/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/security/basic-security
 
b/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/security/basic-security
new file mode 100644
index 0000000..b262a51
--- /dev/null
+++ 
b/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/security/basic-security
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+class=org.apache.activemq.factory.BasicSecurityHandler

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/server/file
----------------------------------------------------------------------
diff --git 
a/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/server/file
 
b/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/server/file
new file mode 100644
index 0000000..e3cf2b1
--- /dev/null
+++ 
b/activemq-bootstrap/src/main/resources/META-INF/services/org/apache/activemq/broker/server/file
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+class=org.apache.activemq.factory.FileBrokerHandler

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java
----------------------------------------------------------------------
diff --git 
a/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java 
b/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java
index 7d64011..9b25d18 100644
--- a/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java
+++ b/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java
@@ -18,10 +18,25 @@ package org.apache.activemq.dto;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "basic-security")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class BasicSecurityDTO extends SecurityDTO
 {
+   @XmlElement(required = true)
+   public String users;
+
+   @XmlElement(required = true)
+   public String roles;
+
+   @XmlElement(name = "default-user")
+   public String defaultUser;
+
+   @XmlElement(name = "mask-password")
+   public Boolean maskPassword = false;
+
+   @XmlElement
+   public String passwordCodec;
 }

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-dto/src/main/java/org/apache/activemq/dto/BrokerDTO.java
----------------------------------------------------------------------
diff --git a/activemq-dto/src/main/java/org/apache/activemq/dto/BrokerDTO.java 
b/activemq-dto/src/main/java/org/apache/activemq/dto/BrokerDTO.java
index 252b050..a11d6b8 100644
--- a/activemq-dto/src/main/java/org/apache/activemq/dto/BrokerDTO.java
+++ b/activemq-dto/src/main/java/org/apache/activemq/dto/BrokerDTO.java
@@ -27,15 +27,12 @@ import java.util.List;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class BrokerDTO
 {
-
    @XmlElementRef
-   public CoreDTO core;
-
-   @XmlElementRef(required = false)
-   public JmsDTO jms;
+   public SecurityDTO security;
 
    @XmlElementRef
-   public SecurityDTO security;
+   public ServerDTO server;
+
 
    @XmlElementRef(required = false)
    public WebServerDTO web;

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-dto/src/main/java/org/apache/activemq/dto/CoreDTO.java
----------------------------------------------------------------------
diff --git a/activemq-dto/src/main/java/org/apache/activemq/dto/CoreDTO.java 
b/activemq-dto/src/main/java/org/apache/activemq/dto/CoreDTO.java
deleted file mode 100644
index 820d461..0000000
--- a/activemq-dto/src/main/java/org/apache/activemq/dto/CoreDTO.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.dto;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "core")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class CoreDTO
-{
-
-   @XmlAttribute
-   public String configuration;
-
-}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-dto/src/main/java/org/apache/activemq/dto/JmsDTO.java
----------------------------------------------------------------------
diff --git a/activemq-dto/src/main/java/org/apache/activemq/dto/JmsDTO.java 
b/activemq-dto/src/main/java/org/apache/activemq/dto/JmsDTO.java
deleted file mode 100644
index efa0da2..0000000
--- a/activemq-dto/src/main/java/org/apache/activemq/dto/JmsDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.dto;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "jms")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class JmsDTO
-{
-
-   @XmlAttribute
-   public String configuration;
-
-}
-

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-dto/src/main/java/org/apache/activemq/dto/ServerDTO.java
----------------------------------------------------------------------
diff --git a/activemq-dto/src/main/java/org/apache/activemq/dto/ServerDTO.java 
b/activemq-dto/src/main/java/org/apache/activemq/dto/ServerDTO.java
new file mode 100644
index 0000000..9ef2168
--- /dev/null
+++ b/activemq-dto/src/main/java/org/apache/activemq/dto/ServerDTO.java
@@ -0,0 +1,32 @@
+/**
+ * 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.dto;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "server")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class ServerDTO
+{
+
+   @XmlAttribute
+   public String configuration;
+
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-dto/src/main/resources/org/apache/activemq/dto/jaxb.index
----------------------------------------------------------------------
diff --git a/activemq-dto/src/main/resources/org/apache/activemq/dto/jaxb.index 
b/activemq-dto/src/main/resources/org/apache/activemq/dto/jaxb.index
index 9cffb01..5803f73 100644
--- a/activemq-dto/src/main/resources/org/apache/activemq/dto/jaxb.index
+++ b/activemq-dto/src/main/resources/org/apache/activemq/dto/jaxb.index
@@ -15,8 +15,6 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 BrokerDTO
-CoreDTO
-JmsDTO
 SecurityDTO
 BasicSecurityDTO
 

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/config/impl/FileJMSConfiguration.java
----------------------------------------------------------------------
diff --git 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/config/impl/FileJMSConfiguration.java
 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/config/impl/FileJMSConfiguration.java
new file mode 100644
index 0000000..b1fd386
--- /dev/null
+++ 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/config/impl/FileJMSConfiguration.java
@@ -0,0 +1,219 @@
+/**
+ * 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.jms.server.config.impl;
+
+import org.apache.activemq.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.core.config.impl.Validators;
+import org.apache.activemq.core.deployers.Deployable;
+import org.apache.activemq.core.server.ActiveMQComponent;
+import org.apache.activemq.core.server.impl.ActiveMQServerImpl;
+import org.apache.activemq.jms.server.ActiveMQJMSServerLogger;
+import org.apache.activemq.jms.server.config.JMSQueueConfiguration;
+import org.apache.activemq.jms.server.config.TopicConfiguration;
+import org.apache.activemq.jms.server.impl.JMSServerManagerImpl;
+import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
+import org.apache.activemq.utils.XMLConfigurationUtil;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.management.MBeanServer;
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:[email protected]";>Andy Taylor</a>
+ */
+public class FileJMSConfiguration extends JMSConfigurationImpl implements 
Deployable
+{
+   private static final String CONFIGURATION_SCHEMA_URL = 
"schema/activemq-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 boolean parsed = false;
+
+   @Override
+   public void parse(Element config) throws Exception
+   {
+      parseConfiguration(config);
+      parsed = true;
+   }
+
+   @Override
+   public boolean isParsed()
+   {
+      return parsed;
+   }
+
+   @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
+   {
+      ActiveMQServerImpl server = (ActiveMQServerImpl) components.get("core");
+      components.put(CONFIGURATION_SCHEMA_ROOT_ELEMENT, new 
JMSServerManagerImpl(server, this));
+   }
+
+   @Override
+   public String getSchema()
+   {
+      return CONFIGURATION_SCHEMA_URL;
+   }
+
+
+   /**
+    * Parse the JMS Configuration XML
+    */
+   public void parseConfiguration(final Node rootnode) throws Exception
+   {
+
+      ArrayList<JMSQueueConfiguration> queues = new ArrayList<>();
+      ArrayList<TopicConfiguration> topics = new ArrayList<>();
+
+      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)
+            {
+               ActiveMQJMSServerLogger.LOGGER.jmsConfigMissingKey(node);
+               continue;
+            }
+
+            if (node.getNodeName().equals(TOPIC_NODE_NAME))
+            {
+               topics.add(parseTopicConfiguration(node));
+            }
+            else if (node.getNodeName().equals(QUEUE_NODE_NAME))
+            {
+               queues.add(parseQueueConfiguration(node));
+            }
+         }
+      }
+
+      String domain = XMLConfigurationUtil.getString(e, JMX_DOMAIN_NAME, 
ActiveMQDefaultConfiguration.getDefaultJmxDomain(), Validators.NO_CHECK);
+
+      newConfig(queues, topics, domain);
+   }
+
+   /**
+    * Parse the topic node as a TopicConfiguration object
+    *
+    * @param node
+    * @return topic configuration
+    * @throws Exception
+    */
+   public static TopicConfiguration parseTopicConfiguration(final Node node) 
throws Exception
+   {
+      String topicName = 
node.getAttributes().getNamedItem(NAME_ATTR).getNodeValue();
+
+      return newTopic(topicName);
+   }
+
+   /**
+    * Parse the Queue Configuration node as a QueueConfiguration object
+    *
+    * @param node
+    * @return jms queue configuration
+    * @throws Exception
+    */
+   public static JMSQueueConfiguration 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();
+         }
+      }
+
+      return newQueue(queueName, selectorString, durable);
+   }
+
+   /**
+    * @param topicName
+    * @return
+    */
+   protected static TopicConfiguration newTopic(final String topicName)
+   {
+      return new TopicConfigurationImpl()
+         .setName(topicName);
+   }
+
+   /**
+    * @param queueName
+    * @param selectorString
+    * @param durable
+    * @return
+    */
+   protected static JMSQueueConfiguration newQueue(final String queueName,
+                                            final String selectorString,
+                                            final boolean durable)
+   {
+      return new JMSQueueConfigurationImpl().
+         setName(queueName).
+         setSelector(selectorString).
+         setDurable(durable);
+   }
+
+   /**
+    * @param queues
+    * @param topics
+    * @param domain
+    * @return
+    */
+   protected void newConfig(final ArrayList<JMSQueueConfiguration> queues,
+                            final ArrayList<TopicConfiguration> topics, String 
domain)
+   {
+      setQueueConfigurations(queues)
+            .setTopicConfigurations(topics)
+            .setDomain(domain);
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/embedded/EmbeddedJMS.java
----------------------------------------------------------------------
diff --git 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/embedded/EmbeddedJMS.java
 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/embedded/EmbeddedJMS.java
index e2d5550..bb6277e 100644
--- 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/embedded/EmbeddedJMS.java
+++ 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/embedded/EmbeddedJMS.java
@@ -18,11 +18,13 @@ package org.apache.activemq.jms.server.embedded;
 
 import javax.naming.Context;
 
+import org.apache.activemq.core.config.FileDeploymentManager;
 import org.apache.activemq.core.registry.JndiBindingRegistry;
 import org.apache.activemq.core.registry.MapBindingRegistry;
 import org.apache.activemq.core.server.embedded.EmbeddedActiveMQ;
 import org.apache.activemq.jms.server.JMSServerManager;
 import org.apache.activemq.jms.server.config.JMSConfiguration;
+import org.apache.activemq.jms.server.config.impl.FileJMSConfiguration;
 import org.apache.activemq.jms.server.impl.JMSServerManagerImpl;
 import org.apache.activemq.spi.core.naming.BindingRegistry;
 
@@ -40,19 +42,9 @@ public class EmbeddedJMS extends EmbeddedActiveMQ
 {
    protected JMSServerManagerImpl serverManager;
    protected BindingRegistry registry;
-   protected String jmsConfigResourcePath;
    protected JMSConfiguration jmsConfiguration;
    protected Context context;
 
-   /**
-    * Classpath resource where JMS config file is.  Defaults to 
'activemq-jms.xml'
-    *
-    * @param jmsConfigResourcePath
-    */
-   public void setJmsConfigResourcePath(String jmsConfigResourcePath)
-   {
-      this.jmsConfigResourcePath = jmsConfigResourcePath;
-   }
 
    public BindingRegistry getRegistry()
    {
@@ -113,8 +105,22 @@ public class EmbeddedJMS extends EmbeddedActiveMQ
       {
          serverManager = new JMSServerManagerImpl(activeMQServer, 
jmsConfiguration);
       }
-      else if (jmsConfigResourcePath == null) serverManager = new 
JMSServerManagerImpl(activeMQServer);
-      else serverManager = new JMSServerManagerImpl(activeMQServer, 
jmsConfigResourcePath);
+      else
+      {
+         FileJMSConfiguration fileConfiguration = new FileJMSConfiguration();
+         FileDeploymentManager deploymentManager;
+         if (configResourcePath != null)
+         {
+            deploymentManager = new FileDeploymentManager(configResourcePath);
+         }
+         else
+         {
+            deploymentManager = new FileDeploymentManager();
+         }
+         deploymentManager.addDeployable(fileConfiguration);
+         deploymentManager.readConfiguration();
+         serverManager = new JMSServerManagerImpl(activeMQServer, 
fileConfiguration);
+      }
 
       if (registry == null)
       {

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerConfigParserImpl.java
----------------------------------------------------------------------
diff --git 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerConfigParserImpl.java
 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerConfigParserImpl.java
deleted file mode 100644
index cd948c1..0000000
--- 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerConfigParserImpl.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * 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.jms.server.impl;
-
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.util.ArrayList;
-
-import org.apache.activemq.api.config.ActiveMQDefaultConfiguration;
-import org.apache.activemq.core.config.impl.Validators;
-import org.apache.activemq.jms.server.ActiveMQJMSServerLogger;
-import org.apache.activemq.jms.server.JMSServerConfigParser;
-import org.apache.activemq.jms.server.config.ConnectionFactoryConfiguration;
-import org.apache.activemq.jms.server.config.JMSConfiguration;
-import org.apache.activemq.jms.server.config.JMSQueueConfiguration;
-import org.apache.activemq.jms.server.config.TopicConfiguration;
-import org.apache.activemq.jms.server.config.impl.JMSConfigurationImpl;
-import org.apache.activemq.jms.server.config.impl.JMSQueueConfigurationImpl;
-import org.apache.activemq.jms.server.config.impl.TopicConfigurationImpl;
-import org.apache.activemq.utils.XMLConfigurationUtil;
-import org.apache.activemq.utils.XMLUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * JMS Configuration File Parser.
- *
- * @author <a href="mailto:[email protected]";>Clebert Suconic</a>
- */
-public final class JMSServerConfigParserImpl implements JMSServerConfigParser
-{
-   protected static final String NAME_ATTR = "name";
-
-   public JMSServerConfigParserImpl()
-   {
-   }
-
-   /**
-    * Parse the JMS Configuration XML as a JMSConfiguration object
-    */
-   public JMSConfiguration parseConfiguration(final InputStream stream) throws 
Exception
-   {
-      Reader reader = new InputStreamReader(stream);
-      String xml = org.apache.activemq.utils.XMLUtil.readerToString(reader);
-      xml = XMLUtil.replaceSystemProps(xml);
-      return parseConfiguration(XMLUtil.stringToElement(xml));
-   }
-
-   /**
-    * Parse the JMS Configuration XML as a JMSConfiguration object
-    */
-   public JMSConfiguration parseConfiguration(final Node rootnode) throws 
Exception
-   {
-
-      ArrayList<JMSQueueConfiguration> queues = new 
ArrayList<JMSQueueConfiguration>();
-      ArrayList<TopicConfiguration> topics = new 
ArrayList<TopicConfiguration>();
-      ArrayList<ConnectionFactoryConfiguration> cfs = new 
ArrayList<ConnectionFactoryConfiguration>();
-      String domain = ActiveMQDefaultConfiguration.getDefaultJmxDomain();
-
-      Element e = (Element) rootnode;
-
-      org.apache.activemq.utils.XMLUtil.validate(rootnode, 
"schema/activemq-jms.xsd");
-
-      String[] elements = new String[]{JMSServerDeployer.QUEUE_NODE_NAME,
-         JMSServerDeployer.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(JMSServerConfigParserImpl.NAME_ATTR);
-            if (keyNode == null)
-            {
-               ActiveMQJMSServerLogger.LOGGER.jmsConfigMissingKey(node);
-               continue;
-            }
-
-            if (node.getNodeName().equals(JMSServerDeployer.TOPIC_NODE_NAME))
-            {
-               topics.add(parseTopicConfiguration(node));
-            }
-            else if 
(node.getNodeName().equals(JMSServerDeployer.QUEUE_NODE_NAME))
-            {
-               queues.add(parseQueueConfiguration(node));
-            }
-         }
-      }
-
-      domain = XMLConfigurationUtil.getString(e, 
JMSServerDeployer.JMX_DOMAIN_NAME, 
ActiveMQDefaultConfiguration.getDefaultJmxDomain(), Validators.NO_CHECK);
-
-
-      JMSConfiguration value = newConfig(queues, topics, domain);
-
-      return value;
-   }
-
-   /**
-    * Parse the topic node as a TopicConfiguration object
-    *
-    * @param node
-    * @return topic configuration
-    * @throws Exception
-    */
-   public TopicConfiguration parseTopicConfiguration(final Node node) throws 
Exception
-   {
-      String topicName = 
node.getAttributes().getNamedItem(JMSServerConfigParserImpl.NAME_ATTR).getNodeValue();
-
-      return newTopic(topicName);
-   }
-
-   /**
-    * Parse the Queue Configuration node as a QueueConfiguration object
-    *
-    * @param node
-    * @return jms queue configuration
-    * @throws Exception
-    */
-   public JMSQueueConfiguration parseQueueConfiguration(final Node node) 
throws Exception
-   {
-      Element e = (Element) node;
-      NamedNodeMap atts = node.getAttributes();
-      String queueName = 
atts.getNamedItem(JMSServerConfigParserImpl.NAME_ATTR).getNodeValue();
-      String selectorString = null;
-      boolean durable = XMLConfigurationUtil.getBoolean(e, "durable", 
JMSServerDeployer.DEFAULT_QUEUE_DURABILITY);
-      NodeList children = node.getChildNodes();
-      for (int i = 0; i < children.getLength(); i++)
-      {
-         Node child = children.item(i);
-
-         if 
(JMSServerDeployer.QUEUE_SELECTOR_NODE_NAME.equals(children.item(i).getNodeName()))
-         {
-            Node selectorNode = children.item(i);
-            Node attNode = selectorNode.getAttributes().getNamedItem("string");
-            selectorString = attNode.getNodeValue();
-         }
-      }
-
-      return newQueue(queueName, selectorString, durable);
-   }
-
-   /**
-    * hook for integration layers
-    *
-    * @param topicName
-    * @return
-    */
-   protected TopicConfiguration newTopic(final String topicName)
-   {
-      return new TopicConfigurationImpl()
-         .setName(topicName);
-   }
-
-   /**
-    * hook for integration layers
-    *
-    * @param queueName
-    * @param selectorString
-    * @param durable
-    * @return
-    */
-   protected JMSQueueConfiguration newQueue(final String queueName,
-                                            final String selectorString,
-                                            final boolean durable)
-   {
-      return new JMSQueueConfigurationImpl().
-         setName(queueName).
-         setSelector(selectorString).
-         setDurable(durable);
-   }
-
-   /**
-    * hook for integration layers
-    *
-    * @param queues
-    * @param topics
-    * @param domain
-    * @return
-    */
-   protected JMSConfiguration newConfig(final ArrayList<JMSQueueConfiguration> 
queues,
-                                        final ArrayList<TopicConfiguration> 
topics, String domain)
-   {
-      return new JMSConfigurationImpl()
-         .setQueueConfigurations(queues)
-         .setTopicConfigurations(topics)
-         .setDomain(domain);
-   }
-}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerDeployer.java
----------------------------------------------------------------------
diff --git 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerDeployer.java
 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerDeployer.java
deleted file mode 100644
index 7d3d568..0000000
--- 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerDeployer.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * 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.jms.server.impl;
-
-import org.apache.activemq.core.deployers.DeploymentManager;
-import org.apache.activemq.core.deployers.impl.XmlDeployer;
-import org.apache.activemq.jms.server.JMSServerConfigParser;
-import org.apache.activemq.jms.server.JMSServerManager;
-import org.apache.activemq.jms.server.config.JMSQueueConfiguration;
-import org.apache.activemq.jms.server.config.TopicConfiguration;
-import org.w3c.dom.Node;
-
-/**
- * @author <a href="[email protected]">Andy Taylor</a>
- * @author <a href="[email protected]">Tim Fox</a>
- * @author <a href="[email protected]">Jeff Mesnil</a>
- */
-public class JMSServerDeployer extends XmlDeployer
-{
-   private final JMSServerConfigParser parser;
-
-   private final JMSServerManager jmsServerManager;
-
-   protected static final String QUEUE_NODE_NAME = "queue";
-
-   protected static final String QUEUE_SELECTOR_NODE_NAME = "selector";
-
-   protected static final String TOPIC_NODE_NAME = "topic";
-
-   protected static final String JMX_DOMAIN_NAME = "jmx-domain";
-
-   protected static final boolean DEFAULT_QUEUE_DURABILITY = true;
-
-   public JMSServerDeployer(final JMSServerManager jmsServerManager,
-                            final DeploymentManager deploymentManager)
-   {
-      super(deploymentManager);
-
-      this.jmsServerManager = jmsServerManager;
-
-      parser = new JMSServerConfigParserImpl();
-   }
-
-   /**
-    * the names of the elements to deploy
-    *
-    * @return the names of the elements todeploy
-    */
-   @Override
-   public String[] getElementTagName()
-   {
-      return new String[]{JMSServerDeployer.QUEUE_NODE_NAME,
-         JMSServerDeployer.TOPIC_NODE_NAME};
-   }
-
-   @Override
-   public void validate(final Node rootNode) throws Exception
-   {
-      org.apache.activemq.utils.XMLUtil.validate(rootNode, 
"schema/activemq-jms.xsd");
-   }
-
-   /**
-    * deploy an element
-    *
-    * @param node the element to deploy
-    * @throws Exception
-    */
-   @Override
-   public void deploy(final Node node) throws Exception
-   {
-      createAndBindObject(node);
-   }
-
-   /**
-    * Creates the object to bind, this will either be a ActiveMQQueue or 
ActiveMQTopic.
-    *
-    * @param node the config
-    * @throws Exception
-    */
-   private void createAndBindObject(final Node node) throws Exception
-   {
-      if (node.getNodeName().equals(JMSServerDeployer.QUEUE_NODE_NAME))
-      {
-         deployQueue(node);
-      }
-      else if (node.getNodeName().equals(JMSServerDeployer.TOPIC_NODE_NAME))
-      {
-         deployTopic(node);
-      }
-   }
-
-   /**
-    * Undeploys an element.
-    *
-    * @param node the element to undeploy
-    * @throws Exception
-    */
-   @Override
-   public void undeploy(final Node node) throws Exception
-   {
-      if (node.getNodeName().equals(JMSServerDeployer.QUEUE_NODE_NAME))
-      {
-         String queueName = 
node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
-         jmsServerManager.removeQueueFromBindingRegistry(queueName);
-      }
-      else if (node.getNodeName().equals(JMSServerDeployer.TOPIC_NODE_NAME))
-      {
-         String topicName = 
node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
-         jmsServerManager.removeTopicFromBindingRegistry(topicName);
-      }
-   }
-
-   @Override
-   public String[] getDefaultConfigFileNames()
-   {
-      return new String[]{"activemq-jms.xml"};
-   }
-
-
-   /**
-    * @param node
-    * @throws Exception
-    */
-   private void deployTopic(final Node node) throws Exception
-   {
-      TopicConfiguration topicConfig = parser.parseTopicConfiguration(node);
-      jmsServerManager.createTopic(false, topicConfig.getName());
-   }
-
-   /**
-    * @param node
-    * @throws Exception
-    */
-   private void deployQueue(final Node node) throws Exception
-   {
-      JMSQueueConfiguration queueconfig = parser.parseQueueConfiguration(node);
-      jmsServerManager.createQueue(false, queueconfig.getName(), 
queueconfig.getSelector(), queueconfig.isDurable());
-   }
-}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerManagerImpl.java
 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerManagerImpl.java
index 5e9fa43..020dd36 100644
--- 
a/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerManagerImpl.java
+++ 
b/activemq-jms-server/src/main/java/org/apache/activemq/jms/server/impl/JMSServerManagerImpl.java
@@ -42,9 +42,6 @@ import org.apache.activemq.api.core.management.ResourceNames;
 import org.apache.activemq.api.jms.ActiveMQJMSClient;
 import org.apache.activemq.api.jms.JMSFactoryType;
 import org.apache.activemq.core.config.Configuration;
-import org.apache.activemq.core.deployers.DeploymentManager;
-import org.apache.activemq.core.deployers.impl.FileDeploymentManager;
-import org.apache.activemq.core.deployers.impl.XmlDeployer;
 import org.apache.activemq.core.postoffice.Binding;
 import org.apache.activemq.core.postoffice.BindingType;
 import org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory;
@@ -130,16 +127,10 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
 
    private JMSManagementService jmsManagementService;
 
-   private XmlDeployer jmsDeployer;
-
    private boolean startCalled;
 
    private boolean active;
 
-   private DeploymentManager deploymentManager;
-
-   private final String configFileName;
-
    private JMSConfiguration config;
 
    private Configuration coreConfig;
@@ -153,8 +144,6 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
       this.server = server;
 
       this.coreConfig = server.getConfiguration();
-
-      configFileName = null;
    }
 
    /**
@@ -170,44 +159,18 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
 
       this.coreConfig = server.getConfiguration();
 
-      configFileName = null;
-
       this.registry = registry;
    }
 
-   public JMSServerManagerImpl(final ActiveMQServer server, final String 
configFileName) throws Exception
-   {
-      this.server = server;
-
-      this.coreConfig = server.getConfiguration();
-
-      this.configFileName = configFileName;
-   }
-
    public JMSServerManagerImpl(final ActiveMQServer server, final 
JMSConfiguration configuration) throws Exception
    {
       this.server = server;
 
       this.coreConfig = server.getConfiguration();
 
-      configFileName = null;
-
       config = configuration;
    }
 
-   /**
-    * Unused
-    */
-   @Deprecated
-   public JMSServerManagerImpl(ActiveMQServer server, String configFilename, 
JMSStorageManager storageManager)
-   {
-      this.server = server;
-
-      configFileName = null;
-
-      storage = storageManager;
-   }
-
    // ActivateCallback implementation -------------------------------------
 
    public void preActivate()
@@ -234,27 +197,7 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
 
          initJournal();
 
-         // start the JMS deployer only if the configuration is not done using 
the JMSConfiguration object
-         if (config == null)
-         {
-            if (server.getConfiguration().isFileDeploymentEnabled())
-            {
-               jmsDeployer = new JMSServerDeployer(this, deploymentManager);
-
-               if (configFileName != null)
-               {
-                  jmsDeployer.setConfigFileNames(new String[]{configFileName});
-               }
-
-               jmsDeployer.start();
-
-               deploymentManager.start();
-            }
-         }
-         else
-         {
-            deploy();
-         }
+         deploy();
 
          for (Runnable run : cachedCommands)
          {
@@ -285,16 +228,6 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
                return;
             }
 
-            if (jmsDeployer != null)
-            {
-               jmsDeployer.stop();
-            }
-
-            if (deploymentManager != null)
-            {
-               deploymentManager.stop();
-            }
-
             // Storage could be null on a shared store backup server before 
initialization
             if (storage != null && storage.isStarted())
             {
@@ -329,7 +262,6 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
                jmsManagementService.stop();
             }
 
-            jmsDeployer = null;
             jmsManagementService = null;
 
             active = false;
@@ -472,7 +404,6 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
          return;
       }
 
-      deploymentManager = new 
FileDeploymentManager(server.getConfiguration().getFileDeployerScanPeriod());
       server.registerActivateCallback(this);
       /**
        * See this method's javadoc.

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-jms-server/src/main/resources/schema/activemq-jms.xsd
----------------------------------------------------------------------
diff --git a/activemq-jms-server/src/main/resources/schema/activemq-jms.xsd 
b/activemq-jms-server/src/main/resources/schema/activemq-jms.xsd
index b1b728c..0a01c32 100644
--- a/activemq-jms-server/src/main/resources/schema/activemq-jms.xsd
+++ b/activemq-jms-server/src/main/resources/schema/activemq-jms.xsd
@@ -16,14 +16,13 @@
   limitations under the License.
 -->
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
-            targetNamespace="urn:activemq"
-            xmlns="urn:activemq"
-            xmlns:amq="urn:org.apache.activemq"
+            xmlns="urn:activemq:jms"
+            targetNamespace="urn:activemq:jms"
             elementFormDefault="qualified"
             attributeFormDefault="unqualified"
             version="1.0">
 
-   <xsd:element name="configuration" amq:schema="activemq-jms-configuration">
+   <xsd:element name="jms">
       <xsd:complexType>
          <xsd:sequence>
             <xsd:element name="jmx-domain" type="xsd:string" 
default="org.apache.activemq"

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-maven-plugin/src/main/java/org/apache/activemq/server/ActiveMQBootstrap.java
----------------------------------------------------------------------
diff --git 
a/activemq-maven-plugin/src/main/java/org/apache/activemq/server/ActiveMQBootstrap.java
 
b/activemq-maven-plugin/src/main/java/org/apache/activemq/server/ActiveMQBootstrap.java
index ae7ecfb..daf6a4b 100644
--- 
a/activemq-maven-plugin/src/main/java/org/apache/activemq/server/ActiveMQBootstrap.java
+++ 
b/activemq-maven-plugin/src/main/java/org/apache/activemq/server/ActiveMQBootstrap.java
@@ -24,15 +24,21 @@ import java.util.Timer;
 import java.util.TimerTask;
 
 import org.apache.activemq.core.config.Configuration;
+import org.apache.activemq.core.config.FileDeploymentManager;
 import org.apache.activemq.core.config.HAPolicyConfiguration;
 import org.apache.activemq.core.config.impl.ConfigurationImpl;
 import org.apache.activemq.core.config.impl.FileConfiguration;
+import org.apache.activemq.core.config.impl.FileSecurityConfiguration;
+import org.apache.activemq.core.config.impl.SecurityConfiguration;
 import org.apache.activemq.core.server.ActiveMQServer;
 import org.apache.activemq.core.server.JournalType;
 import org.apache.activemq.core.server.NodeManager;
 import org.apache.activemq.core.server.impl.ActiveMQServerImpl;
 import org.apache.activemq.core.server.impl.InVMNodeManager;
 import org.apache.activemq.jms.server.JMSServerManager;
+import org.apache.activemq.jms.server.config.JMSConfiguration;
+import org.apache.activemq.jms.server.config.impl.JMSConfigurationImpl;
+import org.apache.activemq.jms.server.config.impl.FileJMSConfiguration;
 import org.apache.activemq.jms.server.impl.JMSServerManagerImpl;
 import org.apache.activemq.maven.InVMNodeManagerServer;
 import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
@@ -59,6 +65,10 @@ public class ActiveMQBootstrap
 
    private Configuration configuration;
 
+   private JMSConfiguration jmsFileConfiguration;
+
+   private SecurityConfiguration securityConfiguration;
+
    private JMSServerManager manager;
 
    private ActiveMQSecurityManager securityManager;
@@ -89,13 +99,25 @@ public class ActiveMQBootstrap
             //extendPluginClasspath(configurationDir);
             configuration = new FileConfiguration();
             File file = new File(configurationDir + "/" + 
"activemq-configuration.xml");
-            ((FileConfiguration) 
configuration).setConfigurationUrl(file.toURI().toURL().toExternalForm());
-            ((FileConfiguration) configuration).start();
+            jmsFileConfiguration = new FileJMSConfiguration();
+            FileDeploymentManager deploymentManager = new 
FileDeploymentManager(file.toURI().toURL().toExternalForm());
+            deploymentManager.addDeployable((FileConfiguration)configuration);
+            deploymentManager.addDeployable((FileJMSConfiguration) 
jmsFileConfiguration);
+
+            securityConfiguration = new FileSecurityConfiguration("file://" + 
configurationDir + "/" + "activemq-users.properties",
+                                                                  "file://" + 
configurationDir + "/" + "activemq-roles.properties",
+                                                                  "guest",
+                                                                  false,
+                                                                  null);
+            ((FileSecurityConfiguration)securityConfiguration).start();
+            deploymentManager.readConfiguration();
          }
          else
          {
             configuration = new ConfigurationImpl();
             configuration.setJournalType(JournalType.NIO);
+            jmsFileConfiguration = new JMSConfigurationImpl();
+            securityConfiguration = new SecurityConfiguration();
          }
 
          createServer(configuration);
@@ -158,12 +180,12 @@ public class ActiveMQBootstrap
             managerMap.put(nodeId, nodeManager);
          }
          server = new InVMNodeManagerServer(configuration, 
ManagementFactory.getPlatformMBeanServer(),
-                                            securityManager != null ? 
securityManager : new ActiveMQSecurityManagerImpl(), nodeManager);
+                                            securityManager != null ? 
securityManager : new ActiveMQSecurityManagerImpl(securityConfiguration), 
nodeManager);
       }
       else
       {
          server = new ActiveMQServerImpl(configuration, 
ManagementFactory.getPlatformMBeanServer(),
-                                         securityManager != null ? 
securityManager : new ActiveMQSecurityManagerImpl());
+                                         securityManager != null ? 
securityManager : new ActiveMQSecurityManagerImpl(securityConfiguration));
       }
 
       manager = new JMSServerManagerImpl(server);

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/main/java/org/apache/activemq/rest/queue/QueueDestinationsResource.java
----------------------------------------------------------------------
diff --git 
a/activemq-rest/src/main/java/org/apache/activemq/rest/queue/QueueDestinationsResource.java
 
b/activemq-rest/src/main/java/org/apache/activemq/rest/queue/QueueDestinationsResource.java
index 0358db1..4f4a877 100644
--- 
a/activemq-rest/src/main/java/org/apache/activemq/rest/queue/QueueDestinationsResource.java
+++ 
b/activemq-rest/src/main/java/org/apache/activemq/rest/queue/QueueDestinationsResource.java
@@ -35,7 +35,7 @@ import org.apache.activemq.api.core.client.ClientSession;
 import org.apache.activemq.jms.client.ActiveMQDestination;
 import org.apache.activemq.jms.client.ActiveMQQueue;
 import org.apache.activemq.jms.server.config.JMSQueueConfiguration;
-import org.apache.activemq.jms.server.impl.JMSServerConfigParserImpl;
+import org.apache.activemq.jms.server.config.impl.FileJMSConfiguration;
 import org.apache.activemq.rest.ActiveMQRestLogger;
 import org.apache.activemq.rest.queue.push.PushConsumerResource;
 import org.apache.activemq.rest.queue.push.xml.PushRegistration;
@@ -65,8 +65,7 @@ public class QueueDestinationsResource
 
       try
       {
-         JMSServerConfigParserImpl parser = new JMSServerConfigParserImpl();
-         JMSQueueConfiguration queue = 
parser.parseQueueConfiguration(document.getDocumentElement());
+         JMSQueueConfiguration queue = 
FileJMSConfiguration.parseQueueConfiguration(document.getDocumentElement());
          ActiveMQQueue activeMQQueue = 
ActiveMQDestination.createQueue(queue.getName());
          String queueName = activeMQQueue.getAddress();
          ClientSession session = 
manager.getSessionFactory().createSession(false, false, false);

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/main/java/org/apache/activemq/rest/topic/TopicDestinationsResource.java
----------------------------------------------------------------------
diff --git 
a/activemq-rest/src/main/java/org/apache/activemq/rest/topic/TopicDestinationsResource.java
 
b/activemq-rest/src/main/java/org/apache/activemq/rest/topic/TopicDestinationsResource.java
index 8ab2a0e..ad65b90 100644
--- 
a/activemq-rest/src/main/java/org/apache/activemq/rest/topic/TopicDestinationsResource.java
+++ 
b/activemq-rest/src/main/java/org/apache/activemq/rest/topic/TopicDestinationsResource.java
@@ -35,7 +35,7 @@ import org.apache.activemq.api.core.client.ClientSession;
 import org.apache.activemq.jms.client.ActiveMQDestination;
 import org.apache.activemq.jms.client.ActiveMQTopic;
 import org.apache.activemq.jms.server.config.TopicConfiguration;
-import org.apache.activemq.jms.server.impl.JMSServerConfigParserImpl;
+import org.apache.activemq.jms.server.config.impl.FileJMSConfiguration;
 import org.apache.activemq.rest.ActiveMQRestLogger;
 import org.apache.activemq.rest.queue.DestinationSettings;
 import org.apache.activemq.rest.queue.PostMessage;
@@ -66,8 +66,7 @@ public class TopicDestinationsResource
 
       try
       {
-         JMSServerConfigParserImpl parser = new JMSServerConfigParserImpl();
-         TopicConfiguration topic = 
parser.parseTopicConfiguration(document.getDocumentElement());
+         TopicConfiguration topic = 
FileJMSConfiguration.parseTopicConfiguration(document.getDocumentElement());
          ActiveMQTopic activeMQTopic = 
ActiveMQDestination.createTopic(topic.getName());
          String topicName = activeMQTopic.getAddress();
          ClientSession session = 
manager.getSessionFactory().createSession(false, false, false);

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/main/resources/schema/hornetq-rest.xsd
----------------------------------------------------------------------
diff --git a/activemq-rest/src/main/resources/schema/hornetq-rest.xsd 
b/activemq-rest/src/main/resources/schema/hornetq-rest.xsd
index ede8a11..de52b74 100644
--- a/activemq-rest/src/main/resources/schema/hornetq-rest.xsd
+++ b/activemq-rest/src/main/resources/schema/hornetq-rest.xsd
@@ -15,8 +15,8 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<xsd:schema xmlns="urn:activemq" version="1.0" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
-    attributeFormDefault="unqualified" elementFormDefault="qualified" 
targetNamespace="urn:activemq">
+<xsd:schema xmlns="urn:activemq:rest" version="1.0" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+    attributeFormDefault="unqualified" elementFormDefault="qualified" 
targetNamespace="urn:activemq:rest">
 
     <xsd:element name="rest-messaging">
         <xsd:complexType>

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/test/java/org/apache/activemq/rest/test/EmbeddedTest.java
----------------------------------------------------------------------
diff --git 
a/activemq-rest/src/test/java/org/apache/activemq/rest/test/EmbeddedTest.java 
b/activemq-rest/src/test/java/org/apache/activemq/rest/test/EmbeddedTest.java
index 1ab39d4..e5a322d 100644
--- 
a/activemq-rest/src/test/java/org/apache/activemq/rest/test/EmbeddedTest.java
+++ 
b/activemq-rest/src/test/java/org/apache/activemq/rest/test/EmbeddedTest.java
@@ -27,9 +27,11 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.activemq.api.jms.JMSFactoryType;
+import org.apache.activemq.core.config.impl.FileSecurityConfiguration;
 import org.apache.activemq.rest.HttpHeaderProperty;
 import org.apache.activemq.rest.integration.EmbeddedRestActiveMQJMS;
 import org.apache.activemq.spi.core.naming.BindingRegistry;
+import org.apache.activemq.spi.core.security.ActiveMQSecurityManagerImpl;
 import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.ClientResponse;
 import org.jboss.resteasy.spi.Link;
@@ -51,6 +53,13 @@ public class EmbeddedTest
    {
       server = new EmbeddedRestActiveMQJMS();
       server.getManager().setConfigResourcePath("activemq-rest.xml");
+      FileSecurityConfiguration securityConfiguration = new 
FileSecurityConfiguration("activemq-users.properties",
+                                                                               
       "activemq-roles.properties",
+                                                                               
       "guest",
+                                                                               
       false,
+                                                                               
       null);
+      securityConfiguration.start();
+      server.getEmbeddedJMS().setSecurityManager(new 
ActiveMQSecurityManagerImpl(securityConfiguration));
       server.start();
       List<String> connectors = new ArrayList<>();
       connectors.add("in-vm");

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/test/resources/activemq-configuration.xml
----------------------------------------------------------------------
diff --git a/activemq-rest/src/test/resources/activemq-configuration.xml 
b/activemq-rest/src/test/resources/activemq-configuration.xml
index 13828ec..f8cb882 100644
--- a/activemq-rest/src/test/resources/activemq-configuration.xml
+++ b/activemq-rest/src/test/resources/activemq-configuration.xml
@@ -16,35 +16,42 @@
 -->
 <configuration xmlns="urn:activemq"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-               xsi:schemaLocation="urn:activemq 
/schema/activemq-configuration.xsd">
-
-    <persistence-enabled>false</persistence-enabled>
-    <!-- Connectors -->
-
-    <connectors>
-        <connector name="in-vm">
-            
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMConnectorFactory</factory-class>
-        </connector>
-    </connectors>
-
-    <acceptors>
-        <acceptor name="in-vm">
-            
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMAcceptorFactory</factory-class>
-        </acceptor>
-    </acceptors>
-
-    <!-- Other config -->
-
-    <security-settings>
-        <!--security for example queue-->
-        <security-setting match="jms.queue.exampleQueue">
-            <permission type="createDurableQueue" roles="guest"/>
-            <permission type="deleteDurableQueue" roles="guest"/>
-            <permission type="createNonDurableQueue" roles="guest"/>
-            <permission type="deleteNonDurableQueue" roles="guest"/>
-            <permission type="consume" roles="guest"/>
-            <permission type="send" roles="guest"/>
-        </security-setting>
-    </security-settings>
+               xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
+   <jms xmlns="urn:activemq:jms">
+      <!--the queue used by the example-->
+      <queue name="exampleQueue"/>
+   </jms>
+
+   <core xmlns="urn:activemq:core">
+
+       <persistence-enabled>false</persistence-enabled>
+       <!-- Connectors -->
+
+       <connectors>
+           <connector name="in-vm">
+               
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMConnectorFactory</factory-class>
+           </connector>
+       </connectors>
+
+       <acceptors>
+           <acceptor name="in-vm">
+               
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMAcceptorFactory</factory-class>
+           </acceptor>
+       </acceptors>
+
+       <!-- Other config -->
+
+       <security-settings>
+           <!--security for example queue-->
+           <security-setting match="jms.queue.exampleQueue">
+               <permission type="createDurableQueue" roles="guest"/>
+               <permission type="deleteDurableQueue" roles="guest"/>
+               <permission type="createNonDurableQueue" roles="guest"/>
+               <permission type="deleteNonDurableQueue" roles="guest"/>
+               <permission type="consume" roles="guest"/>
+               <permission type="send" roles="guest"/>
+           </security-setting>
+       </security-settings>
+   </core>
 
 </configuration>

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/test/resources/activemq-jms.xml
----------------------------------------------------------------------
diff --git a/activemq-rest/src/test/resources/activemq-jms.xml 
b/activemq-rest/src/test/resources/activemq-jms.xml
deleted file mode 100644
index b6016bf..0000000
--- a/activemq-rest/src/test/resources/activemq-jms.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-  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.
--->
-<configuration xmlns="urn:activemq"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-               xsi:schemaLocation="urn:activemq /schema/activemq-jms.xsd">
-
-    <!--the queue used by the example-->
-    <queue name="exampleQueue"/>
-
-</configuration>

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/test/resources/activemq-roles.properties
----------------------------------------------------------------------
diff --git a/activemq-rest/src/test/resources/activemq-roles.properties 
b/activemq-rest/src/test/resources/activemq-roles.properties
new file mode 100644
index 0000000..4e2d44c
--- /dev/null
+++ b/activemq-rest/src/test/resources/activemq-roles.properties
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+guest=guest
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/test/resources/activemq-users.properties
----------------------------------------------------------------------
diff --git a/activemq-rest/src/test/resources/activemq-users.properties 
b/activemq-rest/src/test/resources/activemq-users.properties
new file mode 100644
index 0000000..4e2d44c
--- /dev/null
+++ b/activemq-rest/src/test/resources/activemq-users.properties
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+guest=guest
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-rest/src/test/resources/activemq-users.xml
----------------------------------------------------------------------
diff --git a/activemq-rest/src/test/resources/activemq-users.xml 
b/activemq-rest/src/test/resources/activemq-users.xml
deleted file mode 100644
index 61c6afe..0000000
--- a/activemq-rest/src/test/resources/activemq-users.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-  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.
--->
-<configuration xmlns="urn:activemq" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-               xsi:schemaLocation="urn:activemq /schema/activemq-users.xsd">
-    <!-- the default user.  this is used where username is null-->
-    <defaultuser name="guest" password="guest">
-        <role name="guest"/>
-    </defaultuser>
-</configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/config/Configuration.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/config/Configuration.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/config/Configuration.java
index 22a0b0e..f6974cd 100644
--- 
a/activemq-server/src/main/java/org/apache/activemq/core/config/Configuration.java
+++ 
b/activemq-server/src/main/java/org/apache/activemq/core/config/Configuration.java
@@ -132,17 +132,6 @@ public interface Configuration extends Serializable
    Configuration setSharedStore(boolean sharedStore);
 
    /**
-    * Returns whether this server will use files to configure and deploy its 
resources. <br>
-    * Default value is {@value 
org.apache.activemq.api.config.ActiveMQDefaultConfiguration#DEFAULT_FILE_DEPLOYMENT_ENABLED}.
-    */
-   boolean isFileDeploymentEnabled();
-
-   /**
-    * Sets whether this server will use files to configure and deploy its 
resources.
-    */
-   Configuration setFileDeploymentEnabled(boolean enable);
-
-   /**
     * Returns whether this server is using persistence and store data. <br>
     * Default value is {@value 
org.apache.activemq.api.config.ActiveMQDefaultConfiguration#DEFAULT_PERSISTENCE_ENABLED}.
     */

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/config/FileDeploymentManager.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/config/FileDeploymentManager.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/config/FileDeploymentManager.java
new file mode 100644
index 0000000..66384bf
--- /dev/null
+++ 
b/activemq-server/src/main/java/org/apache/activemq/core/config/FileDeploymentManager.java
@@ -0,0 +1,115 @@
+/**
+ * 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.core.config;
+
+import org.apache.activemq.core.deployers.Deployable;
+import org.apache.activemq.core.server.ActiveMQComponent;
+import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
+import org.apache.activemq.utils.XMLUtil;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.management.MBeanServer;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * ised to build a set of ActiveMQComponents from a set of Deployables pulled 
out of the configuration file
+ */
+public class FileDeploymentManager
+{
+   private static final String DEFAULT_CONFIGURATION_URL = 
"activemq-configuration.xml";
+
+   private final String configurationUrl;
+
+   LinkedHashMap<String, Deployable> deployables = new LinkedHashMap<>();
+
+   public FileDeploymentManager()
+   {
+      this.configurationUrl = DEFAULT_CONFIGURATION_URL;
+   }
+
+   public FileDeploymentManager(String configurationUrl)
+   {
+      this.configurationUrl = configurationUrl;
+   }
+
+   /*
+   * parse a set of configuration with the Deployables that were given.
+   */
+   public void readConfiguration() throws Exception
+   {
+      URL url = getClass().getClassLoader().getResource(configurationUrl);
+
+      if (url == null)
+      {
+         // The URL is outside of the classloader. Trying a pure url now
+         url = new URL(configurationUrl);
+      }
+      // create a reader
+      Reader reader = new InputStreamReader(url.openStream());
+      String xml = org.apache.activemq.utils.XMLUtil.readerToString(reader);
+      //replace any system props
+      xml = XMLUtil.replaceSystemProps(xml);
+      Element e = org.apache.activemq.utils.XMLUtil.stringToElement(xml);
+
+      //iterate around all the deployables
+      for (Deployable deployable : deployables.values())
+      {
+         String root = deployable.getRootElement();
+         NodeList children = e.getElementsByTagName(root);
+         //if the root element exists then parse it
+         if (root != null && children.getLength() > 0)
+         {
+            Node item = children.item(0);
+            XMLUtil.validate(item, deployable.getSchema());
+            deployable.parse((Element) item);
+         }
+      }
+   }
+
+   /*
+   * Build a set of ActiveMQComponents from the Deployables configured
+   */
+   public Map<String, ActiveMQComponent> buildService(ActiveMQSecurityManager 
securityManager, MBeanServer mBeanServer) throws Exception
+   {
+      Map<String, ActiveMQComponent> components = new HashMap<>();
+      for (Deployable deployable : deployables.values())
+      {
+         // if the deployable was parsed then build the service
+         if (deployable.isParsed())
+         {
+            deployable.buildService(securityManager, mBeanServer, deployables, 
components);
+         }
+      }
+      return components;
+   }
+
+   /*
+   * add a Deployable to be configured
+   */
+   public FileDeploymentManager addDeployable(Deployable deployable)
+   {
+      deployables.put(deployable.getRootElement(), deployable);
+      return this;
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/ConfigurationImpl.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/ConfigurationImpl.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/ConfigurationImpl.java
index 0c69c2b..f951099 100644
--- 
a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/ConfigurationImpl.java
+++ 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/ConfigurationImpl.java
@@ -65,8 +65,6 @@ public class ConfigurationImpl implements Configuration
 
    private String name = "ConfigurationImpl::" + System.identityHashCode(this);
 
-   protected boolean fileDeploymentEnabled = 
ActiveMQDefaultConfiguration.isDefaultFileDeploymentEnabled();
-
    private boolean persistenceEnabled = 
ActiveMQDefaultConfiguration.isDefaultPersistenceEnabled();
 
    protected long fileDeploymentScanPeriod = 
ActiveMQDefaultConfiguration.getDefaultFileDeployerScanPeriod();
@@ -224,17 +222,6 @@ public class ConfigurationImpl implements Configuration
       return !getClusterConfigurations().isEmpty();
    }
 
-   public boolean isFileDeploymentEnabled()
-   {
-      return fileDeploymentEnabled;
-   }
-
-   public ConfigurationImpl setFileDeploymentEnabled(final boolean enable)
-   {
-      fileDeploymentEnabled = enable;
-      return this;
-   }
-
    public boolean isPersistenceEnabled()
    {
       return persistenceEnabled;
@@ -1360,7 +1347,6 @@ public class ConfigurationImpl implements Configuration
       result = prime * result + ((discoveryGroupConfigurations == null) ? 0 : 
discoveryGroupConfigurations.hashCode());
       result = prime * result + ((divertConfigurations == null) ? 0 : 
divertConfigurations.hashCode());
       result = prime * result + (failoverOnServerShutdown ? 1231 : 1237);
-      result = prime * result + (fileDeploymentEnabled ? 1231 : 1237);
       result = prime * result + (int)(fileDeploymentScanPeriod ^ 
(fileDeploymentScanPeriod >>> 32));
       result = prime * result + ((groupingHandlerConfiguration == null) ? 0 : 
groupingHandlerConfiguration.hashCode());
       result = prime * result + idCacheSize;
@@ -1528,8 +1514,6 @@ public class ConfigurationImpl implements Configuration
          return false;
       if (failoverOnServerShutdown != other.failoverOnServerShutdown)
          return false;
-      if (fileDeploymentEnabled != other.fileDeploymentEnabled)
-         return false;
       if (fileDeploymentScanPeriod != other.fileDeploymentScanPeriod)
          return false;
       if (groupingHandlerConfiguration == null)

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileConfiguration.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileConfiguration.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileConfiguration.java
index f4bfd21..0d19be2 100644
--- 
a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileConfiguration.java
+++ 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileConfiguration.java
@@ -16,68 +16,39 @@
  */
 package org.apache.activemq.core.config.impl;
 
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.URL;
+import java.util.Map;
 
+import org.apache.activemq.core.deployers.Deployable;
 import org.apache.activemq.core.deployers.impl.FileConfigurationParser;
-import org.apache.activemq.core.server.ActiveMQServerLogger;
-import org.apache.activemq.utils.XMLUtil;
+import org.apache.activemq.core.server.ActiveMQComponent;
+import org.apache.activemq.core.server.impl.ActiveMQServerImpl;
+import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
 import org.w3c.dom.Element;
 
+import javax.management.MBeanServer;
+
 /**
  * A {@code FileConfiguration} reads configuration values from a file.
  *
  * @author <a href="[email protected]">Andy Taylor</a>
  * @author <a href="[email protected]">Tim Fox</a>
  */
-public final class FileConfiguration extends ConfigurationImpl
+public final class FileConfiguration extends ConfigurationImpl implements 
Deployable
 {
    private static final long serialVersionUID = -4766689627675039596L;
-   // Constants 
------------------------------------------------------------------------
 
-   private static final String DEFAULT_CONFIGURATION_URL = 
"activemq-configuration.xml";
+   private static final String CONFIGURATION_SCHEMA_URL = 
"schema/activemq-configuration.xsd";
+
+   private static final String CONFIGURATION_SCHEMA_ROOT_ELEMENT = "core";
 
    // For a bridge confirmations must be activated or send acknowledgments 
won't return
    public static final int DEFAULT_CONFIRMATION_WINDOW_SIZE = 1024 * 1024;
 
-   public FileConfiguration()
-   {
-      configurationUrl = DEFAULT_CONFIGURATION_URL;
-   }
-
-   public FileConfiguration(String configurationUrl)
-   {
-      this.configurationUrl = configurationUrl;
-   }
-
-   private String configurationUrl = DEFAULT_CONFIGURATION_URL;
-
-   private boolean started;
+   private boolean parsed = false;
 
-   public synchronized void start() throws Exception
+   @Override
+   public void parse(Element config) throws Exception
    {
-      if (started)
-      {
-         return;
-      }
-
-
-      URL url = getClass().getClassLoader().getResource(configurationUrl);
-
-      if (url == null)
-      {
-         // The URL is outside of the classloader. Trying a pure url now
-         url = new URL(configurationUrl);
-      }
-
-      ActiveMQServerLogger.LOGGER.debug("Loading server configuration from " + 
url);
-
-      Reader reader = new InputStreamReader(url.openStream());
-      String xml = org.apache.activemq.utils.XMLUtil.readerToString(reader);
-      xml = XMLUtil.replaceSystemProps(xml);
-      Element e = org.apache.activemq.utils.XMLUtil.stringToElement(xml);
-
       FileConfigurationParser parser = new FileConfigurationParser();
 
       // https://jira.jboss.org/browse/HORNETQ-478 - We only want to validate 
AIO when
@@ -85,24 +56,32 @@ public final class FileConfiguration extends 
ConfigurationImpl
       //     and we don't want to do it when deploying activemq-queues.xml 
which uses the same parser and XML format
       parser.setValidateAIO(true);
 
-      parser.parseMainConfig(e, this);
+      parser.parseMainConfig(config, this);
 
-      started = true;
+      parsed = true;
+   }
 
+   @Override
+   public boolean isParsed()
+   {
+      return parsed;
    }
 
-   public synchronized void stop() throws Exception
+   @Override
+   public String getRootElement()
    {
-      started = false;
+      return CONFIGURATION_SCHEMA_ROOT_ELEMENT;
    }
 
-   public String getConfigurationUrl()
+   @Override
+   public void buildService(ActiveMQSecurityManager securityManager, 
MBeanServer mBeanServer, Map<String, Deployable> deployables, Map<String, 
ActiveMQComponent> components)
    {
-      return configurationUrl;
+      components.put(getRootElement(), new ActiveMQServerImpl(this, 
mBeanServer, securityManager));
    }
 
-   public void setConfigurationUrl(final String configurationUrl)
+   @Override
+   public String getSchema()
    {
-      this.configurationUrl = configurationUrl;
+      return CONFIGURATION_SCHEMA_URL;
    }
 }

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileSecurityConfiguration.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileSecurityConfiguration.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileSecurityConfiguration.java
new file mode 100644
index 0000000..554e759
--- /dev/null
+++ 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/FileSecurityConfiguration.java
@@ -0,0 +1,127 @@
+/**
+ * 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.core.config.impl;
+
+import org.apache.activemq.utils.PasswordMaskingUtil;
+import org.apache.activemq.utils.SensitiveDataCodec;
+
+import java.net.URL;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:[email protected]";>Andy Taylor</a>
+ */
+public class FileSecurityConfiguration extends SecurityConfiguration
+{
+   private final String usersUrl;
+
+   private final String rolesUrl;
+
+   private boolean maskPassword;
+
+   private String passwordCodec;
+
+   private boolean started;
+
+   public FileSecurityConfiguration(String usersUrl, String rolesUrl, String 
defaultUser, Boolean maskPassword, String passwordCodec)
+   {
+      this.usersUrl = usersUrl;
+      this.rolesUrl = rolesUrl;
+      this.defaultUser = defaultUser;
+      this.maskPassword = maskPassword;
+      this.passwordCodec = passwordCodec;
+   }
+
+   public void stop() throws Exception
+   {
+      users.clear();
+
+      roles.clear();
+
+      defaultUser = null;
+   }
+
+   public boolean isStarted()
+   {
+      return true;
+   }
+
+
+   public synchronized void start() throws Exception
+   {
+      if (started)
+      {
+         return;
+      }
+      SensitiveDataCodec<String> codec = null;
+      if (maskPassword)
+      {
+         if (passwordCodec != null)
+         {
+            codec = PasswordMaskingUtil.getDefaultCodec();
+         }
+         else
+         {
+            codec = PasswordMaskingUtil.getCodec(passwordCodec);
+         }
+      }
+      URL theUsersUrl = getClass().getClassLoader().getResource(usersUrl);
+
+      if (theUsersUrl == null)
+      {
+         // The URL is outside of the classloader. Trying a pure url now
+         theUsersUrl = new URL(usersUrl);
+      }
+      Properties userProps = new Properties();
+      userProps.load(theUsersUrl.openStream());
+      URL theRolesUrl = getClass().getClassLoader().getResource(usersUrl);
+
+      if (theRolesUrl == null)
+      {
+         // The URL is outside of the classloader. Trying a pure url now
+         theRolesUrl = new URL(rolesUrl);
+      }
+      Properties roleProps = new Properties();
+      roleProps.load(theRolesUrl.openStream());
+
+      Set<String> keys = userProps.stringPropertyNames();
+
+      for (String username : keys)
+      {
+         String password = userProps.getProperty(username);
+         if (codec != null)
+         {
+            password = codec.decode(password);
+         }
+         addUser(username, password);
+      }
+
+      for (String username : keys)
+      {
+         String roles = roleProps.getProperty(username);
+         String[] split = roles.split(",");
+         for (String role : split)
+         {
+            addRole(username, role.trim());
+         }
+      }
+
+      started = true;
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/SecurityConfiguration.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/config/impl/SecurityConfiguration.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/SecurityConfiguration.java
new file mode 100644
index 0000000..81decfd
--- /dev/null
+++ 
b/activemq-server/src/main/java/org/apache/activemq/core/config/impl/SecurityConfiguration.java
@@ -0,0 +1,103 @@
+/**
+ * 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.core.config.impl;
+
+import org.apache.activemq.core.security.User;
+import org.apache.activemq.core.server.ActiveMQMessageBundle;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:[email protected]";>Andy Taylor</a>
+ */
+public class SecurityConfiguration
+{   /**
+    * the current valid users
+    */
+   protected final Map<String, User> users = new HashMap<String, User>();
+
+   protected String defaultUser = null;
+
+   /**
+    * the roles for the users
+    */
+   protected final Map<String, List<String>> roles = new HashMap<String, 
List<String>>();
+
+
+   public void addUser(final String user, final String password)
+   {
+      if (user == null)
+      {
+         throw ActiveMQMessageBundle.BUNDLE.nullUser();
+      }
+      if (password == null)
+      {
+         throw ActiveMQMessageBundle.BUNDLE.nullPassword();
+      }
+      users.put(user, new User(user, password));
+   }
+
+   public void removeUser(final String user)
+   {
+      users.remove(user);
+      roles.remove(user);
+   }
+
+   public void addRole(final String user, final String role)
+   {
+      if (roles.get(user) == null)
+      {
+         roles.put(user, new ArrayList<String>());
+      }
+      roles.get(user).add(role);
+   }
+
+   public void removeRole(final String user, final String role)
+   {
+      if (roles.get(user) == null)
+      {
+         return;
+      }
+      roles.get(user).remove(role);
+   }
+
+   /*
+   * set the default user for null users
+   */
+   public void setDefaultUser(final String username)
+   {
+      defaultUser = username;
+   }
+
+   public String getDefaultUser()
+   {
+      return defaultUser;
+   }
+
+   public org.apache.activemq.core.security.User getUser(String username)
+   {
+      return users.get(username);
+   }
+
+   public List<String> getRole(String username)
+   {
+      return roles.get(username);
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployable.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployable.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployable.java
new file mode 100644
index 0000000..282bda4
--- /dev/null
+++ 
b/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployable.java
@@ -0,0 +1,57 @@
+/**
+ * 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.core.deployers;
+
+import org.apache.activemq.core.server.ActiveMQComponent;
+import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
+import org.w3c.dom.Element;
+
+import javax.management.MBeanServer;
+import java.util.Map;
+
+/**
+ * A Deployable is an object that can be configured via an xml configuration 
element in the main configuration file "activemq-configuration.xml"
+ * It holds all the information needed by the FileDeploymentManager to parse 
the configuration and build the component
+ */
+public interface Deployable
+{
+   /*
+   * parse the element from the xml configuration
+   */
+   void parse(Element config) throws Exception;
+
+   /*
+   * has this Deployable been parsed
+   */
+   boolean isParsed();
+
+   /*
+   * The name of the root xml element for this Deployable, i.e. core or jms
+   */
+   String getRootElement();
+
+   /*
+   * The schema that should be used to validate the xml
+   */
+   String getSchema();
+
+   /*
+   * builds the service. The implementation should add a component to the 
components map passed in if it needs to.
+   */
+   void buildService(ActiveMQSecurityManager securityManager, MBeanServer 
mBeanServer, Map<String, Deployable> deployables, Map<String, 
ActiveMQComponent> components) throws Exception;
+
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/4b63891a/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployer.java
----------------------------------------------------------------------
diff --git 
a/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployer.java
 
b/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployer.java
deleted file mode 100644
index cfdc722..0000000
--- 
a/activemq-server/src/main/java/org/apache/activemq/core/deployers/Deployer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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.core.deployers;
-
-import java.net.URI;
-
-import org.apache.activemq.core.server.ActiveMQComponent;
-
-/**
- * abstract class that helps with deployment of messaging components.
- *
- * @author <a href="[email protected]">Andy Taylor</a>
- */
-public interface Deployer extends ActiveMQComponent
-{
-   /**
-    * The name of the configuration files to look for for deployment
-    *
-    * @return The names of the config files
-    */
-   String[] getConfigFileNames();
-
-   /**
-    * Deploy the URL for the first time
-    * @param uri The resource todeploy
-    * @throws Exception
-    */
-   void deploy(URI uri) throws Exception;
-
-   /**
-    * Redeploys a URL if changed
-    * @param uri The resource to redeploy
-    * @throws Exception
-    */
-   void redeploy(URI uri) throws Exception;
-
-   /**
-    * Undeploys a resource that has been removed
-    * @param uri The Resource that was deleted
-    * @throws Exception
-    */
-   void undeploy(URI uri) throws Exception;
-}
\ No newline at end of file

Reply via email to