This closes #63 on configuration changes
This commit is contained in:
commit
475f2322e2
|
@ -21,25 +21,16 @@ import io.airlift.command.Command;
|
|||
|
||||
import org.apache.activemq.cli.ActiveMQ;
|
||||
import org.apache.activemq.components.ExternalComponent;
|
||||
import org.apache.activemq.core.config.Configuration;
|
||||
import org.apache.activemq.core.server.ActiveMQComponent;
|
||||
import org.apache.activemq.core.server.impl.ActiveMQServerImpl;
|
||||
import org.apache.activemq.dto.BrokerDTO;
|
||||
import org.apache.activemq.dto.ComponentDTO;
|
||||
import org.apache.activemq.factory.BrokerFactory;
|
||||
import org.apache.activemq.factory.CoreFactory;
|
||||
import org.apache.activemq.factory.JmsFactory;
|
||||
import org.apache.activemq.factory.SecurityManagerFactory;
|
||||
import org.apache.activemq.integration.Broker;
|
||||
import org.apache.activemq.integration.bootstrap.ActiveMQBootstrapLogger;
|
||||
import org.apache.activemq.jms.server.JMSServerManager;
|
||||
import org.apache.activemq.jms.server.config.JMSConfiguration;
|
||||
import org.apache.activemq.jms.server.impl.JMSServerManagerImpl;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
|
||||
import javax.management.MBeanServer;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
@ -50,9 +41,10 @@ public class Run implements Action
|
|||
|
||||
@Arguments(description = "Broker Configuration URI, default 'xml:${ACTIVEMQ_HOME}/config/non-clustered/bootstrap.xml'")
|
||||
String configuration;
|
||||
private JMSServerManager jmsServerManager;
|
||||
private ArrayList<ActiveMQComponent> components = new ArrayList<>();
|
||||
|
||||
private Broker server;
|
||||
|
||||
@Override
|
||||
public Object execute(ActionContext context) throws Exception
|
||||
{
|
||||
|
@ -68,32 +60,15 @@ public class Run implements Action
|
|||
|
||||
System.out.println("Loading configuration file: " + configuration);
|
||||
|
||||
BrokerDTO broker = BrokerFactory.createBroker(configuration);
|
||||
BrokerDTO broker = BrokerFactory.createBrokerConfiguration(configuration);
|
||||
|
||||
addShutdownHook(new File(broker.core.configuration).getParentFile());
|
||||
|
||||
Configuration core = CoreFactory.create(broker.core);
|
||||
|
||||
JMSConfiguration jms = JmsFactory.create(broker.jms);
|
||||
addShutdownHook(new File(broker.server.configuration).getParentFile());
|
||||
|
||||
ActiveMQSecurityManager security = SecurityManagerFactory.create(broker.security);
|
||||
|
||||
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
|
||||
server = BrokerFactory.createServer(broker.server, security);
|
||||
|
||||
ActiveMQServerImpl server = new ActiveMQServerImpl(core, mBeanServer, security);
|
||||
|
||||
if (jms != null)
|
||||
{
|
||||
jmsServerManager = new JMSServerManagerImpl(server, jms);
|
||||
}
|
||||
else
|
||||
{
|
||||
jmsServerManager = new JMSServerManagerImpl(server);
|
||||
}
|
||||
|
||||
ActiveMQBootstrapLogger.LOGGER.serverStarting();
|
||||
|
||||
jmsServerManager.start();
|
||||
server.start();
|
||||
|
||||
if (broker.web != null)
|
||||
{
|
||||
|
@ -139,7 +114,7 @@ public class Run implements Action
|
|||
try
|
||||
{
|
||||
//TODO stop components
|
||||
jmsServerManager.stop();
|
||||
server.stop();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -36,9 +36,9 @@ public class Stop implements Action
|
|||
{
|
||||
configuration = "xml:" + System.getProperty("activemq.home").replace("\\", "/") + "/config/non-clustered/bootstrap.xml";
|
||||
}
|
||||
BrokerDTO broker = BrokerFactory.createBroker(configuration);
|
||||
BrokerDTO broker = BrokerFactory.createBrokerConfiguration(configuration);
|
||||
|
||||
File file = new File(broker.core.configuration).getParentFile();
|
||||
File file = new File(broker.server.configuration).getParentFile();
|
||||
|
||||
File stopFile = new File(file, "STOP_ME");
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/**
|
||||
* 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.factory;
|
||||
|
||||
import org.apache.activemq.core.config.impl.FileSecurityConfiguration;
|
||||
import org.apache.activemq.dto.BasicSecurityDTO;
|
||||
import org.apache.activemq.dto.SecurityDTO;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManagerImpl;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||
*/
|
||||
public class BasicSecurityHandler implements SecurityHandler
|
||||
{
|
||||
@Override
|
||||
public ActiveMQSecurityManager createSecurityManager(SecurityDTO security) throws Exception
|
||||
{
|
||||
BasicSecurityDTO fileSecurity = (BasicSecurityDTO) security;
|
||||
String home = System.getProperty("activemq.home");
|
||||
FileSecurityConfiguration securityConfiguration = new FileSecurityConfiguration(fileSecurity.users.replace("${activemq.home}", home).replace("\\", "/"),
|
||||
fileSecurity.roles.replace("${activemq.home}", home).replace("\\", "/"),
|
||||
fileSecurity.defaultUser,
|
||||
fileSecurity.maskPassword,
|
||||
fileSecurity.passwordCodec);
|
||||
securityConfiguration.start();
|
||||
return new ActiveMQSecurityManagerImpl(securityConfiguration);
|
||||
}
|
||||
}
|
|
@ -18,6 +18,9 @@ package org.apache.activemq.factory;
|
|||
|
||||
import org.apache.activemq.cli.ConfigurationException;
|
||||
import org.apache.activemq.dto.BrokerDTO;
|
||||
import org.apache.activemq.dto.ServerDTO;
|
||||
import org.apache.activemq.integration.Broker;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
import org.apache.activemq.utils.FactoryFinder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -26,7 +29,7 @@ import java.net.URI;
|
|||
public class BrokerFactory
|
||||
{
|
||||
|
||||
public static BrokerDTO createBroker(URI configURI) throws Exception
|
||||
public static BrokerDTO createBrokerConfiguration(URI configURI) throws Exception
|
||||
{
|
||||
if (configURI.getScheme() == null)
|
||||
{
|
||||
|
@ -48,9 +51,30 @@ public class BrokerFactory
|
|||
return factory.createBroker(configURI);
|
||||
}
|
||||
|
||||
public static BrokerDTO createBroker(String configuration) throws Exception
|
||||
public static BrokerDTO createBrokerConfiguration(String configuration) throws Exception
|
||||
{
|
||||
return createBroker(new URI(configuration));
|
||||
return createBrokerConfiguration(new URI(configuration));
|
||||
}
|
||||
|
||||
public static Broker createServer(ServerDTO brokerDTO, ActiveMQSecurityManager security) throws Exception
|
||||
{
|
||||
if (brokerDTO.configuration != null)
|
||||
{
|
||||
BrokerHandler handler;
|
||||
URI configURI = new URI(brokerDTO.configuration.replace("\\", "/"));
|
||||
try
|
||||
{
|
||||
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/broker/server/");
|
||||
handler = (BrokerHandler)finder.newInstance(configURI.getScheme());
|
||||
}
|
||||
catch (IOException ioe )
|
||||
{
|
||||
throw new ConfigurationException("Invalid configuration URI, can't find configuration scheme: " + configURI.getScheme());
|
||||
}
|
||||
|
||||
return handler.createServer(brokerDTO, security);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -14,19 +14,16 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.activemq.dto;
|
||||
package org.apache.activemq.factory;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import org.apache.activemq.dto.ServerDTO;
|
||||
import org.apache.activemq.integration.Broker;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
|
||||
@XmlRootElement(name = "core")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class CoreDTO
|
||||
/**
|
||||
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||
*/
|
||||
public interface BrokerHandler
|
||||
{
|
||||
|
||||
@XmlAttribute
|
||||
public String configuration;
|
||||
|
||||
Broker createServer(ServerDTO brokerDTO, ActiveMQSecurityManager security);
|
||||
}
|
|
@ -1,51 +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.factory;
|
||||
|
||||
import org.apache.activemq.cli.ConfigurationException;
|
||||
import org.apache.activemq.core.config.Configuration;
|
||||
import org.apache.activemq.core.config.impl.ConfigurationImpl;
|
||||
import org.apache.activemq.dto.CoreDTO;
|
||||
import org.apache.activemq.utils.FactoryFinder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
public class CoreFactory
|
||||
{
|
||||
public static Configuration create(CoreDTO core) throws Exception
|
||||
{
|
||||
if (core.configuration != null)
|
||||
{
|
||||
CoreFactoryHandler factory = null;
|
||||
URI configURI = new URI(core.configuration.replace("\\", "/"));
|
||||
try
|
||||
{
|
||||
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/broker/core/");
|
||||
factory = (CoreFactoryHandler)finder.newInstance(configURI.getScheme());
|
||||
}
|
||||
catch (IOException ioe )
|
||||
{
|
||||
throw new ConfigurationException("Invalid configuration URI, can't find configuration scheme: " + configURI.getScheme());
|
||||
}
|
||||
|
||||
return factory.createConfiguration(configURI);
|
||||
}
|
||||
return new ConfigurationImpl();
|
||||
}
|
||||
|
||||
}
|
|
@ -16,18 +16,19 @@
|
|||
*/
|
||||
package org.apache.activemq.factory;
|
||||
|
||||
import org.apache.activemq.core.config.Configuration;
|
||||
import org.apache.activemq.core.config.impl.FileConfiguration;
|
||||
import org.apache.activemq.dto.ServerDTO;
|
||||
import org.apache.activemq.integration.Broker;
|
||||
import org.apache.activemq.integration.FileBroker;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
public class FileCoreFactoryHandler implements CoreFactoryHandler
|
||||
/**
|
||||
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||
*/
|
||||
public class FileBrokerHandler implements BrokerHandler
|
||||
{
|
||||
@Override
|
||||
public Configuration createConfiguration(URI configuration) throws Exception
|
||||
public Broker createServer(ServerDTO brokerDTO, ActiveMQSecurityManager security)
|
||||
{
|
||||
FileConfiguration fileConfiguration = new FileConfiguration(configuration.toURL().toExternalForm());
|
||||
fileConfiguration.start();
|
||||
return fileConfiguration;
|
||||
return new FileBroker(brokerDTO, security);
|
||||
}
|
||||
}
|
|
@ -1,36 +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.factory;
|
||||
|
||||
import org.apache.activemq.jms.server.config.JMSConfiguration;
|
||||
import org.apache.activemq.jms.server.impl.JMSServerConfigParserImpl;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
|
||||
public class FileJmsFactoryHandler implements JmsFactoryHandler
|
||||
{
|
||||
@Override
|
||||
public JMSConfiguration createConfiguration(URI configuration) throws Exception
|
||||
{
|
||||
try (InputStream configIn = new FileInputStream(configuration.getSchemeSpecificPart()))
|
||||
{
|
||||
return new JMSServerConfigParserImpl().parseConfiguration(configIn);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,50 +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.factory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.activemq.cli.ConfigurationException;
|
||||
import org.apache.activemq.dto.JmsDTO;
|
||||
import org.apache.activemq.jms.server.config.JMSConfiguration;
|
||||
import org.apache.activemq.utils.FactoryFinder;
|
||||
|
||||
public class JmsFactory
|
||||
{
|
||||
public static JMSConfiguration create(JmsDTO jms) throws Exception
|
||||
{
|
||||
if (jms != null && jms.configuration != null)
|
||||
{
|
||||
JmsFactoryHandler factory = null;
|
||||
URI configURI = new URI(jms.configuration.replace("\\", "/"));
|
||||
try
|
||||
{
|
||||
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/broker/jms/");
|
||||
factory = (JmsFactoryHandler)finder.newInstance(configURI.getScheme());
|
||||
}
|
||||
catch (IOException ioe )
|
||||
{
|
||||
throw new ConfigurationException("Invalid configuration URI, can't find configuration scheme: " + configURI.getScheme());
|
||||
}
|
||||
|
||||
return factory.createConfiguration(configURI);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -16,11 +16,13 @@
|
|||
*/
|
||||
package org.apache.activemq.factory;
|
||||
|
||||
import org.apache.activemq.core.config.Configuration;
|
||||
import org.apache.activemq.dto.SecurityDTO;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
public interface CoreFactoryHandler
|
||||
/**
|
||||
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||
*/
|
||||
public interface SecurityHandler
|
||||
{
|
||||
Configuration createConfiguration(URI configuration) throws Exception;
|
||||
ActiveMQSecurityManager createSecurityManager(SecurityDTO securityDTO) throws Exception;
|
||||
}
|
|
@ -29,9 +29,9 @@ public class SecurityManagerFactory
|
|||
{
|
||||
if (config != null)
|
||||
{
|
||||
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/security/");
|
||||
ActiveMQSecurityManager manager = (ActiveMQSecurityManager)finder.newInstance(config.getClass().getAnnotation(XmlRootElement.class).name());
|
||||
return manager;
|
||||
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/broker/security/");
|
||||
SecurityHandler securityHandler = (SecurityHandler)finder.newInstance(config.getClass().getAnnotation(XmlRootElement.class).name());
|
||||
return securityHandler.createSecurityManager(config);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -14,13 +14,13 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.activemq.factory;
|
||||
package org.apache.activemq.integration;
|
||||
|
||||
import org.apache.activemq.jms.server.config.JMSConfiguration;
|
||||
import org.apache.activemq.core.server.ActiveMQComponent;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
public interface JmsFactoryHandler
|
||||
/**
|
||||
* A Broker os a set of ActiveMQComponents that create a Server, for instance core and jms.
|
||||
*/
|
||||
public interface Broker extends ActiveMQComponent
|
||||
{
|
||||
JMSConfiguration createConfiguration(URI configuration) throws Exception;
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/**
|
||||
* 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.integration;
|
||||
|
||||
import org.apache.activemq.core.config.FileDeploymentManager;
|
||||
import org.apache.activemq.core.config.impl.FileConfiguration;
|
||||
import org.apache.activemq.core.server.ActiveMQComponent;
|
||||
import org.apache.activemq.dto.ServerDTO;
|
||||
import org.apache.activemq.integration.bootstrap.ActiveMQBootstrapLogger;
|
||||
import org.apache.activemq.jms.server.config.impl.FileJMSConfiguration;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||
*/
|
||||
public class FileBroker implements Broker
|
||||
{
|
||||
private final String configurationUrl;
|
||||
|
||||
private boolean started;
|
||||
|
||||
private final ActiveMQSecurityManager securityManager;
|
||||
|
||||
private Map<String, ActiveMQComponent> components;
|
||||
|
||||
public FileBroker(ServerDTO broker, ActiveMQSecurityManager security)
|
||||
{
|
||||
this.securityManager = security;
|
||||
this.configurationUrl = broker.configuration;
|
||||
}
|
||||
|
||||
|
||||
public synchronized void start() throws Exception
|
||||
{
|
||||
if (started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//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();
|
||||
FileJMSConfiguration jmsConfiguration = new FileJMSConfiguration();
|
||||
|
||||
FileDeploymentManager fileDeploymentManager = new FileDeploymentManager(configurationUrl);
|
||||
fileDeploymentManager.addDeployable(configuration).addDeployable(jmsConfiguration);
|
||||
fileDeploymentManager.readConfiguration();
|
||||
|
||||
components = fileDeploymentManager.buildService(securityManager, ManagementFactory.getPlatformMBeanServer());
|
||||
|
||||
ActiveMQBootstrapLogger.LOGGER.serverStarting();
|
||||
for (ActiveMQComponent component : components.values())
|
||||
{
|
||||
component.start();
|
||||
}
|
||||
started = true;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() throws Exception
|
||||
{
|
||||
if (!started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
ActiveMQComponent[] mqComponents = new ActiveMQComponent[components.size()];
|
||||
components.values().toArray(mqComponents);
|
||||
for (int i = mqComponents.length - 1; i >= 0; i--)
|
||||
{
|
||||
mqComponents[i].stop();
|
||||
}
|
||||
started = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isStarted()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -14,4 +14,4 @@
|
|||
## See the License for the specific language governing permissions and
|
||||
## limitations under the License.
|
||||
## ---------------------------------------------------------------------------
|
||||
class=org.apache.activemq.spi.core.security.ActiveMQSecurityManagerImpl
|
||||
class=org.apache.activemq.factory.BasicSecurityHandler
|
|
@ -14,4 +14,4 @@
|
|||
## See the License for the specific language governing permissions and
|
||||
## limitations under the License.
|
||||
## ---------------------------------------------------------------------------
|
||||
class=org.apache.activemq.factory.FileCoreFactoryHandler
|
||||
class=org.apache.activemq.factory.FileBrokerHandler
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -27,16 +27,13 @@ import java.util.List;
|
|||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class BrokerDTO
|
||||
{
|
||||
|
||||
@XmlElementRef
|
||||
public CoreDTO core;
|
||||
|
||||
@XmlElementRef(required = false)
|
||||
public JmsDTO jms;
|
||||
|
||||
@XmlElementRef
|
||||
public SecurityDTO security;
|
||||
|
||||
@XmlElementRef
|
||||
public ServerDTO server;
|
||||
|
||||
|
||||
@XmlElementRef(required = false)
|
||||
public WebServerDTO web;
|
||||
|
||||
|
|
|
@ -21,13 +21,12 @@ import javax.xml.bind.annotation.XmlAccessorType;
|
|||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "jms")
|
||||
@XmlRootElement(name = "server")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class JmsDTO
|
||||
public class ServerDTO
|
||||
{
|
||||
|
||||
@XmlAttribute
|
||||
public String configuration;
|
||||
|
||||
}
|
||||
|
|
@ -15,8 +15,6 @@
|
|||
## limitations under the License.
|
||||
## ---------------------------------------------------------------------------
|
||||
BrokerDTO
|
||||
CoreDTO
|
||||
JmsDTO
|
||||
SecurityDTO
|
||||
BasicSecurityDTO
|
||||
|
||||
|
|
|
@ -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:andy.taylor@jboss.org">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);
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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:clebert.suconic@jboss.org">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);
|
||||
}
|
||||
}
|
|
@ -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="ataylor@redhat.com">Andy Taylor</a>
|
||||
* @author <a href="tim.fox@jboss.com">Tim Fox</a>
|
||||
* @author <a href="jmesnil@redhat.com">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());
|
||||
}
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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">
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
<jms xmlns="urn:activemq:jms">
|
||||
<!--the queue used by the example-->
|
||||
<queue name="exampleQueue"/>
|
||||
</jms>
|
||||
|
||||
<persistence-enabled>false</persistence-enabled>
|
||||
<!-- Connectors -->
|
||||
<core xmlns="urn:activemq:core">
|
||||
|
||||
<connectors>
|
||||
<connector name="in-vm">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMConnectorFactory</factory-class>
|
||||
</connector>
|
||||
</connectors>
|
||||
<persistence-enabled>false</persistence-enabled>
|
||||
<!-- Connectors -->
|
||||
|
||||
<acceptors>
|
||||
<acceptor name="in-vm">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMAcceptorFactory</factory-class>
|
||||
</acceptor>
|
||||
</acceptors>
|
||||
<connectors>
|
||||
<connector name="in-vm">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMConnectorFactory</factory-class>
|
||||
</connector>
|
||||
</connectors>
|
||||
|
||||
<!-- Other config -->
|
||||
<acceptors>
|
||||
<acceptor name="in-vm">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.invm.InVMAcceptorFactory</factory-class>
|
||||
</acceptor>
|
||||
</acceptors>
|
||||
|
||||
<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>
|
||||
<!-- 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>
|
||||
|
|
|
@ -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>
|
|
@ -1,12 +1,12 @@
|
|||
## ---------------------------------------------------------------------------
|
||||
## Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
## contributor license agreements. See the NOTICE file distributed with
|
||||
## 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
|
||||
## the License. You may obtain a copy of the License at
|
||||
##
|
||||
## http://www.apache.org/licenses/LICENSE-2.0
|
||||
## 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,
|
||||
|
@ -14,4 +14,4 @@
|
|||
## See the License for the specific language governing permissions and
|
||||
## limitations under the License.
|
||||
## ---------------------------------------------------------------------------
|
||||
class=org.apache.activemq.factory.FileJmsFactoryHandler
|
||||
guest=guest
|
|
@ -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
|
|
@ -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>
|
|
@ -131,17 +131,6 @@ public interface Configuration extends Serializable
|
|||
@Deprecated
|
||||
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}.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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="ataylor@redhat.com">Andy Taylor</a>
|
||||
* @author <a href="tim.fox@jboss.com">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()
|
||||
private boolean parsed = false;
|
||||
|
||||
@Override
|
||||
public void parse(Element config) throws Exception
|
||||
{
|
||||
configurationUrl = DEFAULT_CONFIGURATION_URL;
|
||||
}
|
||||
|
||||
public FileConfiguration(String configurationUrl)
|
||||
{
|
||||
this.configurationUrl = configurationUrl;
|
||||
}
|
||||
|
||||
private String configurationUrl = DEFAULT_CONFIGURATION_URL;
|
||||
|
||||
private boolean started;
|
||||
|
||||
public synchronized void start() 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);
|
||||
|
||||
started = true;
|
||||
parser.parseMainConfig(config, this);
|
||||
|
||||
parsed = true;
|
||||
}
|
||||
|
||||
public synchronized void stop() throws Exception
|
||||
@Override
|
||||
public boolean isParsed()
|
||||
{
|
||||
started = false;
|
||||
return parsed;
|
||||
}
|
||||
|
||||
public String getConfigurationUrl()
|
||||
@Override
|
||||
public String getRootElement()
|
||||
{
|
||||
return configurationUrl;
|
||||
return CONFIGURATION_SCHEMA_ROOT_ELEMENT;
|
||||
}
|
||||
|
||||
public void setConfigurationUrl(final String configurationUrl)
|
||||
@Override
|
||||
public void buildService(ActiveMQSecurityManager securityManager, MBeanServer mBeanServer, Map<String, Deployable> deployables, Map<String, ActiveMQComponent> components)
|
||||
{
|
||||
this.configurationUrl = configurationUrl;
|
||||
components.put(getRootElement(), new ActiveMQServerImpl(this, mBeanServer, securityManager));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSchema()
|
||||
{
|
||||
return CONFIGURATION_SCHEMA_URL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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:andy.taylor@jboss.org">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;
|
||||
|
||||
}
|
||||
}
|
|
@ -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:andy.taylor@jboss.org">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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -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="ataylor@redhat.com">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;
|
||||
}
|
|
@ -1,41 +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 org.apache.activemq.core.server.ActiveMQComponent;
|
||||
|
||||
/**
|
||||
* This class manages any configuration files available. It will notify any deployers registered with it on changes.
|
||||
*
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
*/
|
||||
public interface DeploymentManager extends ActiveMQComponent
|
||||
{
|
||||
/**
|
||||
* registers a deployable object which will handle the deployment of URL's
|
||||
* @param deployer The deployable object
|
||||
* @throws Exception
|
||||
*/
|
||||
void registerDeployer(Deployer deployer) throws Exception;
|
||||
|
||||
/**
|
||||
* unregisters a deployable object which will handle the deployment of URL's
|
||||
* @param deployer The deployable object
|
||||
* @throws Exception
|
||||
*/
|
||||
void unregisterDeployer(Deployer deployer) throws Exception;
|
||||
}
|
|
@ -1,106 +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.impl;
|
||||
|
||||
import org.apache.activemq.api.core.Pair;
|
||||
import org.apache.activemq.core.deployers.DeploymentManager;
|
||||
import org.apache.activemq.core.settings.HierarchicalRepository;
|
||||
import org.apache.activemq.core.settings.impl.AddressSettings;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
/**
|
||||
* A deployer for creating a set of queue settings and adding them to a repository
|
||||
*
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
*/
|
||||
public class AddressSettingsDeployer extends XmlDeployer
|
||||
{
|
||||
private final HierarchicalRepository<AddressSettings> addressSettingsRepository;
|
||||
|
||||
private final FileConfigurationParser parser = new FileConfigurationParser();
|
||||
|
||||
public AddressSettingsDeployer(final DeploymentManager deploymentManager,
|
||||
final HierarchicalRepository<AddressSettings> addressSettingsRepository)
|
||||
{
|
||||
super(deploymentManager);
|
||||
this.addressSettingsRepository = addressSettingsRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* the names of the elements to deploy
|
||||
*
|
||||
* @return the names of the elements to deploy
|
||||
*/
|
||||
@Override
|
||||
public String[] getElementTagName()
|
||||
{
|
||||
return new String[]{"address-setting"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validate(final Node rootNode) throws Exception
|
||||
{
|
||||
org.apache.activemq.utils.XMLUtil.validate(rootNode, "schema/activemq-configuration.xsd");
|
||||
}
|
||||
|
||||
/**
|
||||
* deploy an element
|
||||
*
|
||||
* @param node the element to deploy
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public void deploy(final Node node) throws Exception
|
||||
{
|
||||
|
||||
Pair<String, AddressSettings> setting = parser.parseAddressSettings(node);
|
||||
|
||||
addressSettingsRepository.addMatch(setting.getA(), setting.getB());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getDefaultConfigFileNames()
|
||||
{
|
||||
return new String[]{"activemq-configuration.xml", "activemq-queues.xml"};
|
||||
}
|
||||
|
||||
/**
|
||||
* Undeploys an element.
|
||||
*
|
||||
* @param node the element to undeploy
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public void undeploy(final Node node) throws Exception
|
||||
{
|
||||
String match = node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
|
||||
|
||||
addressSettingsRepository.removeMatch(match);
|
||||
}
|
||||
|
||||
/**
|
||||
* the key attribute for the element, usually 'name' but can be overridden
|
||||
*
|
||||
* @return the key attribute
|
||||
*/
|
||||
@Override
|
||||
public String getKeyAttribute()
|
||||
{
|
||||
return "match";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,149 +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.impl;
|
||||
|
||||
import org.apache.activemq.core.deployers.DeploymentManager;
|
||||
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||
import org.apache.activemq.utils.PasswordMaskingUtil;
|
||||
import org.apache.activemq.utils.SensitiveDataCodec;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
* deployer for adding security loaded from the file "activemq-users.xml"
|
||||
*
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
*/
|
||||
public class BasicUserCredentialsDeployer extends XmlDeployer
|
||||
{
|
||||
private final ActiveMQSecurityManager activeMQSecurityManager;
|
||||
|
||||
private static final String PASSWORD_ATTRIBUTE = "password";
|
||||
|
||||
private static final String ROLES_NODE = "role";
|
||||
|
||||
private static final String ROLE_ATTR_NAME = "name";
|
||||
|
||||
private static final String DEFAULT_USER = "defaultuser";
|
||||
|
||||
private static final String USER = "user";
|
||||
|
||||
private static final String MASK_PASSWORD = "mask-password";
|
||||
|
||||
private static final String PASSWORD_CODEC = "password-codec";
|
||||
|
||||
private boolean maskPassword = false;
|
||||
|
||||
private SensitiveDataCodec<String> passwordCodec;
|
||||
|
||||
public BasicUserCredentialsDeployer(final DeploymentManager deploymentManager,
|
||||
final ActiveMQSecurityManager activeMQSecurityManager)
|
||||
{
|
||||
super(deploymentManager);
|
||||
|
||||
this.activeMQSecurityManager = activeMQSecurityManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getElementTagName()
|
||||
{
|
||||
return new String[]{MASK_PASSWORD, PASSWORD_CODEC, DEFAULT_USER, USER};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validate(final Node rootNode) throws Exception
|
||||
{
|
||||
org.apache.activemq.utils.XMLUtil.validate(rootNode, "schema/activemq-users.xsd");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deploy(final Node node) throws Exception
|
||||
{
|
||||
String nodeName = node.getNodeName();
|
||||
|
||||
if (MASK_PASSWORD.equals(nodeName))
|
||||
{
|
||||
String value = node.getTextContent().trim();
|
||||
|
||||
maskPassword = Boolean.parseBoolean(value);
|
||||
|
||||
if (maskPassword)
|
||||
{
|
||||
passwordCodec = PasswordMaskingUtil.getDefaultCodec();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (PASSWORD_CODEC.equals(nodeName))
|
||||
{
|
||||
if (maskPassword)
|
||||
{
|
||||
String codecDesc = node.getTextContent();
|
||||
|
||||
passwordCodec = PasswordMaskingUtil.getCodec(codecDesc);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
String username = node.getAttributes().getNamedItem("name").getNodeValue();
|
||||
String password = node.getAttributes()
|
||||
.getNamedItem(BasicUserCredentialsDeployer.PASSWORD_ATTRIBUTE)
|
||||
.getNodeValue();
|
||||
|
||||
if (maskPassword)
|
||||
{
|
||||
if ((password != null) && (!"".equals(password.trim())))
|
||||
{
|
||||
password = passwordCodec.decode(password);
|
||||
}
|
||||
}
|
||||
|
||||
// add the user
|
||||
activeMQSecurityManager.addUser(username, password);
|
||||
|
||||
if (BasicUserCredentialsDeployer.DEFAULT_USER.equalsIgnoreCase(nodeName))
|
||||
{
|
||||
activeMQSecurityManager.setDefaultUser(username);
|
||||
}
|
||||
NodeList children = node.getChildNodes();
|
||||
for (int i = 0; i < children.getLength(); i++)
|
||||
{
|
||||
Node child = children.item(i);
|
||||
// and add any roles
|
||||
if (BasicUserCredentialsDeployer.ROLES_NODE.equalsIgnoreCase(child.getNodeName()))
|
||||
{
|
||||
String role = child.getAttributes()
|
||||
.getNamedItem(BasicUserCredentialsDeployer.ROLE_ATTR_NAME)
|
||||
.getNodeValue();
|
||||
activeMQSecurityManager.addRole(username, role);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undeploy(final Node node) throws Exception
|
||||
{
|
||||
String username = node.getAttributes().getNamedItem("name").getNodeValue();
|
||||
activeMQSecurityManager.removeUser(username);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getDefaultConfigFileNames()
|
||||
{
|
||||
return new String[]{"activemq-users.xml"};
|
||||
}
|
||||
}
|
|
@ -51,7 +51,6 @@ import org.apache.activemq.core.config.ha.ReplicatedPolicyConfiguration;
|
|||
import org.apache.activemq.core.config.ha.SharedStoreMasterPolicyConfiguration;
|
||||
import org.apache.activemq.core.config.ha.SharedStoreSlavePolicyConfiguration;
|
||||
import org.apache.activemq.core.config.impl.ConfigurationImpl;
|
||||
import org.apache.activemq.core.config.impl.FileConfiguration;
|
||||
import org.apache.activemq.core.config.impl.Validators;
|
||||
import org.apache.activemq.core.journal.impl.AIOSequentialFileFactory;
|
||||
import org.apache.activemq.core.journal.impl.JournalConstants;
|
||||
|
@ -81,11 +80,6 @@ import org.w3c.dom.NodeList;
|
|||
*/
|
||||
public final class FileConfigurationParser extends XMLConfigurationUtil
|
||||
{
|
||||
|
||||
// Constants -----------------------------------------------------
|
||||
|
||||
private static final String CONFIGURATION_SCHEMA_URL = "schema/activemq-configuration.xsd";
|
||||
|
||||
// Security Parsing
|
||||
public static final String SECURITY_ELEMENT_NAME = "security-setting";
|
||||
|
||||
|
@ -193,7 +187,6 @@ public final class FileConfigurationParser extends XMLConfigurationUtil
|
|||
|
||||
public void parseMainConfig(final Element e, final Configuration config) throws Exception
|
||||
{
|
||||
XMLUtil.validate(e, FileConfigurationParser.CONFIGURATION_SCHEMA_URL);
|
||||
|
||||
config.setName(getString(e, "name", config.getName(), Validators.NO_CHECK));
|
||||
|
||||
|
@ -457,9 +450,6 @@ public final class FileConfigurationParser extends XMLConfigurationUtil
|
|||
|
||||
config.setResolveProtocols(getBoolean(e, "resolve-protocols", config.isResolveProtocols()));
|
||||
|
||||
// Defaults to true when using FileConfiguration
|
||||
config.setFileDeploymentEnabled(getBoolean(e, "file-deployment-enabled", config instanceof FileConfiguration));
|
||||
|
||||
config.setPersistenceEnabled(getBoolean(e, "persistence-enabled",
|
||||
config.isPersistenceEnabled()));
|
||||
|
||||
|
|
|
@ -1,337 +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.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.activemq.api.core.Pair;
|
||||
import org.apache.activemq.core.deployers.Deployer;
|
||||
import org.apache.activemq.core.deployers.DeploymentManager;
|
||||
import org.apache.activemq.core.server.ActiveMQServerLogger;
|
||||
|
||||
/**
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
* @author <a href="tim.fox@jboss.com">Tim Fox</a>
|
||||
*/
|
||||
public class FileDeploymentManager implements Runnable, DeploymentManager
|
||||
{
|
||||
private final List<Deployer> deployers = new ArrayList<Deployer>();
|
||||
|
||||
private final Map<Pair<URI, Deployer>, DeployInfo> deployed = new HashMap<Pair<URI, Deployer>, DeployInfo>();
|
||||
|
||||
private ScheduledExecutorService scheduler;
|
||||
|
||||
private boolean started;
|
||||
|
||||
private final long period;
|
||||
|
||||
private ScheduledFuture<?> future;
|
||||
|
||||
public FileDeploymentManager(final long period)
|
||||
{
|
||||
this.period = period;
|
||||
}
|
||||
|
||||
public synchronized void start() throws Exception
|
||||
{
|
||||
if (started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
started = true;
|
||||
|
||||
scheduler = Executors.newSingleThreadScheduledExecutor();
|
||||
|
||||
future = scheduler.scheduleWithFixedDelay(this, period, period, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
public synchronized void stop()
|
||||
{
|
||||
if (!started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
started = false;
|
||||
|
||||
if (future != null)
|
||||
{
|
||||
future.cancel(false);
|
||||
|
||||
future = null;
|
||||
}
|
||||
|
||||
scheduler.shutdown();
|
||||
|
||||
scheduler = null;
|
||||
}
|
||||
|
||||
public synchronized boolean isStarted()
|
||||
{
|
||||
return started;
|
||||
}
|
||||
|
||||
/**
|
||||
* registers a Deployer object which will handle the deployment of URL's
|
||||
*
|
||||
* @param deployer The Deployer object
|
||||
* @throws Exception
|
||||
*/
|
||||
public synchronized void registerDeployer(final Deployer deployer) throws Exception
|
||||
{
|
||||
if (!deployers.contains(deployer))
|
||||
{
|
||||
deployers.add(deployer);
|
||||
|
||||
String[] filenames = deployer.getConfigFileNames();
|
||||
|
||||
for (String filename : filenames)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.debug("the filename is " + filename);
|
||||
|
||||
Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(filename);
|
||||
|
||||
while (urls.hasMoreElements())
|
||||
{
|
||||
URI uri = urls.nextElement().toURI();
|
||||
|
||||
ActiveMQServerLogger.LOGGER.debug("Got URI " + uri);
|
||||
|
||||
try
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.debug("Deploying " + uri + " for " + deployer.getClass().getSimpleName());
|
||||
deployer.deploy(uri);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.errorDeployingURI(e, uri);
|
||||
}
|
||||
|
||||
Pair<URI, Deployer> pair = new Pair<URI, Deployer>(uri, deployer);
|
||||
|
||||
deployed.put(pair, new DeployInfo(deployer, getFileFromURI(uri).lastModified()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void unregisterDeployer(final Deployer deployer) throws Exception
|
||||
{
|
||||
if (deployers.remove(deployer))
|
||||
{
|
||||
String[] filenames = deployer.getConfigFileNames();
|
||||
for (String filename : filenames)
|
||||
{
|
||||
Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(filename);
|
||||
while (urls.hasMoreElements())
|
||||
{
|
||||
URI url = urls.nextElement().toURI();
|
||||
|
||||
Pair<URI, Deployer> pair = new Pair<URI, Deployer>(url, deployer);
|
||||
|
||||
deployed.remove(pair);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private File getFileFromURI(final URI uri) throws MalformedURLException, UnsupportedEncodingException
|
||||
{
|
||||
return new File(URLDecoder.decode(uri.toURL().getFile(), "UTF-8"));
|
||||
}
|
||||
|
||||
/**
|
||||
* called by the ExecutorService every n seconds
|
||||
*/
|
||||
public synchronized void run()
|
||||
{
|
||||
if (!started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
for (Deployer deployer : deployers)
|
||||
{
|
||||
String[] filenames = deployer.getConfigFileNames();
|
||||
|
||||
for (String filename : filenames)
|
||||
{
|
||||
Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(filename);
|
||||
|
||||
while (urls.hasMoreElements())
|
||||
{
|
||||
URL url = urls.nextElement();
|
||||
URI uri;
|
||||
try
|
||||
{
|
||||
uri = url.toURI();
|
||||
}
|
||||
catch (URISyntaxException e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.errorDeployingURI(e);
|
||||
continue;
|
||||
}
|
||||
|
||||
Pair<URI, Deployer> pair = new Pair<URI, Deployer>(uri, deployer);
|
||||
|
||||
DeployInfo info = deployed.get(pair);
|
||||
|
||||
long newLastModified = getFileFromURI(uri).lastModified();
|
||||
|
||||
if (info == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
deployer.deploy(uri);
|
||||
|
||||
deployed.put(pair, new DeployInfo(deployer, getFileFromURI(uri).lastModified()));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.errorDeployingURI(e, uri);
|
||||
}
|
||||
}
|
||||
else if (newLastModified > info.lastModified)
|
||||
{
|
||||
try
|
||||
{
|
||||
deployer.redeploy(uri);
|
||||
|
||||
deployed.put(pair, new DeployInfo(deployer, getFileFromURI(uri).lastModified()));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.errorDeployingURI(e, uri);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Pair<URI, Deployer>> toRemove = new ArrayList<Pair<URI, Deployer>>();
|
||||
for (Map.Entry<Pair<URI, Deployer>, DeployInfo> entry : deployed.entrySet())
|
||||
{
|
||||
Pair<URI, Deployer> pair = entry.getKey();
|
||||
try
|
||||
{
|
||||
if (!fileExists(pair.getA()))
|
||||
{
|
||||
Deployer deployer = entry.getValue().deployer;
|
||||
ActiveMQServerLogger.LOGGER.debug("Undeploying " + deployer + " with url " + pair.getA());
|
||||
deployer.undeploy(pair.getA());
|
||||
toRemove.add(pair);
|
||||
}
|
||||
}
|
||||
catch (URISyntaxException e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.errorUnDeployingURI(e, pair.getA());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.errorUnDeployingURI(e, pair.getA());
|
||||
}
|
||||
}
|
||||
for (Pair<URI, Deployer> pair : toRemove)
|
||||
{
|
||||
deployed.remove(pair);
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.errorScanningURLs(e);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized List<Deployer> getDeployers()
|
||||
{
|
||||
return deployers;
|
||||
}
|
||||
|
||||
public synchronized Map<Pair<URI, Deployer>, DeployInfo> getDeployed()
|
||||
{
|
||||
return deployed;
|
||||
}
|
||||
|
||||
// Private -------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Checks if the URI is among the current thread context class loader's resources.
|
||||
* <p/>
|
||||
* We do not check that the corresponding file exists using File.exists() directly as it would
|
||||
* fail in the case the resource is loaded from inside an EAR file (see
|
||||
* https://jira.jboss.org/jira/browse/HORNETQ-122)
|
||||
*
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
private boolean fileExists(final URI resourceURI) throws URISyntaxException
|
||||
{
|
||||
try
|
||||
{
|
||||
File f = getFileFromURI(resourceURI); // this was the original line, which doesn't work for
|
||||
// File-URLs with white spaces: File f = new
|
||||
// File(resourceURL.getPath());
|
||||
Enumeration<URL> resources = Thread.currentThread().getContextClassLoader().getResources(f.getName());
|
||||
while (resources.hasMoreElements())
|
||||
{
|
||||
URI url = resources.nextElement().toURI();
|
||||
if (url.equals(resourceURI))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Inner classes -------------------------------------------------------------------------------------------
|
||||
|
||||
public static class DeployInfo
|
||||
{
|
||||
public Deployer deployer;
|
||||
|
||||
public long lastModified;
|
||||
|
||||
DeployInfo(final Deployer deployer, final long lastModified)
|
||||
{
|
||||
this.deployer = deployer;
|
||||
this.lastModified = lastModified;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,97 +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.impl;
|
||||
|
||||
import org.apache.activemq.api.core.SimpleString;
|
||||
import org.apache.activemq.core.config.CoreQueueConfiguration;
|
||||
import org.apache.activemq.core.deployers.DeploymentManager;
|
||||
import org.apache.activemq.core.server.ActiveMQServer;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
/**
|
||||
* A QueueDeployer
|
||||
*
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
* @author <a href="jmesnil@redhat.com">Jeff Mesnil</a>
|
||||
* @author <a href="tim.fox@jboss.com">Tim Fox</a>
|
||||
*/
|
||||
public class QueueDeployer extends XmlDeployer
|
||||
{
|
||||
private final ActiveMQServer server;
|
||||
|
||||
private final FileConfigurationParser parser = new FileConfigurationParser();
|
||||
|
||||
public QueueDeployer(final DeploymentManager deploymentManager, final ActiveMQServer server)
|
||||
{
|
||||
super(deploymentManager);
|
||||
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
/**
|
||||
* the names of the elements to deploy
|
||||
*
|
||||
* @return the names of the elements todeploy
|
||||
*/
|
||||
@Override
|
||||
public String[] getElementTagName()
|
||||
{
|
||||
return new String[]{"queue"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validate(final Node rootNode) throws Exception
|
||||
{
|
||||
org.apache.activemq.utils.XMLUtil.validate(rootNode, "schema/activemq-configuration.xsd");
|
||||
}
|
||||
|
||||
/**
|
||||
* deploy an element
|
||||
*
|
||||
* @param node the element to deploy
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public void deploy(final Node node) throws Exception
|
||||
{
|
||||
CoreQueueConfiguration queueConfig = parser.parseQueueConfiguration(node);
|
||||
|
||||
server.deployQueue(SimpleString.toSimpleString(queueConfig.getAddress()),
|
||||
SimpleString.toSimpleString(queueConfig.getName()),
|
||||
SimpleString.toSimpleString(queueConfig.getFilterString()),
|
||||
queueConfig.isDurable(),
|
||||
false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undeploy(final Node node) throws Exception
|
||||
{
|
||||
// Undeploy means nothing for core queues
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the configuration file name to look for for deployment
|
||||
*
|
||||
* @return The name of the config file
|
||||
*/
|
||||
@Override
|
||||
public String[] getDefaultConfigFileNames()
|
||||
{
|
||||
return new String[]{"activemq-configuration.xml", "activemq-queues.xml"};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,117 +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.impl;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.activemq.api.core.Pair;
|
||||
import org.apache.activemq.core.deployers.DeploymentManager;
|
||||
import org.apache.activemq.core.security.Role;
|
||||
import org.apache.activemq.core.settings.HierarchicalRepository;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
/**
|
||||
* Deploys the security settings into a security repository and adds them to the security store.
|
||||
*
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
*/
|
||||
public class SecurityDeployer extends XmlDeployer
|
||||
{
|
||||
private static final String QUEUES_XML = "activemq-queues.xml";
|
||||
|
||||
private static final String MATCH = "match";
|
||||
|
||||
private final FileConfigurationParser parser = new FileConfigurationParser();
|
||||
|
||||
/**
|
||||
* The repository to add to
|
||||
*/
|
||||
private final HierarchicalRepository<Set<Role>> securityRepository;
|
||||
|
||||
public SecurityDeployer(final DeploymentManager deploymentManager,
|
||||
final HierarchicalRepository<Set<Role>> securityRepository)
|
||||
{
|
||||
super(deploymentManager);
|
||||
|
||||
this.securityRepository = securityRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* the names of the elements to deploy
|
||||
*
|
||||
* @return the names of the elements todeploy
|
||||
*/
|
||||
@Override
|
||||
public String[] getElementTagName()
|
||||
{
|
||||
return new String[]{FileConfigurationParser.SECURITY_ELEMENT_NAME};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validate(final Node rootNode) throws Exception
|
||||
{
|
||||
org.apache.activemq.utils.XMLUtil.validate(rootNode, "schema/activemq-configuration.xsd");
|
||||
}
|
||||
|
||||
/**
|
||||
* the key attribute for the element, usually 'name' but can be overridden
|
||||
*
|
||||
* @return the key attribute
|
||||
*/
|
||||
@Override
|
||||
public String getKeyAttribute()
|
||||
{
|
||||
return SecurityDeployer.MATCH;
|
||||
}
|
||||
|
||||
/**
|
||||
* deploy an element
|
||||
*
|
||||
* @param node the element to deploy
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public void deploy(final Node node) throws Exception
|
||||
{
|
||||
Pair<String, Set<Role>> securityMatch = parser.parseSecurityRoles(node);
|
||||
securityRepository.addMatch(securityMatch.getA(), securityMatch.getB());
|
||||
}
|
||||
|
||||
/**
|
||||
* undeploys an element
|
||||
*
|
||||
* @param node the element to undeploy
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public void undeploy(final Node node) throws Exception
|
||||
{
|
||||
String match = node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
|
||||
securityRepository.removeMatch(match);
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the configuration file name to look for for deployment
|
||||
*
|
||||
* @return The name of the config file
|
||||
*/
|
||||
@Override
|
||||
public String[] getDefaultConfigFileNames()
|
||||
{
|
||||
return new String[]{"activemq-configuration.xml", SecurityDeployer.QUEUES_XML};
|
||||
}
|
||||
}
|
|
@ -1,334 +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.impl;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.activemq.api.core.ActiveMQException;
|
||||
import org.apache.activemq.core.deployers.Deployer;
|
||||
import org.apache.activemq.core.deployers.DeploymentManager;
|
||||
import org.apache.activemq.core.server.ActiveMQServerLogger;
|
||||
import org.apache.activemq.utils.XMLUtil;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
*/
|
||||
public abstract class XmlDeployer implements Deployer
|
||||
{
|
||||
protected static final String NAME_ATTR = "name";
|
||||
|
||||
private final Map<URI, Map<String, Node>> configuration = new HashMap<URI, Map<String, Node>>();
|
||||
|
||||
private final DeploymentManager deploymentManager;
|
||||
|
||||
private boolean started;
|
||||
|
||||
private String[] configFileNames;
|
||||
|
||||
public XmlDeployer(final DeploymentManager deploymentManager)
|
||||
{
|
||||
this.deploymentManager = deploymentManager;
|
||||
configFileNames = getDefaultConfigFileNames();
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a URL to the already configured set of url's this deployer is handling
|
||||
* @param url The URL to add
|
||||
* @param name the name of the element
|
||||
* @param e .
|
||||
*/
|
||||
public synchronized void addToConfiguration(final URI url, final String name, final Node e)
|
||||
{
|
||||
Map<String, Node> map = configuration.get(url);
|
||||
if (map == null)
|
||||
{
|
||||
map = new HashMap<String, Node>();
|
||||
configuration.put(url, map);
|
||||
}
|
||||
map.put(name, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Redeploys a URL if changed
|
||||
* @param url The resource to redeploy
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public synchronized void redeploy(final URI url) throws Exception
|
||||
{
|
||||
Element e = getRootElement(url);
|
||||
|
||||
validate(e);
|
||||
|
||||
List<String> added = new ArrayList<String>();
|
||||
// pull out the elements that need deploying
|
||||
String[] elements = getElementTagName();
|
||||
for (String element : elements)
|
||||
{
|
||||
NodeList children = e.getElementsByTagName(element);
|
||||
for (int i = 0; i < children.getLength(); i++)
|
||||
{
|
||||
Node node = children.item(i);
|
||||
|
||||
String name = getName(node);
|
||||
|
||||
added.add(name);
|
||||
// if this has never been deployed deploy
|
||||
Map<String, Node> map = configuration.get(url);
|
||||
if (map == null || map.get(name) == null)
|
||||
{
|
||||
deploy(node);
|
||||
}
|
||||
// or if it has changed redeploy
|
||||
else if (hasNodeChanged(url, node, name))
|
||||
{
|
||||
undeploy(node);
|
||||
deploy(node);
|
||||
addToConfiguration(url, name, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
// now check for anything that has been removed and undeploy
|
||||
if (configuration.get(url) != null)
|
||||
{
|
||||
Set<String> keys = configuration.get(url).keySet();
|
||||
List<String> removed = new ArrayList<String>();
|
||||
|
||||
for (String key : keys)
|
||||
{
|
||||
if (!added.contains(key))
|
||||
{
|
||||
undeploy(configuration.get(url).get(key));
|
||||
removed.add(key);
|
||||
}
|
||||
}
|
||||
for (String s : removed)
|
||||
{
|
||||
configuration.get(url).remove(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undeploys a resource that has been removed
|
||||
* @param uri The Resource that was deleted
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public synchronized void undeploy(final URI uri) throws Exception
|
||||
{
|
||||
Set<String> keys = configuration.get(uri).keySet();
|
||||
for (String key : keys)
|
||||
{
|
||||
undeploy(configuration.get(uri).get(key));
|
||||
}
|
||||
configuration.remove(uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deploy the URL for the first time
|
||||
* @param url The resource to deploy
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public synchronized void deploy(final URI url) throws Exception
|
||||
{
|
||||
Element e = getRootElement(url);
|
||||
|
||||
validate(e);
|
||||
|
||||
Map<String, Node> map = configuration.get(url);
|
||||
if (map == null)
|
||||
{
|
||||
map = new HashMap<String, Node>();
|
||||
configuration.put(url, map);
|
||||
}
|
||||
|
||||
// find all thenodes to deploy
|
||||
String[] elements = getElementTagName();
|
||||
for (String element : elements)
|
||||
{
|
||||
NodeList children = e.getElementsByTagName(element);
|
||||
for (int i = 0; i < children.getLength(); i++)
|
||||
{
|
||||
Node node = children.item(i);
|
||||
|
||||
String name = getName(node);
|
||||
|
||||
try
|
||||
{
|
||||
deploy(node);
|
||||
}
|
||||
catch (Exception e1)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.unableToDeployNode(e1, node);
|
||||
continue;
|
||||
}
|
||||
|
||||
addToConfiguration(url, name, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The key attribute for the element, usually 'name' but can be overridden
|
||||
* @return the key attribute
|
||||
*/
|
||||
public String getKeyAttribute()
|
||||
{
|
||||
return XmlDeployer.NAME_ATTR;
|
||||
}
|
||||
|
||||
// register with the deploymenmt manager
|
||||
public synchronized void start() throws Exception
|
||||
{
|
||||
if (started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
deploymentManager.registerDeployer(this);
|
||||
|
||||
started = true;
|
||||
}
|
||||
|
||||
// undeploy everything
|
||||
public synchronized void stop() throws Exception
|
||||
{
|
||||
if (!started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Collection<Map<String, Node>> urls = configuration.values();
|
||||
for (Map<String, Node> hashMap : urls)
|
||||
{
|
||||
for (Node node : hashMap.values())
|
||||
{
|
||||
try
|
||||
{
|
||||
undeploy(node);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ActiveMQServerLogger.LOGGER.problemUndeployingNode(e, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
deploymentManager.unregisterDeployer(this);
|
||||
|
||||
started = false;
|
||||
}
|
||||
|
||||
public synchronized boolean isStarted()
|
||||
{
|
||||
return started;
|
||||
}
|
||||
|
||||
public String[] getConfigFileNames()
|
||||
{
|
||||
return configFileNames;
|
||||
}
|
||||
|
||||
public void setConfigFileNames(final String[] configFileNames)
|
||||
{
|
||||
this.configFileNames = configFileNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* the names of the elements to deploy
|
||||
* @return the names of the elements todeploy
|
||||
*/
|
||||
public abstract String[] getElementTagName();
|
||||
|
||||
public abstract String[] getDefaultConfigFileNames();
|
||||
|
||||
/**
|
||||
* deploy an element
|
||||
* @param node the element to deploy
|
||||
* @throws Exception
|
||||
*/
|
||||
public abstract void deploy(final Node node) throws Exception;
|
||||
|
||||
/**
|
||||
* Validate the DOM
|
||||
*/
|
||||
public abstract void validate(final Node rootNode) throws Exception;
|
||||
|
||||
/**
|
||||
* undeploys an element
|
||||
* @param node the element to undeploy
|
||||
* @throws Exception
|
||||
*/
|
||||
public abstract void undeploy(final Node node) throws Exception;
|
||||
|
||||
protected Element getRootElement(final URI url) throws Exception
|
||||
{
|
||||
Reader reader = new InputStreamReader(url.toURL().openStream());
|
||||
String xml = org.apache.activemq.utils.XMLUtil.readerToString(reader);
|
||||
xml = org.apache.activemq.utils.XMLUtil.replaceSystemProps(xml);
|
||||
return org.apache.activemq.utils.XMLUtil.stringToElement(xml);
|
||||
}
|
||||
|
||||
private boolean hasNodeChanged(final URI url, final Node child, final String name)
|
||||
{
|
||||
String newTextContent = child.getTextContent();
|
||||
String origTextContent = configuration.get(url).get(name).getTextContent();
|
||||
return !newTextContent.equals(origTextContent);
|
||||
}
|
||||
|
||||
private String getName(Node node) throws ActiveMQException
|
||||
{
|
||||
|
||||
String name;
|
||||
|
||||
if (node.hasAttributes())
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
Node keyNode = node.getAttributes().getNamedItem(
|
||||
getKeyAttribute());
|
||||
|
||||
name = keyNode.getNodeValue();
|
||||
}
|
||||
catch (NullPointerException e)
|
||||
{
|
||||
throw new ActiveMQException("Could not find " + getKeyAttribute() + " in " + XMLUtil.elementToString(node));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
name = node.getLocalName();
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* 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.security;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||
*/
|
||||
public class User
|
||||
{
|
||||
final String user;
|
||||
|
||||
final String password;
|
||||
|
||||
public User(final String user, final String password)
|
||||
{
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o)
|
||||
{
|
||||
if (this == o)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
User user1 = (User)o;
|
||||
|
||||
if (!user.equals(user1.user))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return user.hashCode();
|
||||
}
|
||||
|
||||
public boolean isValid(final String user, final String password)
|
||||
{
|
||||
if (user == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return this.user.equals(user) && this.password.equals(password);
|
||||
}
|
||||
|
||||
public String getUser()
|
||||
{
|
||||
return user;
|
||||
}
|
||||
|
||||
public String getPassword()
|
||||
{
|
||||
return password;
|
||||
}
|
||||
}
|
|
@ -97,9 +97,9 @@ public final class ActiveMQServers
|
|||
public static ActiveMQServer newActiveMQServer(Configuration config,
|
||||
String defUser, String defPass)
|
||||
{
|
||||
ActiveMQSecurityManager securityManager = new ActiveMQSecurityManagerImpl();
|
||||
ActiveMQSecurityManagerImpl securityManager = new ActiveMQSecurityManagerImpl();
|
||||
|
||||
securityManager.addUser(defUser, defPass);
|
||||
securityManager.getConfiguration().addUser(defUser, defPass);
|
||||
|
||||
ActiveMQServer server = ActiveMQServers.newActiveMQServer(config,
|
||||
ManagementFactory.getPlatformMBeanServer(),
|
||||
|
@ -115,9 +115,9 @@ public final class ActiveMQServers
|
|||
String user,
|
||||
String password)
|
||||
{
|
||||
ActiveMQSecurityManager securityManager = new ActiveMQSecurityManagerImpl();
|
||||
ActiveMQSecurityManagerImpl securityManager = new ActiveMQSecurityManagerImpl();
|
||||
|
||||
securityManager.addUser(user, password);
|
||||
securityManager.getConfiguration().addUser(user, password);
|
||||
|
||||
ActiveMQServer server = ActiveMQServers.newActiveMQServer(config, mbeanServer, securityManager, enablePersistence);
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.activemq.core.server.embedded;
|
|||
import javax.management.MBeanServer;
|
||||
|
||||
import org.apache.activemq.core.config.Configuration;
|
||||
import org.apache.activemq.core.config.FileDeploymentManager;
|
||||
import org.apache.activemq.core.config.impl.FileConfiguration;
|
||||
import org.apache.activemq.core.server.ActiveMQServer;
|
||||
import org.apache.activemq.core.server.impl.ActiveMQServerImpl;
|
||||
|
@ -97,8 +98,10 @@ public class EmbeddedActiveMQ
|
|||
if (configuration == null)
|
||||
{
|
||||
if (configResourcePath == null) configResourcePath = "activemq-configuration.xml";
|
||||
FileConfiguration config = new FileConfiguration(configResourcePath);
|
||||
config.start();
|
||||
FileDeploymentManager deploymentManager = new FileDeploymentManager(configResourcePath);
|
||||
FileConfiguration config = new FileConfiguration();
|
||||
deploymentManager.addDeployable(config);
|
||||
deploymentManager.readConfiguration();
|
||||
configuration = config;
|
||||
}
|
||||
if (securityManager == null)
|
||||
|
|
|
@ -52,13 +52,6 @@ import org.apache.activemq.core.config.ConfigurationUtils;
|
|||
import org.apache.activemq.core.config.CoreQueueConfiguration;
|
||||
import org.apache.activemq.core.config.DivertConfiguration;
|
||||
import org.apache.activemq.core.config.impl.ConfigurationImpl;
|
||||
import org.apache.activemq.core.deployers.Deployer;
|
||||
import org.apache.activemq.core.deployers.DeploymentManager;
|
||||
import org.apache.activemq.core.deployers.impl.AddressSettingsDeployer;
|
||||
import org.apache.activemq.core.deployers.impl.BasicUserCredentialsDeployer;
|
||||
import org.apache.activemq.core.deployers.impl.FileDeploymentManager;
|
||||
import org.apache.activemq.core.deployers.impl.QueueDeployer;
|
||||
import org.apache.activemq.core.deployers.impl.SecurityDeployer;
|
||||
import org.apache.activemq.core.filter.Filter;
|
||||
import org.apache.activemq.core.filter.impl.FilterImpl;
|
||||
import org.apache.activemq.core.journal.IOCriticalErrorListener;
|
||||
|
@ -233,13 +226,6 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
|
||||
private MemoryManager memoryManager;
|
||||
|
||||
private volatile DeploymentManager deploymentManager;
|
||||
|
||||
private Deployer basicUserCredentialsDeployer;
|
||||
private Deployer addressSettingsDeployer;
|
||||
private Deployer queueDeployer;
|
||||
private Deployer securityDeployer;
|
||||
|
||||
private final Map<String, ServerSession> sessions = new ConcurrentHashMap<String, ServerSession>();
|
||||
|
||||
/**
|
||||
|
@ -661,16 +647,6 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
//before we stop any components deactivate any callbacks
|
||||
callDeActiveCallbacks();
|
||||
|
||||
// Stop the deployers
|
||||
if (configuration.isFileDeploymentEnabled())
|
||||
{
|
||||
stopComponent(basicUserCredentialsDeployer);
|
||||
stopComponent(addressSettingsDeployer);
|
||||
stopComponent(queueDeployer);
|
||||
stopComponent(securityDeployer);
|
||||
stopComponent(deploymentManager);
|
||||
}
|
||||
|
||||
stopComponent(backupManager);
|
||||
activation.preStorageClose();
|
||||
stopComponent(pagingManager);
|
||||
|
@ -688,7 +664,6 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
managementService.unregisterServer();
|
||||
stopComponent(managementService);
|
||||
|
||||
stopComponent(securityManager);
|
||||
stopComponent(resourceManager);
|
||||
|
||||
stopComponent(postOffice);
|
||||
|
@ -993,11 +968,6 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
return addressSettingsRepository;
|
||||
}
|
||||
|
||||
public DeploymentManager getDeploymentManager()
|
||||
{
|
||||
return deploymentManager;
|
||||
}
|
||||
|
||||
public ResourceManager getResourceManager()
|
||||
{
|
||||
return resourceManager;
|
||||
|
@ -1633,11 +1603,6 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
|
||||
// Create the hard-wired components
|
||||
|
||||
if (configuration.isFileDeploymentEnabled())
|
||||
{
|
||||
deploymentManager = new FileDeploymentManager(configuration.getFileDeployerScanPeriod());
|
||||
}
|
||||
|
||||
callPreActiveCallbacks();
|
||||
|
||||
// startReplication();
|
||||
|
@ -1711,24 +1676,11 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
|
||||
if (!scalingDown)
|
||||
{
|
||||
if (configuration.isFileDeploymentEnabled())
|
||||
{
|
||||
addressSettingsDeployer = new AddressSettingsDeployer(deploymentManager, addressSettingsRepository);
|
||||
|
||||
addressSettingsDeployer.start();
|
||||
}
|
||||
|
||||
deployAddressSettingsFromConfiguration();
|
||||
}
|
||||
|
||||
storageManager.start();
|
||||
|
||||
|
||||
if (securityManager != null)
|
||||
{
|
||||
securityManager.start();
|
||||
}
|
||||
|
||||
postOffice.start();
|
||||
|
||||
pagingManager.start();
|
||||
|
@ -1737,21 +1689,6 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
|
||||
resourceManager.start();
|
||||
|
||||
// Deploy all security related config
|
||||
if (configuration.isFileDeploymentEnabled())
|
||||
{
|
||||
basicUserCredentialsDeployer = new BasicUserCredentialsDeployer(deploymentManager, securityManager);
|
||||
|
||||
basicUserCredentialsDeployer.start();
|
||||
|
||||
if (securityManager != null)
|
||||
{
|
||||
securityDeployer = new SecurityDeployer(deploymentManager, securityRepository);
|
||||
|
||||
securityDeployer.start();
|
||||
}
|
||||
}
|
||||
|
||||
deploySecurityFromConfiguration();
|
||||
|
||||
deployGroupingHandlerConfiguration(configuration.getGroupingHandlerConfiguration());
|
||||
|
@ -1794,16 +1731,7 @@ public class ActiveMQServerImpl implements ActiveMQServer
|
|||
// Deploy the rest of the stuff
|
||||
|
||||
// Deploy any predefined queues
|
||||
if (configuration.isFileDeploymentEnabled())
|
||||
{
|
||||
queueDeployer = new QueueDeployer(deploymentManager, this);
|
||||
|
||||
queueDeployer.start();
|
||||
}
|
||||
else
|
||||
{
|
||||
deployQueuesFromConfiguration();
|
||||
}
|
||||
deployQueuesFromConfiguration();
|
||||
|
||||
|
||||
// We need to call this here, this gives any dependent server a chance to deploy its own addresses
|
||||
|
|
|
@ -20,14 +20,13 @@ import java.util.Set;
|
|||
|
||||
import org.apache.activemq.core.security.CheckType;
|
||||
import org.apache.activemq.core.security.Role;
|
||||
import org.apache.activemq.core.server.ActiveMQComponent;
|
||||
|
||||
/**
|
||||
* Use to validate whether a user has is valid to connect to the server and perform certain
|
||||
* functions
|
||||
* @author <a href="ataylor@redhat.com">Andy Taylor</a>
|
||||
*/
|
||||
public interface ActiveMQSecurityManager extends ActiveMQComponent
|
||||
public interface ActiveMQSecurityManager
|
||||
{
|
||||
/**
|
||||
* is this a valid user.
|
||||
|
@ -47,36 +46,4 @@ public interface ActiveMQSecurityManager extends ActiveMQComponent
|
|||
* @return true if the user is valid and they have the correct roles
|
||||
*/
|
||||
boolean validateUserAndRole(String user, String password, Set<Role> roles, CheckType checkType);
|
||||
|
||||
/**
|
||||
* adds a new user
|
||||
* @param user the user to add
|
||||
* @param password theusers password
|
||||
*/
|
||||
void addUser(String user, String password);
|
||||
|
||||
/**
|
||||
* removes a user and any roles they may have.
|
||||
* @param user the user to remove
|
||||
*/
|
||||
void removeUser(String user);
|
||||
|
||||
/**
|
||||
* adds a new role for a user.
|
||||
* @param user the user
|
||||
* @param role the role to add
|
||||
*/
|
||||
void addRole(String user, String role);
|
||||
|
||||
/**
|
||||
* removes a role from a user
|
||||
* @param user the user
|
||||
* @param role the role to remove
|
||||
*/
|
||||
void removeRole(String user, String role);
|
||||
|
||||
/*
|
||||
* set the default user for null users
|
||||
*/
|
||||
void setDefaultUser(String username);
|
||||
}
|
||||
|
|
|
@ -16,15 +16,13 @@
|
|||
*/
|
||||
package org.apache.activemq.spi.core.security;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.activemq.core.config.impl.SecurityConfiguration;
|
||||
import org.apache.activemq.core.security.CheckType;
|
||||
import org.apache.activemq.core.security.Role;
|
||||
import org.apache.activemq.core.server.ActiveMQMessageBundle;
|
||||
import org.apache.activemq.core.security.User;
|
||||
|
||||
/**
|
||||
* A basic implementation of the ActiveMQSecurityManager. This can be used within an appserver and be deployed by
|
||||
|
@ -34,53 +32,29 @@ import org.apache.activemq.core.server.ActiveMQMessageBundle;
|
|||
*/
|
||||
public class ActiveMQSecurityManagerImpl implements ActiveMQSecurityManager
|
||||
{
|
||||
private final SecurityConfiguration configuration;
|
||||
|
||||
// Static --------------------------------------------------------
|
||||
|
||||
// Attributes ----------------------------------------------------
|
||||
|
||||
/**
|
||||
* the current valid users
|
||||
*/
|
||||
private final Map<String, User> users = new HashMap<String, User>();
|
||||
|
||||
private String defaultUser = null;
|
||||
|
||||
/**
|
||||
* the roles for the users
|
||||
*/
|
||||
private final Map<String, List<String>> roles = new HashMap<String, List<String>>();
|
||||
|
||||
// ActiveMQComponent implementation ------------------------------------------
|
||||
|
||||
public void start()
|
||||
public ActiveMQSecurityManagerImpl()
|
||||
{
|
||||
configuration = new SecurityConfiguration();
|
||||
}
|
||||
|
||||
public void stop()
|
||||
public ActiveMQSecurityManagerImpl(SecurityConfiguration configuration)
|
||||
{
|
||||
users.clear();
|
||||
|
||||
roles.clear();
|
||||
|
||||
defaultUser = null;
|
||||
}
|
||||
|
||||
public boolean isStarted()
|
||||
{
|
||||
return true;
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
// Public ---------------------------------------------------------------------
|
||||
|
||||
public boolean validateUser(final String user, final String password)
|
||||
{
|
||||
if (user == null && defaultUser == null)
|
||||
if (user == null && configuration.getDefaultUser() == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
User theUser = users.get(user == null ? defaultUser : user);
|
||||
String defaultUser = configuration.getDefaultUser();
|
||||
User theUser = configuration.getUser(user == null ? defaultUser : user);
|
||||
|
||||
boolean ok = theUser != null && theUser.isValid(user == null ? defaultUser : user, password == null ? defaultUser
|
||||
: password);
|
||||
|
@ -94,7 +68,8 @@ public class ActiveMQSecurityManagerImpl implements ActiveMQSecurityManager
|
|||
{
|
||||
if (validateUser(user, password))
|
||||
{
|
||||
List<String> availableRoles = this.roles.get(user == null ? defaultUser : user);
|
||||
String defaultUser = configuration.getDefaultUser();
|
||||
List<String> availableRoles = configuration.getRole(user == null ? defaultUser : user);
|
||||
|
||||
if (availableRoles == null)
|
||||
{
|
||||
|
@ -119,98 +94,8 @@ public class ActiveMQSecurityManagerImpl implements ActiveMQSecurityManager
|
|||
return false;
|
||||
}
|
||||
|
||||
public void addUser(final String user, final String password)
|
||||
public SecurityConfiguration getConfiguration()
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
static class User
|
||||
{
|
||||
final String user;
|
||||
|
||||
final String password;
|
||||
|
||||
User(final String user, final String password)
|
||||
{
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o)
|
||||
{
|
||||
if (this == o)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
User user1 = (User)o;
|
||||
|
||||
if (!user.equals(user1.user))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return user.hashCode();
|
||||
}
|
||||
|
||||
public boolean isValid(final String user, final String password)
|
||||
{
|
||||
if (user == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return this.user.equals(user) && this.password.equals(password);
|
||||
}
|
||||
return configuration;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ import javax.security.auth.login.LoginException;
|
|||
|
||||
import org.apache.activemq.core.security.CheckType;
|
||||
import org.apache.activemq.core.security.Role;
|
||||
import org.apache.activemq.core.server.ActiveMQComponent;
|
||||
import org.apache.activemq.core.server.ActiveMQServerLogger;
|
||||
|
||||
/**
|
||||
|
@ -43,7 +42,7 @@ import org.apache.activemq.core.server.ActiveMQServerLogger;
|
|||
* @author <a href="tim.fox@jboss.com">Tim Fox</a>
|
||||
* @author <a href="jmesnil@redhat.com">Jeff Mesnil</a>
|
||||
*/
|
||||
public class JAASSecurityManager implements ActiveMQSecurityManager, ActiveMQComponent
|
||||
public class JAASSecurityManager implements ActiveMQSecurityManager
|
||||
{
|
||||
// Static --------------------------------------------------------
|
||||
|
||||
|
@ -53,8 +52,6 @@ public class JAASSecurityManager implements ActiveMQSecurityManager, ActiveMQCom
|
|||
|
||||
private String configurationName;
|
||||
|
||||
private boolean started;
|
||||
|
||||
private CallbackHandler callbackHandler;
|
||||
|
||||
private Configuration config;
|
||||
|
@ -122,62 +119,6 @@ public class JAASSecurityManager implements ActiveMQSecurityManager, ActiveMQCom
|
|||
return authenticated;
|
||||
}
|
||||
|
||||
public void addRole(final String user, final String role)
|
||||
{
|
||||
// NO-OP
|
||||
}
|
||||
|
||||
public void addUser(final String user, final String password)
|
||||
{
|
||||
// NO-OP
|
||||
}
|
||||
|
||||
public void removeRole(final String user, final String role)
|
||||
{
|
||||
// NO-OP
|
||||
}
|
||||
|
||||
public void removeUser(final String user)
|
||||
{
|
||||
// NO-OP
|
||||
}
|
||||
|
||||
public void setDefaultUser(final String username)
|
||||
{
|
||||
// NO-OP
|
||||
}
|
||||
|
||||
// ActiveMQComponent implementation -----------------------------
|
||||
|
||||
/**
|
||||
* lifecycle method, needs to be called
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public synchronized void start() throws Exception
|
||||
{
|
||||
if (started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
started = true;
|
||||
}
|
||||
|
||||
public synchronized void stop()
|
||||
{
|
||||
if (!started)
|
||||
{
|
||||
return;
|
||||
}
|
||||
started = false;
|
||||
}
|
||||
|
||||
public synchronized boolean isStarted()
|
||||
{
|
||||
return started;
|
||||
}
|
||||
|
||||
private Subject getAuthenticatedSubject(final String user, final String password) throws LoginException
|
||||
{
|
||||
SimplePrincipal principal = user == null ? null : new SimplePrincipal(user);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<xsd:schema xmlns="urn:activemq"
|
||||
targetNamespace="urn:activemq"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.0">
|
||||
<xsd:element name="configuration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Root element for a document specifying the configuration
|
||||
of a single "standalone" server that does not operate
|
||||
as part of a domain.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:choice minOccurs="1" maxOccurs="unbounded">
|
||||
<xsd:any namespace="##other">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>A profile declaration may include configuration
|
||||
elements from other namespaces for the subsystems that make up the profile.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:any>
|
||||
</xsd:choice>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
|
@ -1,45 +0,0 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:activemq" xmlns="urn:activemq"
|
||||
elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
|
||||
|
||||
<xsd:element name="configuration">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="mask-password" type="xsd:boolean" maxOccurs="1" minOccurs="0"></xsd:element>
|
||||
<xsd:element name="password-codec" type="xsd:string" maxOccurs="1" minOccurs="0"></xsd:element>
|
||||
<xsd:element name="defaultuser" type="userType" maxOccurs="1" minOccurs="0"></xsd:element>
|
||||
<xsd:element name="user" type="userType" maxOccurs="unbounded" minOccurs="0"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="role">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:complexType name="userType">
|
||||
<xsd:sequence>
|
||||
<xsd:element ref="role" maxOccurs="unbounded" minOccurs="1"></xsd:element>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:ID" use="required"></xsd:attribute>
|
||||
<xsd:attribute name="password" type="xsd:string"></xsd:attribute>
|
||||
</xsd:complexType>
|
||||
</xsd:schema>
|
|
@ -79,7 +79,6 @@ public class ConfigurationImplTest extends UnitTestCase
|
|||
Assert.assertEquals(ActiveMQDefaultConfiguration.getDefaultClusterUser(), conf.getClusterUser()); // OK
|
||||
Assert.assertEquals(ActiveMQDefaultConfiguration.getDefaultClusterPassword(), conf.getClusterPassword()); // OK
|
||||
Assert.assertEquals(ActiveMQDefaultConfiguration.isDefaultPersistenceEnabled(), conf.isPersistenceEnabled());
|
||||
Assert.assertEquals(ActiveMQDefaultConfiguration.isDefaultFileDeploymentEnabled(), conf.isFileDeploymentEnabled());
|
||||
Assert.assertEquals(ActiveMQDefaultConfiguration.isDefaultPersistDeliveryCountBeforeDelivery(),
|
||||
conf.isPersistDeliveryCountBeforeDelivery());
|
||||
Assert.assertEquals(ActiveMQDefaultConfiguration.getDefaultFileDeployerScanPeriod(), conf.getFileDeployerScanPeriod());
|
||||
|
@ -190,10 +189,6 @@ public class ConfigurationImplTest extends UnitTestCase
|
|||
conf.setEnabledAsyncConnectionExecution(b);
|
||||
Assert.assertEquals(b, conf.isAsyncConnectionExecutionEnabled());
|
||||
|
||||
b = RandomUtil.randomBoolean();
|
||||
conf.setFileDeploymentEnabled(b);
|
||||
Assert.assertEquals(b, conf.isFileDeploymentEnabled());
|
||||
|
||||
b = RandomUtil.randomBoolean();
|
||||
conf.setPersistenceEnabled(b);
|
||||
Assert.assertEquals(b, conf.isPersistenceEnabled());
|
||||
|
@ -402,10 +397,6 @@ public class ConfigurationImplTest extends UnitTestCase
|
|||
conf.setEnabledAsyncConnectionExecution(b);
|
||||
Assert.assertEquals(b, conf.isAsyncConnectionExecutionEnabled());
|
||||
|
||||
b = RandomUtil.randomBoolean();
|
||||
conf.setFileDeploymentEnabled(b);
|
||||
Assert.assertEquals(b, conf.isFileDeploymentEnabled());
|
||||
|
||||
b = RandomUtil.randomBoolean();
|
||||
conf.setPersistenceEnabled(b);
|
||||
Assert.assertEquals(b, conf.isPersistenceEnabled());
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.apache.activemq.core.config.impl;
|
||||
|
||||
import org.apache.activemq.api.config.ActiveMQDefaultConfiguration;
|
||||
import org.apache.activemq.core.config.FileDeploymentManager;
|
||||
import org.apache.activemq.core.config.ha.LiveOnlyPolicyConfiguration;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -150,9 +151,10 @@ public class DefaultsFileConfigurationTest extends ConfigurationImplTest
|
|||
@Override
|
||||
protected Configuration createConfiguration() throws Exception
|
||||
{
|
||||
FileConfiguration fc = new FileConfiguration("ConfigurationTest-defaults.xml");
|
||||
|
||||
fc.start();
|
||||
FileConfiguration fc = new FileConfiguration();
|
||||
FileDeploymentManager deploymentManager = new FileDeploymentManager("ConfigurationTest-defaults.xml");
|
||||
deploymentManager.addDeployable(fc);
|
||||
deploymentManager.readConfiguration();
|
||||
|
||||
return fc;
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Map;
|
|||
|
||||
import org.apache.activemq.api.config.ActiveMQDefaultConfiguration;
|
||||
import org.apache.activemq.core.config.Configuration;
|
||||
import org.apache.activemq.core.config.FileDeploymentManager;
|
||||
import org.apache.activemq.core.deployers.impl.FileConfigurationParser;
|
||||
import org.apache.activemq.tests.util.UnitTestCase;
|
||||
import org.apache.activemq.utils.DefaultSensitiveStringCodec;
|
||||
|
@ -51,11 +52,13 @@ public class FileConfigurationParserTest extends UnitTestCase
|
|||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
String filename = "InvalidConfigurationTest" + i + ".xml";
|
||||
FileConfiguration fc = new FileConfiguration(filename);
|
||||
FileConfiguration fc = new FileConfiguration();
|
||||
FileDeploymentManager deploymentManager = new FileDeploymentManager(filename);
|
||||
deploymentManager.addDeployable(fc);
|
||||
|
||||
try
|
||||
{
|
||||
fc.start();
|
||||
deploymentManager.readConfiguration();
|
||||
fail("parsing should have failed for " + filename);
|
||||
}
|
||||
catch (java.lang.IllegalStateException e)
|
||||
|
@ -70,8 +73,10 @@ public class FileConfigurationParserTest extends UnitTestCase
|
|||
public void testDivertRoutingNameIsNotRequired() throws Exception
|
||||
{
|
||||
String filename = "divertRoutingNameNotRequired.xml";
|
||||
FileConfiguration fc = new FileConfiguration(filename);
|
||||
fc.start();
|
||||
FileConfiguration fc = new FileConfiguration();
|
||||
FileDeploymentManager deploymentManager = new FileDeploymentManager(filename);
|
||||
deploymentManager.addDeployable(fc);
|
||||
deploymentManager.readConfiguration();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -131,9 +136,7 @@ public class FileConfigurationParserTest extends UnitTestCase
|
|||
}
|
||||
|
||||
private static String firstPart =
|
||||
"<configuration xmlns=\"urn:activemq\"\n" +
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
|
||||
"xsi:schemaLocation=\"urn:activemq /schema/activemq-configuration.xsd\">\n" +
|
||||
"<core xmlns=\"urn:activemq:core\">" + "\n" +
|
||||
"<name>ActiveMQ.main.config</name>" + "\n" +
|
||||
"<backup-group-name>abackupgroupname</backup-group-name>" + "\n" +
|
||||
"<scale-down-group-name>ascaledowngroupname</scale-down-group-name>" + "\n" +
|
||||
|
@ -197,8 +200,8 @@ public class FileConfigurationParserTest extends UnitTestCase
|
|||
+ "<message-counter-history-day-limit>10</message-counter-history-day-limit>" + "\n"
|
||||
+ "<address-full-policy>BLOCK</address-full-policy>" + "\n" +
|
||||
"</address-setting>" + "\n" +
|
||||
"</address-settings>";
|
||||
"</address-settings>" + "\n";
|
||||
|
||||
|
||||
private static String lastPart = "</configuration>";
|
||||
private static String lastPart = "</core>";
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.apache.activemq.core.config.BridgeConfiguration;
|
|||
import org.apache.activemq.core.config.ClusterConnectionConfiguration;
|
||||
import org.apache.activemq.core.config.Configuration;
|
||||
import org.apache.activemq.core.config.DivertConfiguration;
|
||||
import org.apache.activemq.core.config.FileDeploymentManager;
|
||||
import org.apache.activemq.core.config.HAPolicyConfiguration;
|
||||
import org.apache.activemq.core.config.ha.LiveOnlyPolicyConfiguration;
|
||||
import org.apache.activemq.core.security.Role;
|
||||
|
@ -48,9 +49,7 @@ public class FileConfigurationTest extends ConfigurationImplTest
|
|||
// Check they match the values from the test file
|
||||
Assert.assertEquals("SomeNameForUseOnTheApplicationServer", conf.getName());
|
||||
Assert.assertEquals(false, conf.isPersistenceEnabled());
|
||||
Assert.assertEquals(true, conf.isFileDeploymentEnabled());
|
||||
Assert.assertEquals(true, conf.isClustered());
|
||||
Assert.assertEquals(true, conf.isFileDeploymentEnabled());
|
||||
Assert.assertEquals(12345, conf.getScheduledThreadPoolMaxSize());
|
||||
Assert.assertEquals(54321, conf.getThreadPoolMaxSize());
|
||||
Assert.assertEquals(false, conf.isSecurityEnabled());
|
||||
|
@ -355,26 +354,13 @@ public class FileConfigurationTest extends ConfigurationImplTest
|
|||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetGetConfigurationURL()
|
||||
{
|
||||
final String file = "ghuuhhu";
|
||||
|
||||
FileConfiguration fc = new FileConfiguration();
|
||||
|
||||
fc.setConfigurationUrl(file);
|
||||
|
||||
Assert.assertEquals(file, fc.getConfigurationUrl());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Configuration createConfiguration() throws Exception
|
||||
{
|
||||
FileConfiguration fc = new FileConfiguration("ConfigurationTest-full-config.xml");
|
||||
|
||||
fc.start();
|
||||
|
||||
FileConfiguration fc = new FileConfiguration();
|
||||
FileDeploymentManager deploymentManager = new FileDeploymentManager("ConfigurationTest-full-config.xml");
|
||||
deploymentManager.addDeployable(fc);
|
||||
deploymentManager.readConfiguration();
|
||||
return fc;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
package org.apache.activemq.core.config.impl;
|
||||
|
||||
import org.apache.activemq.core.config.FileDeploymentManager;
|
||||
import org.apache.activemq.core.server.cluster.ha.ColocatedPolicy;
|
||||
import org.apache.activemq.core.server.cluster.ha.HAPolicy;
|
||||
import org.apache.activemq.core.server.cluster.ha.LiveOnlyPolicy;
|
||||
|
@ -423,9 +424,11 @@ public class HAPolicyConfigurationTest extends UnitTestCase
|
|||
|
||||
protected Configuration createConfiguration(String fileName) throws Exception
|
||||
{
|
||||
FileConfiguration fc = new FileConfiguration(fileName);
|
||||
FileConfiguration fc = new FileConfiguration();
|
||||
FileDeploymentManager deploymentManager = new FileDeploymentManager(fileName);
|
||||
deploymentManager.addDeployable(fc);
|
||||
|
||||
fc.start();
|
||||
deploymentManager.readConfiguration();
|
||||
|
||||
// we need this otherwise the data folder will be located under activemq-server and not on the temporary directory
|
||||
fc.setPagingDirectory(getTestDir() + "/" + fc.getPagingDirectory());
|
||||
|
|
|
@ -335,7 +335,6 @@ public abstract class UnitTestCase extends CoreUnitTestCase
|
|||
protected Configuration createDefaultConfig(final Map<String, Object> params, final String... acceptors) throws Exception
|
||||
{
|
||||
ConfigurationImpl configuration = createBasicConfig(-1)
|
||||
.setFileDeploymentEnabled(false)
|
||||
.setJMXManagementEnabled(false)
|
||||
.clearAcceptorConfigurations();
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../src/schemas/activemq-configuration.xsd ">
|
||||
xsi:schemaLocation="urn:activemq ../../src/schemas/activemq-server.xsd ">
|
||||
<!-- just use the defaults -->
|
||||
<core xmlns="urn:activemq:core"/>
|
||||
</configuration>
|
||||
|
|
|
@ -17,12 +17,12 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<name>SomeNameForUseOnTheApplicationServer</name>
|
||||
<resolve-protocols>false</resolve-protocols>
|
||||
<clustered>true</clustered>
|
||||
<check-for-live-server>false</check-for-live-server>
|
||||
<file-deployment-enabled>true</file-deployment-enabled>
|
||||
<persistence-enabled>false</persistence-enabled>
|
||||
<scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
|
||||
<thread-pool-max-size>54321</thread-pool-max-size>
|
||||
|
@ -250,48 +250,49 @@
|
|||
<memory-warning-threshold>95</memory-warning-threshold>
|
||||
<memory-measure-interval>54321</memory-measure-interval>
|
||||
<large-messages-directory>largemessagesdir</large-messages-directory>
|
||||
<security-settings>
|
||||
<security-setting match="a1">
|
||||
<permission type="createNonDurableQueue" roles="a1.1"/>
|
||||
</security-setting>
|
||||
<security-setting match="a2">
|
||||
<permission type="deleteNonDurableQueue" roles="a2.1"/>
|
||||
</security-setting>
|
||||
</security-settings>
|
||||
<security-settings>
|
||||
<security-setting match="a1">
|
||||
<permission type="createNonDurableQueue" roles="a1.1"/>
|
||||
</security-setting>
|
||||
<security-setting match="a2">
|
||||
<permission type="deleteNonDurableQueue" roles="a2.1"/>
|
||||
</security-setting>
|
||||
</security-settings>
|
||||
|
||||
<address-settings>
|
||||
<address-setting match="a1">
|
||||
<dead-letter-address>a1.1</dead-letter-address>
|
||||
<expiry-address>a1.2</expiry-address>
|
||||
<redelivery-delay>1</redelivery-delay>
|
||||
<max-size-bytes>81781728121878</max-size-bytes>
|
||||
<page-size-bytes>81738173872337</page-size-bytes>
|
||||
<page-max-cache-size>10</page-max-cache-size>
|
||||
<message-counter-history-day-limit>4</message-counter-history-day-limit>
|
||||
<slow-consumer-threshold>10</slow-consumer-threshold>
|
||||
<slow-consumer-check-period>5</slow-consumer-check-period>
|
||||
<slow-consumer-policy>NOTIFY</slow-consumer-policy>
|
||||
<auto-create-jms-queues>true</auto-create-jms-queues>
|
||||
<auto-delete-jms-queues>true</auto-delete-jms-queues>
|
||||
</address-setting>
|
||||
<address-setting match="a2">
|
||||
<dead-letter-address>a2.1</dead-letter-address>
|
||||
<expiry-address>a2.2</expiry-address>
|
||||
<redelivery-delay>5</redelivery-delay>
|
||||
<max-size-bytes>932489234928324</max-size-bytes>
|
||||
<page-size-bytes>7126716262626</page-size-bytes>
|
||||
<page-max-cache-size>20</page-max-cache-size>
|
||||
<message-counter-history-day-limit>8</message-counter-history-day-limit>
|
||||
<slow-consumer-threshold>20</slow-consumer-threshold>
|
||||
<slow-consumer-check-period>15</slow-consumer-check-period>
|
||||
<slow-consumer-policy>KILL</slow-consumer-policy>
|
||||
<auto-create-jms-queues>false</auto-create-jms-queues>
|
||||
<auto-delete-jms-queues>false</auto-delete-jms-queues>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
<connector-services>
|
||||
<connector-service>
|
||||
<factory-class>org.foo</factory-class>
|
||||
</connector-service>
|
||||
</connector-services>
|
||||
<address-settings>
|
||||
<address-setting match="a1">
|
||||
<dead-letter-address>a1.1</dead-letter-address>
|
||||
<expiry-address>a1.2</expiry-address>
|
||||
<redelivery-delay>1</redelivery-delay>
|
||||
<max-size-bytes>81781728121878</max-size-bytes>
|
||||
<page-size-bytes>81738173872337</page-size-bytes>
|
||||
<page-max-cache-size>10</page-max-cache-size>
|
||||
<message-counter-history-day-limit>4</message-counter-history-day-limit>
|
||||
<slow-consumer-threshold>10</slow-consumer-threshold>
|
||||
<slow-consumer-check-period>5</slow-consumer-check-period>
|
||||
<slow-consumer-policy>NOTIFY</slow-consumer-policy>
|
||||
<auto-create-jms-queues>true</auto-create-jms-queues>
|
||||
<auto-delete-jms-queues>true</auto-delete-jms-queues>
|
||||
</address-setting>
|
||||
<address-setting match="a2">
|
||||
<dead-letter-address>a2.1</dead-letter-address>
|
||||
<expiry-address>a2.2</expiry-address>
|
||||
<redelivery-delay>5</redelivery-delay>
|
||||
<max-size-bytes>932489234928324</max-size-bytes>
|
||||
<page-size-bytes>7126716262626</page-size-bytes>
|
||||
<page-max-cache-size>20</page-max-cache-size>
|
||||
<message-counter-history-day-limit>8</message-counter-history-day-limit>
|
||||
<slow-consumer-threshold>20</slow-consumer-threshold>
|
||||
<slow-consumer-check-period>15</slow-consumer-check-period>
|
||||
<slow-consumer-policy>KILL</slow-consumer-policy>
|
||||
<auto-create-jms-queues>false</auto-create-jms-queues>
|
||||
<auto-delete-jms-queues>false</auto-delete-jms-queues>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
<connector-services>
|
||||
<connector-service>
|
||||
<factory-class>org.foo</factory-class>
|
||||
</connector-service>
|
||||
</connector-services>
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<name>SomeNameForUseOnTheApplicationServer</name>
|
||||
<scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
|
||||
<thread-pool-max-size>54321</thread-pool-max-size>
|
||||
|
@ -247,5 +248,5 @@
|
|||
<message-counter-history-day-limit>AA</message-counter-history-day-limit>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<name>SomeNameForUseOnTheApplicationServer</name>
|
||||
<scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
|
||||
<thread-pool-max-size>54321</thread-pool-max-size>
|
||||
|
@ -247,5 +248,5 @@
|
|||
<message-counter-history-day-limit>8</message-counter-history-day-limit>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<name>SomeNameForUseOnTheApplicationServer</name>
|
||||
<scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
|
||||
<thread-pool-max-size>54321</thread-pool-max-size>
|
||||
|
@ -247,5 +248,6 @@
|
|||
<message-counter-history-day-limit>8</message-counter-history-day-limit>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<name>SomeNameForUseOnTheApplicationServer</name>
|
||||
<scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
|
||||
<thread-pool-max-size>54321</thread-pool-max-size>
|
||||
|
@ -248,5 +249,5 @@
|
|||
<message-counter-history-day-limit>8</message-counter-history-day-limit>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<name>SomeNameForUseOnTheApplicationServer</name>
|
||||
<scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
|
||||
<thread-pool-max-size>54321</thread-pool-max-size>
|
||||
|
@ -246,5 +247,5 @@
|
|||
<message-counter-history-day-limit>8</message-counter-history-day-limit>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq ../../src/config/common/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<name>SomeNameForUseOnTheApplicationServer</name>
|
||||
<scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
|
||||
<thread-pool-max-size>54321</thread-pool-max-size>
|
||||
|
@ -249,5 +250,5 @@
|
|||
<message-counter-history-day-limit>8</message-counter-history-day-limit>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,34 +17,35 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<colocated>
|
||||
<backup-request-retries>44</backup-request-retries>
|
||||
<backup-request-retry-interval>33</backup-request-retry-interval>
|
||||
<max-backups>3</max-backups>
|
||||
<request-backup>false</request-backup>
|
||||
<backup-port-offset>33</backup-port-offset>
|
||||
<master>
|
||||
<group-name>purple</group-name>
|
||||
<check-for-live-server>true</check-for-live-server>
|
||||
<cluster-name>abcdefg</cluster-name>
|
||||
</master>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</colocated>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<colocated>
|
||||
<backup-request-retries>44</backup-request-retries>
|
||||
<backup-request-retry-interval>33</backup-request-retry-interval>
|
||||
<max-backups>3</max-backups>
|
||||
<request-backup>false</request-backup>
|
||||
<backup-port-offset>33</backup-port-offset>
|
||||
<master>
|
||||
<group-name>purple</group-name>
|
||||
<check-for-live-server>true</check-for-live-server>
|
||||
<cluster-name>abcdefg</cluster-name>
|
||||
</master>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</colocated>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,28 +17,30 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<colocated>
|
||||
<backup-request-retries>44</backup-request-retries>
|
||||
<backup-request-retry-interval>33</backup-request-retry-interval>
|
||||
<max-backups>3</max-backups>
|
||||
<request-backup>false</request-backup>
|
||||
<backup-port-offset>33</backup-port-offset>
|
||||
<master>
|
||||
<failback-delay>1234</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
</master>
|
||||
<slave>
|
||||
<failback-delay>44</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down/>
|
||||
</slave>
|
||||
</colocated>
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<colocated>
|
||||
<backup-request-retries>44</backup-request-retries>
|
||||
<backup-request-retry-interval>33</backup-request-retry-interval>
|
||||
<max-backups>3</max-backups>
|
||||
<request-backup>false</request-backup>
|
||||
<backup-port-offset>33</backup-port-offset>
|
||||
<master>
|
||||
<failback-delay>1234</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
</master>
|
||||
<slave>
|
||||
<failback-delay>44</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down/>
|
||||
</slave>
|
||||
</colocated>
|
||||
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
</core>c
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,16 +17,18 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<live-only>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</live-only>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<live-only>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</live-only>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,22 +17,23 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<!--only one of the following-->
|
||||
<!--on server shutdown scale down to another live server-->
|
||||
<live-only>
|
||||
<scale-down>
|
||||
<enabled>false</enabled>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--or some connectors-->
|
||||
<connectors>
|
||||
<connector-ref>sd-connector1</connector-ref>
|
||||
<connector-ref>sd-connector2</connector-ref>
|
||||
</connectors>
|
||||
</scale-down>
|
||||
</live-only>
|
||||
</ha-policy>
|
||||
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<!--only one of the following-->
|
||||
<!--on server shutdown scale down to another live server-->
|
||||
<live-only>
|
||||
<scale-down>
|
||||
<enabled>false</enabled>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--or some connectors-->
|
||||
<connectors>
|
||||
<connector-ref>sd-connector1</connector-ref>
|
||||
<connector-ref>sd-connector2</connector-ref>
|
||||
</connectors>
|
||||
</scale-down>
|
||||
</live-only>
|
||||
</ha-policy>
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,11 +17,12 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<!--only one of the following-->
|
||||
<!--on server shutdown scale down to another live server-->
|
||||
<live-only/>
|
||||
</ha-policy>
|
||||
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<!--only one of the following-->
|
||||
<!--on server shutdown scale down to another live server-->
|
||||
<live-only/>
|
||||
</ha-policy>
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -17,7 +17,9 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy/>
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy/>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
|
||||
<core xmlns="urn:activemq:core"/>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,24 +17,27 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
<allow-failback>true</allow-failback>
|
||||
<failback-delay>9876</failback-delay>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
<allow-failback>true</allow-failback>
|
||||
<failback-delay>9876</failback-delay>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,25 +17,28 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--or some connectors-->
|
||||
<connectors>
|
||||
<connector-ref>sd-connector1</connector-ref>
|
||||
<connector-ref>sd-connector2</connector-ref>
|
||||
</connectors>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--or some connectors-->
|
||||
<connectors>
|
||||
<connector-ref>sd-connector1</connector-ref>
|
||||
<connector-ref>sd-connector2</connector-ref>
|
||||
</connectors>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,16 +17,19 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
</slave>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<slave>
|
||||
<group-name>tiddles</group-name>
|
||||
<max-saved-replicated-journals-size>22</max-saved-replicated-journals-size>
|
||||
<cluster-name>33rrrrr</cluster-name>
|
||||
<restart-backup>false</restart-backup>
|
||||
</slave>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,15 +17,18 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<master>
|
||||
<group-name>purple</group-name>
|
||||
<check-for-live-server>true</check-for-live-server>
|
||||
<cluster-name>abcdefg</cluster-name>
|
||||
</master>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-server.xsd">
|
||||
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<replication>
|
||||
<master>
|
||||
<group-name>purple</group-name>
|
||||
<check-for-live-server>true</check-for-live-server>
|
||||
<cluster-name>abcdefg</cluster-name>
|
||||
</master>
|
||||
</replication>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,14 +17,16 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<master>
|
||||
<failback-delay>3456</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
</master>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<master>
|
||||
<failback-delay>3456</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
</master>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,22 +17,24 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<slave>
|
||||
<allow-failback>true</allow-failback>
|
||||
<failback-delay>9876</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<slave>
|
||||
<allow-failback>true</allow-failback>
|
||||
<failback-delay>9876</failback-delay>
|
||||
<failover-on-shutdown>false</failover-on-shutdown>
|
||||
<restart-backup>false</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--either a discovery group-->
|
||||
<discovery-group>wahey</discovery-group>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,24 +17,26 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<slave>
|
||||
<failback-delay>5678</failback-delay>
|
||||
<failover-on-shutdown>true</failover-on-shutdown>
|
||||
<restart-backup>true</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--or some connectors-->
|
||||
<connectors>
|
||||
<connector-ref>sd-connector1</connector-ref>
|
||||
<connector-ref>sd-connector2</connector-ref>
|
||||
</connectors>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<slave>
|
||||
<failback-delay>5678</failback-delay>
|
||||
<failover-on-shutdown>true</failover-on-shutdown>
|
||||
<restart-backup>true</restart-backup>
|
||||
<scale-down>
|
||||
<!--a grouping of servers that can be scaled down to-->
|
||||
<group-name>boo!</group-name>
|
||||
<!--or some connectors-->
|
||||
<connectors>
|
||||
<connector-ref>sd-connector1</connector-ref>
|
||||
<connector-ref>sd-connector2</connector-ref>
|
||||
</connectors>
|
||||
</scale-down>
|
||||
</slave>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -17,15 +17,17 @@
|
|||
<configuration
|
||||
xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-configuration.xsd">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<slave>
|
||||
<failback-delay>5678</failback-delay>
|
||||
<failover-on-shutdown>true</failover-on-shutdown>
|
||||
<restart-backup>true</restart-backup>
|
||||
</slave>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
xsi:schemaLocation="urn:activemq ../../../../activemq-server/src/main/resources/schema/activemq-server.xsd">
|
||||
<core xmlns="urn:activemq:core">
|
||||
<ha-policy>
|
||||
<shared-store>
|
||||
<slave>
|
||||
<failback-delay>5678</failback-delay>
|
||||
<failover-on-shutdown>true</failover-on-shutdown>
|
||||
<restart-backup>true</restart-backup>
|
||||
</slave>
|
||||
</shared-store>
|
||||
</ha-policy>
|
||||
</core>
|
||||
|
||||
</configuration>
|
||||
|
|
|
@ -215,106 +215,6 @@
|
|||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>xml-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>validate</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<validationSets>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/clustered</dir>
|
||||
<systemId>${schemaLocation}/activemq-configuration.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-configuration.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/non-clustered</dir>
|
||||
<systemId>${schemaLocation}/activemq-configuration.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-configuration.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/replicated</dir>
|
||||
<systemId>${schemaLocation}/activemq-configuration.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-configuration.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/shared-store</dir>
|
||||
<systemId>${schemaLocation}/activemq-configuration.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-configuration.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/clustered</dir>
|
||||
<systemId>${schemaLocation}/activemq-jms.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-jms.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/non-clustered</dir>
|
||||
<systemId>${schemaLocation}/activemq-jms.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-jms.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/replicated</dir>
|
||||
<systemId>${schemaLocation}/activemq-jms.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-jms.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/shared-store</dir>
|
||||
<systemId>${schemaLocation}/activemq-jms.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-jms.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/clustered</dir>
|
||||
<systemId>${schemaLocation}/activemq-users.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-users.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/non-clustered</dir>
|
||||
<systemId>${schemaLocation}/activemq-users.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-users.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/replicated</dir>
|
||||
<systemId>${schemaLocation}/activemq-users.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-users.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
<validationSet>
|
||||
<dir>${configLocation}/shared-store</dir>
|
||||
<systemId>${schemaLocation}/activemq-users.xsd</systemId>
|
||||
<includes>
|
||||
<include>activemq-users.xml</include>
|
||||
</includes>
|
||||
</validationSet>
|
||||
</validationSets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
|
|
@ -21,94 +21,96 @@ under the License.
|
|||
<configuration xmlns="urn:activemq"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||
|
||||
<paging-directory>${data.dir:../data}/paging</paging-directory>
|
||||
|
||||
<bindings-directory>${data.dir:../data}/bindings</bindings-directory>
|
||||
|
||||
<journal-directory>${data.dir:../data}/journal</journal-directory>
|
||||
|
||||
<journal-min-files>10</journal-min-files>
|
||||
|
||||
<large-messages-directory>${data.dir:../data}/large-messages</large-messages-directory>
|
||||
<jms xmlns="urn:activemq:jms">
|
||||
<queue name="DLQ"/>
|
||||
<queue name="ExpiryQueue"/>
|
||||
</jms>
|
||||
<core xmlns="urn:activemq:core">
|
||||
<paging-directory>${data.dir:../data}/paging</paging-directory>
|
||||
|
||||
<connectors>
|
||||
<connector name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</connector>
|
||||
|
||||
<connector name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
</connector>
|
||||
</connectors>
|
||||
<bindings-directory>${data.dir:../data}/bindings</bindings-directory>
|
||||
|
||||
<acceptors>
|
||||
<acceptor name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</acceptor>
|
||||
|
||||
<acceptor name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
<param key="direct-deliver" value="false"/>
|
||||
</acceptor>
|
||||
</acceptors>
|
||||
<journal-directory>${data.dir:../data}/journal</journal-directory>
|
||||
|
||||
<broadcast-groups>
|
||||
<broadcast-group name="bg-group1">
|
||||
<group-address>231.7.7.7</group-address>
|
||||
<group-port>9876</group-port>
|
||||
<broadcast-period>5000</broadcast-period>
|
||||
<connector-ref>netty</connector-ref>
|
||||
</broadcast-group>
|
||||
</broadcast-groups>
|
||||
<journal-min-files>10</journal-min-files>
|
||||
|
||||
<discovery-groups>
|
||||
<discovery-group name="dg-group1">
|
||||
<group-address>231.7.7.7</group-address>
|
||||
<group-port>9876</group-port>
|
||||
<refresh-timeout>10000</refresh-timeout>
|
||||
</discovery-group>
|
||||
</discovery-groups>
|
||||
|
||||
<cluster-connections>
|
||||
<cluster-connection name="my-cluster">
|
||||
<address>jms</address>
|
||||
<connector-ref>netty</connector-ref>
|
||||
<discovery-group-ref discovery-group-name="dg-group1"/>
|
||||
</cluster-connection>
|
||||
</cluster-connections>
|
||||
|
||||
<security-settings>
|
||||
<security-setting match="#">
|
||||
<permission type="createNonDurableQueue" roles="guest"/>
|
||||
<permission type="deleteNonDurableQueue" roles="guest"/>
|
||||
<permission type="consume" roles="guest"/>
|
||||
<permission type="send" roles="guest"/>
|
||||
</security-setting>
|
||||
</security-settings>
|
||||
<large-messages-directory>${data.dir:../data}/large-messages</large-messages-directory>
|
||||
|
||||
<address-settings>
|
||||
<!--default for catch all-->
|
||||
<address-setting match="#">
|
||||
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
|
||||
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
|
||||
<redelivery-delay>0</redelivery-delay>
|
||||
<max-size-bytes>10485760</max-size-bytes>
|
||||
<message-counter-history-day-limit>10</message-counter-history-day-limit>
|
||||
<address-full-policy>BLOCK</address-full-policy>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
<connectors>
|
||||
<connector name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</connector>
|
||||
|
||||
|
||||
<connector name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
</connector>
|
||||
</connectors>
|
||||
|
||||
<acceptors>
|
||||
<acceptor name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</acceptor>
|
||||
|
||||
<acceptor name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
<param key="direct-deliver" value="false"/>
|
||||
</acceptor>
|
||||
</acceptors>
|
||||
|
||||
<broadcast-groups>
|
||||
<broadcast-group name="bg-group1">
|
||||
<group-address>231.7.7.7</group-address>
|
||||
<group-port>9876</group-port>
|
||||
<broadcast-period>5000</broadcast-period>
|
||||
<connector-ref>netty</connector-ref>
|
||||
</broadcast-group>
|
||||
</broadcast-groups>
|
||||
|
||||
<discovery-groups>
|
||||
<discovery-group name="dg-group1">
|
||||
<group-address>231.7.7.7</group-address>
|
||||
<group-port>9876</group-port>
|
||||
<refresh-timeout>10000</refresh-timeout>
|
||||
</discovery-group>
|
||||
</discovery-groups>
|
||||
|
||||
<cluster-connections>
|
||||
<cluster-connection name="my-cluster">
|
||||
<address>jms</address>
|
||||
<connector-ref>netty</connector-ref>
|
||||
<discovery-group-ref discovery-group-name="dg-group1"/>
|
||||
</cluster-connection>
|
||||
</cluster-connections>
|
||||
|
||||
<security-settings>
|
||||
<security-setting match="#">
|
||||
<permission type="createNonDurableQueue" roles="guest"/>
|
||||
<permission type="deleteNonDurableQueue" roles="guest"/>
|
||||
<permission type="consume" roles="guest"/>
|
||||
<permission type="send" roles="guest"/>
|
||||
</security-setting>
|
||||
</security-settings>
|
||||
|
||||
<address-settings>
|
||||
<!--default for catch all-->
|
||||
<address-setting match="#">
|
||||
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
|
||||
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
|
||||
<redelivery-delay>0</redelivery-delay>
|
||||
<max-size-bytes>10485760</max-size-bytes>
|
||||
<message-counter-history-day-limit>10</message-counter-history-day-limit>
|
||||
<address-full-policy>BLOCK</address-full-policy>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
<?xml version='1.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">
|
||||
|
||||
<queue name="DLQ"/>
|
||||
|
||||
<queue name="ExpiryQueue"/>
|
||||
|
||||
</configuration>
|
|
@ -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
|
|
@ -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
|
|
@ -1,27 +0,0 @@
|
|||
<?xml version='1.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>
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
<jms configuration="file:${activemq.home}/config/clustered/activemq-jms.xml"/>
|
||||
|
||||
<basic-security/>
|
||||
<file-security configuration="file:${activemq.home}/config/non-clustered/activemq-users.xml"/>
|
||||
|
||||
<web bind="http://localhost:8161" path="web">
|
||||
<app url="jolokia" war="jolokia-war-1.2.3.war"/>
|
||||
|
|
|
@ -18,70 +18,72 @@ 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-configuration.xsd">
|
||||
<configuration xmlns="urn:activemq">
|
||||
<jms xmlns="urn:activemq:jms">
|
||||
<queue name="DLQ"/>
|
||||
<queue name="ExpiryQueue"/>
|
||||
</jms>
|
||||
<core xmlns="urn:activemq:core">
|
||||
<paging-directory>${data.dir:../data}/paging</paging-directory>
|
||||
|
||||
<paging-directory>${data.dir:../data}/paging</paging-directory>
|
||||
|
||||
<bindings-directory>${data.dir:../data}/bindings</bindings-directory>
|
||||
|
||||
<journal-directory>${data.dir:../data}/journal</journal-directory>
|
||||
|
||||
<journal-min-files>10</journal-min-files>
|
||||
|
||||
<large-messages-directory>${data.dir:../data}/large-messages</large-messages-directory>
|
||||
|
||||
<connectors>
|
||||
<connector name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</connector>
|
||||
|
||||
<connector name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
</connector>
|
||||
</connectors>
|
||||
<bindings-directory>${data.dir:../data}/bindings</bindings-directory>
|
||||
|
||||
<acceptors>
|
||||
<acceptor name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</acceptor>
|
||||
|
||||
<acceptor name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
<param key="direct-deliver" value="false"/>
|
||||
</acceptor>
|
||||
</acceptors>
|
||||
<journal-directory>${data.dir:../data}/journal</journal-directory>
|
||||
|
||||
<security-settings>
|
||||
<security-setting match="#">
|
||||
<permission type="createNonDurableQueue" roles="guest"/>
|
||||
<permission type="deleteNonDurableQueue" roles="guest"/>
|
||||
<permission type="consume" roles="guest"/>
|
||||
<permission type="send" roles="guest"/>
|
||||
</security-setting>
|
||||
</security-settings>
|
||||
<journal-min-files>10</journal-min-files>
|
||||
|
||||
<address-settings>
|
||||
<!--default for catch all-->
|
||||
<address-setting match="#">
|
||||
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
|
||||
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
|
||||
<redelivery-delay>0</redelivery-delay>
|
||||
<max-size-bytes>10485760</max-size-bytes>
|
||||
<message-counter-history-day-limit>10</message-counter-history-day-limit>
|
||||
<address-full-policy>BLOCK</address-full-policy>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
<large-messages-directory>${data.dir:../data}/large-messages</large-messages-directory>
|
||||
|
||||
<connectors>
|
||||
<connector name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</connector>
|
||||
|
||||
<connector name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
</connector>
|
||||
</connectors>
|
||||
|
||||
<acceptors>
|
||||
<acceptor name="netty">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.port:5445}"/>
|
||||
</acceptor>
|
||||
|
||||
<acceptor name="netty-throughput">
|
||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
||||
<param key="host" value="${activemq.remoting.netty.host:localhost}"/>
|
||||
<param key="port" value="${activemq.remoting.netty.batch.port:5455}"/>
|
||||
<param key="batch-delay" value="50"/>
|
||||
<param key="direct-deliver" value="false"/>
|
||||
</acceptor>
|
||||
</acceptors>
|
||||
|
||||
<security-settings>
|
||||
<security-setting match="#">
|
||||
<permission type="createNonDurableQueue" roles="guest"/>
|
||||
<permission type="deleteNonDurableQueue" roles="guest"/>
|
||||
<permission type="consume" roles="guest"/>
|
||||
<permission type="send" roles="guest"/>
|
||||
</security-setting>
|
||||
</security-settings>
|
||||
|
||||
<address-settings>
|
||||
<!--default for catch all-->
|
||||
<address-setting match="#">
|
||||
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
|
||||
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
|
||||
<redelivery-delay>0</redelivery-delay>
|
||||
<max-size-bytes>10485760</max-size-bytes>
|
||||
<message-counter-history-day-limit>10</message-counter-history-day-limit>
|
||||
<address-full-policy>BLOCK</address-full-policy>
|
||||
</address-setting>
|
||||
</address-settings>
|
||||
</core>
|
||||
</configuration>
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
<?xml version='1.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">
|
||||
|
||||
<queue name="DLQ"/>
|
||||
|
||||
<queue name="ExpiryQueue"/>
|
||||
|
||||
</configuration>
|
|
@ -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
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue