ACTIVEMQ6-51 Example server bootstrapping
This commit is contained in:
parent
4f925c5a44
commit
a102983d7a
|
@ -0,0 +1,61 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.apache.activemq</groupId>
|
||||||
|
<artifactId>activemq-pom</artifactId>
|
||||||
|
<version>6.0.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>activemq-maven-plugin</artifactId>
|
||||||
|
<packaging>maven-plugin</packaging>
|
||||||
|
<name>ActiveMQ6 Maven Plugin</name>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<activemq.basedir>${project.basedir}/..</activemq.basedir>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-api</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.activemq</groupId>
|
||||||
|
<artifactId>activemq-server</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.activemq</groupId>
|
||||||
|
<artifactId>activemq-jms-server</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.netty</groupId>
|
||||||
|
<artifactId>netty-all</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.0</version>
|
||||||
|
<configuration>
|
||||||
|
<showWarnings>true</showWarnings>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,27 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:andy.taylor@jboss.com">Andy Taylor</a>
|
||||||
|
* Date: 8/18/11
|
||||||
|
* Time: 2:35 PM
|
||||||
|
*/
|
||||||
|
public interface ActiveMQClient
|
||||||
|
{
|
||||||
|
void run();
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.maven.plugin.MojoFailureException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:andy.taylor@jboss.com">Andy Taylor</a>
|
||||||
|
*
|
||||||
|
* Allows a Java Client to be run which must hve a static main(String[] args) method
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @phase verify
|
||||||
|
* @goal runClient
|
||||||
|
*/
|
||||||
|
public class ActiveMQClientPlugin extends AbstractMojo
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
String clientClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
String[] args;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
private Properties systemProperties;
|
||||||
|
|
||||||
|
public void execute() throws MojoExecutionException, MojoFailureException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (systemProperties != null && !systemProperties.isEmpty())
|
||||||
|
{
|
||||||
|
System.getProperties().putAll(systemProperties);
|
||||||
|
}
|
||||||
|
Class aClass = Class.forName(clientClass);
|
||||||
|
Method method = aClass.getDeclaredMethod("main", new Class[]{String[].class});
|
||||||
|
method.invoke(null, new Object[]{args});
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new MojoFailureException(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,228 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import javax.management.MBeanServer;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.management.ManagementFactory;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.apache.activemq.server.ActiveMQBootstrap;
|
||||||
|
import org.apache.activemq.server.SpawnedActiveMQBootstrap;
|
||||||
|
import org.apache.activemq.server.SpawnedVMSupport;
|
||||||
|
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||||
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.maven.plugin.MojoFailureException;
|
||||||
|
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
|
import org.codehaus.classworlds.ClassRealm;
|
||||||
|
import org.codehaus.classworlds.ClassWorld;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:andy.taylor@jboss.com">Andy Taylor</a>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @phase verify
|
||||||
|
* @goal start
|
||||||
|
*/
|
||||||
|
public class ActiveMQStartPlugin extends AbstractMojo
|
||||||
|
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The plugin descriptor
|
||||||
|
*/
|
||||||
|
private PluginDescriptor descriptor;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter default-value=false
|
||||||
|
*/
|
||||||
|
private Boolean waitOnStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
private String configurationDir;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
private String nodeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter default-value=false;
|
||||||
|
*/
|
||||||
|
private Boolean fork;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter default-value=false
|
||||||
|
*/
|
||||||
|
private Boolean debug;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
private Properties systemProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter default-value=STARTED::
|
||||||
|
*/
|
||||||
|
private String serverStartString;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
private ActiveMQSecurityManager securityManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* registers a TestClusterMBean for test clients to use.
|
||||||
|
*/
|
||||||
|
private boolean testClusterManager;
|
||||||
|
|
||||||
|
public void execute() throws MojoExecutionException, MojoFailureException
|
||||||
|
{
|
||||||
|
if (testClusterManager)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
createClusterManagerMBean();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException("Failed to create cluster manager mbean", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (systemProperties != null && !systemProperties.isEmpty())
|
||||||
|
{
|
||||||
|
System.getProperties()
|
||||||
|
.putAll(systemProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
String workingPath = new File(".").getAbsolutePath();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
registerNode(nodeId, workingPath, configurationDir);
|
||||||
|
}
|
||||||
|
catch (Exception e1)
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException("Failed to create cluster manager mbean", e1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fork)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PluginDescriptor pd = (PluginDescriptor) getPluginContext().get("pluginDescriptor");
|
||||||
|
final Process p = SpawnedVMSupport.spawnVM(pd.getArtifacts(),
|
||||||
|
"ActiveMQServer_" + (nodeId != null ? nodeId : ""),
|
||||||
|
SpawnedActiveMQBootstrap.class.getName(),
|
||||||
|
systemProperties,
|
||||||
|
true,
|
||||||
|
serverStartString,
|
||||||
|
"FAILED::",
|
||||||
|
".",
|
||||||
|
configurationDir,
|
||||||
|
debug,
|
||||||
|
configurationDir,
|
||||||
|
"" + waitOnStart,
|
||||||
|
nodeId);
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
//just to be on the safe side
|
||||||
|
p.destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (waitOnStart)
|
||||||
|
{
|
||||||
|
p.waitFor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Throwable e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new MojoExecutionException(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ActiveMQBootstrap bootstrap = new ActiveMQBootstrap(configurationDir, waitOnStart, nodeId, securityManager);
|
||||||
|
if (configurationDir != null)
|
||||||
|
{
|
||||||
|
extendPluginClasspath(configurationDir);
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bootstrap.execute();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerNode(String nodeId, String workingPath,
|
||||||
|
String hornetqConfigurationDir) throws Exception
|
||||||
|
{
|
||||||
|
TestClusterManagerMBean control = PluginUtil.getTestClusterManager();
|
||||||
|
if (control != null)
|
||||||
|
{
|
||||||
|
control.registerNode(nodeId, workingPath, hornetqConfigurationDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createClusterManagerMBean() throws Exception
|
||||||
|
{
|
||||||
|
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
|
||||||
|
ObjectName name = ObjectName.getInstance("hornetq:module=test,type=TestClusterManager");
|
||||||
|
mbeanServer.registerMBean(new TestClusterManager(), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void extendPluginClasspath(String element) throws MojoExecutionException
|
||||||
|
{
|
||||||
|
ClassWorld world = new ClassWorld();
|
||||||
|
ClassRealm realm;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
realm = world.newRealm(
|
||||||
|
"maven.plugin." + getClass().getSimpleName() + ((nodeId == null) ? "" : nodeId),
|
||||||
|
Thread.currentThread()
|
||||||
|
.getContextClassLoader()
|
||||||
|
);
|
||||||
|
File elementFile = new File(element);
|
||||||
|
getLog().debug("Adding element to plugin classpath" + elementFile.getPath());
|
||||||
|
realm.addConstituent(elementFile.toURI()
|
||||||
|
.toURL());
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException(ex.toString(), ex);
|
||||||
|
}
|
||||||
|
System.out.println(Arrays.toString(realm.getConstituents()));
|
||||||
|
Thread.currentThread()
|
||||||
|
.setContextClassLoader(realm.getClassLoader());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.maven.plugin.MojoFailureException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:andy.taylor@jboss.com">Andy Taylor</a>
|
||||||
|
* Date: 8/18/11
|
||||||
|
* Time: 12:25 PM
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @phase verify
|
||||||
|
* @goal stop
|
||||||
|
*/
|
||||||
|
public class ActiveMQStopPlugin extends AbstractMojo
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter
|
||||||
|
*/
|
||||||
|
private String configurationDir;
|
||||||
|
|
||||||
|
public void execute() throws MojoExecutionException, MojoFailureException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String dirName = configurationDir != null ? configurationDir : ".";
|
||||||
|
final File file = new File(dirName + "/" + "/STOP_ME");
|
||||||
|
file.createNewFile();
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
while (System.currentTimeMillis() < time + 60000)
|
||||||
|
{
|
||||||
|
if (!file.exists())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Thread.sleep(200);
|
||||||
|
}
|
||||||
|
catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
//ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (file.exists())
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException("looks like the server hasn't been stopped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new MojoExecutionException(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import javax.management.MBeanServer;
|
||||||
|
|
||||||
|
import org.apache.activemq.core.config.Configuration;
|
||||||
|
import org.apache.activemq.core.server.NodeManager;
|
||||||
|
import org.apache.activemq.core.server.impl.ActiveMQServerImpl;
|
||||||
|
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||||
|
|
||||||
|
public final class InVMNodeManagerServer extends ActiveMQServerImpl
|
||||||
|
{
|
||||||
|
final NodeManager nodeManager;
|
||||||
|
|
||||||
|
public InVMNodeManagerServer(final NodeManager nodeManager)
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
this.nodeManager = nodeManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InVMNodeManagerServer(final Configuration configuration, final NodeManager nodeManager)
|
||||||
|
{
|
||||||
|
super(configuration);
|
||||||
|
this.nodeManager = nodeManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InVMNodeManagerServer(final Configuration configuration,
|
||||||
|
final MBeanServer mbeanServer,
|
||||||
|
final NodeManager nodeManager)
|
||||||
|
{
|
||||||
|
super(configuration, mbeanServer);
|
||||||
|
this.nodeManager = nodeManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InVMNodeManagerServer(final Configuration configuration,
|
||||||
|
final ActiveMQSecurityManager securityManager,
|
||||||
|
final NodeManager nodeManager)
|
||||||
|
{
|
||||||
|
super(configuration, securityManager);
|
||||||
|
this.nodeManager = nodeManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InVMNodeManagerServer(final Configuration configuration,
|
||||||
|
final MBeanServer mbeanServer,
|
||||||
|
final ActiveMQSecurityManager securityManager,
|
||||||
|
final NodeManager nodeManager)
|
||||||
|
{
|
||||||
|
super(configuration, mbeanServer, securityManager);
|
||||||
|
this.nodeManager = nodeManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected NodeManager createNodeManager(final String directory, boolean replicatingBackup)
|
||||||
|
{
|
||||||
|
return nodeManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import javax.management.MBeanServerConnection;
|
||||||
|
import javax.management.MBeanServerInvocationHandler;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
import javax.management.remote.JMXConnector;
|
||||||
|
import javax.management.remote.JMXConnectorFactory;
|
||||||
|
import javax.management.remote.JMXServiceURL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class PluginUtil
|
||||||
|
{
|
||||||
|
public static TestClusterManagerMBean getTestClusterManager()
|
||||||
|
{
|
||||||
|
final String JMX_URL = "service:jmx:rmi:///jndi/rmi://localhost:3000/jmxrmi";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(JMX_URL), new HashMap<String, String>());
|
||||||
|
ObjectName name = ObjectName.getInstance("activemq:module=test,type=TestClusterManager");
|
||||||
|
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
|
||||||
|
TestClusterManagerMBean clusterControl = MBeanServerInvocationHandler.newProxyInstance(mbsc,
|
||||||
|
name,
|
||||||
|
TestClusterManagerMBean.class,
|
||||||
|
false);
|
||||||
|
clusterControl.getNumNodes();//serves as a validation.
|
||||||
|
return clusterControl;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TestClusterManager implements TestClusterManagerMBean
|
||||||
|
{
|
||||||
|
private List<TestNode> testNodes = new ArrayList<TestNode>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getNumNodes()
|
||||||
|
{
|
||||||
|
synchronized (testNodes)
|
||||||
|
{
|
||||||
|
return testNodes.size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerNode(String nodeId, String workingDir,
|
||||||
|
String hornetqConfigurationDir)
|
||||||
|
{
|
||||||
|
synchronized (testNodes)
|
||||||
|
{
|
||||||
|
testNodes.add(new TestNode(nodeId, workingDir, hornetqConfigurationDir));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void killNode(int i) throws IOException
|
||||||
|
{
|
||||||
|
TestNode node = testNodes.get(i);
|
||||||
|
node.kill();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public interface TestClusterManagerMBean
|
||||||
|
{
|
||||||
|
int getNumNodes();
|
||||||
|
|
||||||
|
void registerNode(String nodeId, String workingDir,
|
||||||
|
String hornetqConfigurationDirt);
|
||||||
|
|
||||||
|
void killNode(int i) throws IOException;
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/**
|
||||||
|
* 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.maven;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class TestNode
|
||||||
|
{
|
||||||
|
String nodeId;
|
||||||
|
String workingDir;
|
||||||
|
String configDir;
|
||||||
|
|
||||||
|
public TestNode(String nodeId, String workingDir,
|
||||||
|
String configDir)
|
||||||
|
{
|
||||||
|
this.nodeId = nodeId;
|
||||||
|
this.workingDir = workingDir;
|
||||||
|
this.configDir = configDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void kill() throws IOException
|
||||||
|
{
|
||||||
|
File file = new File(configDir, "KILL_ME");
|
||||||
|
file.createNewFile();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Thread.sleep(3000);
|
||||||
|
}
|
||||||
|
catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,258 @@
|
||||||
|
/**
|
||||||
|
* 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.server;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.management.ManagementFactory;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
import org.apache.activemq.core.config.Configuration;
|
||||||
|
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.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.impl.JMSServerManagerImpl;
|
||||||
|
import org.apache.activemq.maven.InVMNodeManagerServer;
|
||||||
|
import org.apache.activemq.spi.core.security.ActiveMQSecurityManager;
|
||||||
|
import org.apache.activemq.spi.core.security.ActiveMQSecurityManagerImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This will bootstrap the HornetQ Server and also the naming server if required
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||||
|
*/
|
||||||
|
public class ActiveMQBootstrap
|
||||||
|
{
|
||||||
|
private final String configurationDir;
|
||||||
|
|
||||||
|
private final Boolean waitOnStart;
|
||||||
|
|
||||||
|
private final String nodeId;
|
||||||
|
|
||||||
|
private static Map<String, NodeManager> managerMap = new HashMap<String, NodeManager>();
|
||||||
|
|
||||||
|
private boolean spawned = false;
|
||||||
|
|
||||||
|
private ActiveMQServer server;
|
||||||
|
|
||||||
|
private Configuration configuration;
|
||||||
|
|
||||||
|
private JMSServerManager manager;
|
||||||
|
|
||||||
|
private ActiveMQSecurityManager securityManager;
|
||||||
|
|
||||||
|
|
||||||
|
public ActiveMQBootstrap(String configurationDir, Boolean waitOnStart, String nodeId, ActiveMQSecurityManager securityManager)
|
||||||
|
{
|
||||||
|
this.configurationDir = configurationDir;
|
||||||
|
this.waitOnStart = waitOnStart;
|
||||||
|
this.nodeId = nodeId;
|
||||||
|
this.securityManager = securityManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ActiveMQBootstrap(String[] args)
|
||||||
|
{
|
||||||
|
this.configurationDir = args[0];
|
||||||
|
this.waitOnStart = Boolean.valueOf(args[1]);
|
||||||
|
this.nodeId = args[2];
|
||||||
|
spawned = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void execute() throws Exception
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (configurationDir != null)
|
||||||
|
{
|
||||||
|
//extendPluginClasspath(configurationDir);
|
||||||
|
configuration = new FileConfiguration();
|
||||||
|
File file = new File(configurationDir + "/" + "activemq-configuration.xml");
|
||||||
|
((FileConfiguration) configuration).setConfigurationUrl(file.toURI().toURL().toExternalForm());
|
||||||
|
((FileConfiguration) configuration).start();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
configuration = new ConfigurationImpl();
|
||||||
|
configuration.setJournalType(JournalType.NIO);
|
||||||
|
}
|
||||||
|
|
||||||
|
createServer(configuration);
|
||||||
|
|
||||||
|
if (waitOnStart)
|
||||||
|
{
|
||||||
|
String dirName = System.getProperty("activemq.config.dir", ".");
|
||||||
|
final File file = new File(dirName + "/STOP_ME");
|
||||||
|
if (file.exists())
|
||||||
|
{
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!file.exists())
|
||||||
|
{
|
||||||
|
Thread.sleep(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
manager.stop();
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String dirName = configurationDir != null ? configurationDir : ".";
|
||||||
|
final File stopFile = new File(dirName + "/STOP_ME");
|
||||||
|
if (stopFile.exists())
|
||||||
|
{
|
||||||
|
stopFile.delete();
|
||||||
|
}
|
||||||
|
final File killFile = new File(dirName + "/KILL_ME");
|
||||||
|
if (killFile.exists())
|
||||||
|
{
|
||||||
|
killFile.delete();
|
||||||
|
}
|
||||||
|
final File restartFile = new File(dirName + "/RESTART_ME");
|
||||||
|
if (restartFile.exists())
|
||||||
|
{
|
||||||
|
restartFile.delete();
|
||||||
|
}
|
||||||
|
final Timer timer = new Timer("ActiveMQ Server Shutdown Timer", true);
|
||||||
|
timer.scheduleAtFixedRate(new ServerStopTimerTask(stopFile, killFile, restartFile, timer), 500, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new Exception(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createServer(Configuration configuration) throws Exception
|
||||||
|
{
|
||||||
|
if (nodeId != null && !nodeId.equals("") && !nodeId.equals("null"))
|
||||||
|
{
|
||||||
|
InVMNodeManager nodeManager = (InVMNodeManager) managerMap.get(nodeId);
|
||||||
|
if (nodeManager == null)
|
||||||
|
{
|
||||||
|
boolean replicatedBackup = configuration.getHAPolicyConfiguration().getType() == HAPolicyConfiguration.TYPE.REPLICA;
|
||||||
|
nodeManager = new InVMNodeManager(replicatedBackup, configuration.getJournalDirectory());
|
||||||
|
managerMap.put(nodeId, nodeManager);
|
||||||
|
}
|
||||||
|
server = new InVMNodeManagerServer(configuration, ManagementFactory.getPlatformMBeanServer(),
|
||||||
|
securityManager != null ? securityManager : new ActiveMQSecurityManagerImpl(), nodeManager);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
server = new ActiveMQServerImpl(configuration, ManagementFactory.getPlatformMBeanServer(),
|
||||||
|
securityManager != null ? securityManager : new ActiveMQSecurityManagerImpl());
|
||||||
|
}
|
||||||
|
|
||||||
|
manager = new JMSServerManagerImpl(server);
|
||||||
|
manager.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ServerStopTimerTask extends TimerTask
|
||||||
|
{
|
||||||
|
private final File stopFile;
|
||||||
|
private final Timer timer;
|
||||||
|
private final File killFile;
|
||||||
|
private final File restartFile;
|
||||||
|
|
||||||
|
public ServerStopTimerTask(File stopFile, File killFile, File restartFile, Timer timer)
|
||||||
|
{
|
||||||
|
this.stopFile = stopFile;
|
||||||
|
this.killFile = killFile;
|
||||||
|
this.restartFile = restartFile;
|
||||||
|
this.timer = timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
if (stopFile.exists())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
timer.cancel();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (manager != null)
|
||||||
|
{
|
||||||
|
manager.stop();
|
||||||
|
manager = null;
|
||||||
|
}
|
||||||
|
server = null;
|
||||||
|
stopFile.delete();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (spawned)
|
||||||
|
{
|
||||||
|
Runtime.getRuntime()
|
||||||
|
.halt(666);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (killFile.exists())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!spawned)
|
||||||
|
{
|
||||||
|
manager.getActiveMQServer()
|
||||||
|
.stop(true);
|
||||||
|
manager.stop();
|
||||||
|
manager = null;
|
||||||
|
server = null;
|
||||||
|
killFile.delete();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
killFile.delete();
|
||||||
|
Runtime.getRuntime().halt(777);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (restartFile.exists())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
createServer(configuration);
|
||||||
|
restartFile.delete();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
/**
|
||||||
|
* 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.server;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
|
||||||
|
* 5/14/12
|
||||||
|
*
|
||||||
|
* This class will be spawned in a new vm and will call the bootstrap
|
||||||
|
*/
|
||||||
|
public class SpawnedActiveMQBootstrap
|
||||||
|
{
|
||||||
|
public static void main(final String[] args)
|
||||||
|
{
|
||||||
|
ActiveMQBootstrap bootstrap;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bootstrap = new ActiveMQBootstrap(args);
|
||||||
|
bootstrap.execute();
|
||||||
|
System.out.println("STARTED::");
|
||||||
|
}
|
||||||
|
catch (Throwable e)
|
||||||
|
{
|
||||||
|
System.out.println("FAILED::" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,257 @@
|
||||||
|
/**
|
||||||
|
* 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.server;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.apache.maven.artifact.DefaultArtifact;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:ovidiu@feodorov.com">Ovidiu Feodorov</a>
|
||||||
|
* @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
|
||||||
|
* @author <a href="mailto:csuconic@redhat.com">Clebert Suconic</a>
|
||||||
|
*/
|
||||||
|
public class SpawnedVMSupport
|
||||||
|
{
|
||||||
|
public static Process spawnVM(List<DefaultArtifact> arts,
|
||||||
|
final String logName,
|
||||||
|
final String className,
|
||||||
|
final Properties properties,
|
||||||
|
final boolean logOutput,
|
||||||
|
final String success,
|
||||||
|
final String failure,
|
||||||
|
final String workDir,
|
||||||
|
final String configDir,
|
||||||
|
boolean debug,
|
||||||
|
final String... args) throws Exception
|
||||||
|
{
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
|
||||||
|
sb.append("java")
|
||||||
|
.append(' ');
|
||||||
|
StringBuffer props = new StringBuffer();
|
||||||
|
if (properties != null)
|
||||||
|
{
|
||||||
|
for (Map.Entry<Object, Object> entry : properties.entrySet())
|
||||||
|
{
|
||||||
|
props.append("-D")
|
||||||
|
.append(entry.getKey())
|
||||||
|
.append("=")
|
||||||
|
.append(entry.getValue())
|
||||||
|
.append(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String vmarg = props.toString();
|
||||||
|
String osName = System.getProperty("os.name");
|
||||||
|
osName = (osName != null) ? osName.toLowerCase() : "";
|
||||||
|
boolean isWindows = osName.contains("win");
|
||||||
|
if (isWindows)
|
||||||
|
{
|
||||||
|
vmarg = vmarg.replaceAll("/", "\\\\");
|
||||||
|
}
|
||||||
|
sb.append(vmarg)
|
||||||
|
.append(" ");
|
||||||
|
String pathSeparater = System.getProperty("path.separator");
|
||||||
|
StringBuilder classpath = new StringBuilder();
|
||||||
|
for (DefaultArtifact artifact : arts)
|
||||||
|
{
|
||||||
|
classpath.append(artifact.getFile()
|
||||||
|
.getAbsolutePath())
|
||||||
|
.append(pathSeparater);
|
||||||
|
}
|
||||||
|
classpath.append(configDir)
|
||||||
|
.append(pathSeparater);
|
||||||
|
|
||||||
|
if (isWindows)
|
||||||
|
{
|
||||||
|
sb.append("-cp")
|
||||||
|
.append(" \"")
|
||||||
|
.append(classpath.toString())
|
||||||
|
.append("\" ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.append("-cp")
|
||||||
|
.append(" ")
|
||||||
|
.append(classpath.toString())
|
||||||
|
.append(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME - not good to assume path separator
|
||||||
|
String libPath = "-Djava.library.path=" + System.getProperty("java.library.path", "./native/bin");
|
||||||
|
if (isWindows)
|
||||||
|
{
|
||||||
|
libPath = libPath.replaceAll("/", "\\\\");
|
||||||
|
libPath = "\"" + libPath + "\"";
|
||||||
|
}
|
||||||
|
sb.append("-Djava.library.path=")
|
||||||
|
.append(libPath)
|
||||||
|
.append(" ");
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
sb.append("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ");
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append(className)
|
||||||
|
.append(' ');
|
||||||
|
|
||||||
|
for (String arg : args)
|
||||||
|
{
|
||||||
|
sb.append(arg)
|
||||||
|
.append(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
String commandLine = sb.toString();
|
||||||
|
|
||||||
|
//SpawnedVMSupport.log.trace("command line: " + commandLine);
|
||||||
|
|
||||||
|
Process process = Runtime.getRuntime()
|
||||||
|
.exec(commandLine, null, new File(workDir));
|
||||||
|
|
||||||
|
//SpawnedVMSupport.log.trace("process: " + process);
|
||||||
|
|
||||||
|
CountDownLatch latch = new CountDownLatch(1);
|
||||||
|
|
||||||
|
ProcessLogger outputLogger = new ProcessLogger(logOutput,
|
||||||
|
process.getInputStream(),
|
||||||
|
logName,
|
||||||
|
false,
|
||||||
|
success,
|
||||||
|
failure,
|
||||||
|
latch);
|
||||||
|
outputLogger.start();
|
||||||
|
|
||||||
|
// Adding a reader to System.err, so the VM won't hang on a System.err.println as identified on this forum thread:
|
||||||
|
// http://www.jboss.org/index.html?module=bb&op=viewtopic&t=151815
|
||||||
|
ProcessLogger errorLogger = new ProcessLogger(true,
|
||||||
|
process.getErrorStream(),
|
||||||
|
logName,
|
||||||
|
true,
|
||||||
|
success,
|
||||||
|
failure,
|
||||||
|
latch);
|
||||||
|
errorLogger.start();
|
||||||
|
|
||||||
|
if (!latch.await(60, TimeUnit.SECONDS))
|
||||||
|
{
|
||||||
|
process.destroy();
|
||||||
|
throw new RuntimeException("Timed out waiting for server to start");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outputLogger.failed || errorLogger.failed)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
process.destroy();
|
||||||
|
}
|
||||||
|
catch (Throwable e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
throw new RuntimeException("server failed to start");
|
||||||
|
}
|
||||||
|
return process;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirect the input stream to a logger (as debug logs)
|
||||||
|
*/
|
||||||
|
static class ProcessLogger extends Thread
|
||||||
|
{
|
||||||
|
private final InputStream is;
|
||||||
|
|
||||||
|
private final String logName;
|
||||||
|
|
||||||
|
private final boolean print;
|
||||||
|
|
||||||
|
private final boolean sendToErr;
|
||||||
|
|
||||||
|
private final String success;
|
||||||
|
|
||||||
|
private final String failure;
|
||||||
|
|
||||||
|
private final CountDownLatch latch;
|
||||||
|
|
||||||
|
boolean failed = false;
|
||||||
|
|
||||||
|
ProcessLogger(final boolean print,
|
||||||
|
final InputStream is,
|
||||||
|
final String logName,
|
||||||
|
final boolean sendToErr,
|
||||||
|
final String success,
|
||||||
|
final String failure,
|
||||||
|
final CountDownLatch latch) throws ClassNotFoundException
|
||||||
|
{
|
||||||
|
this.is = is;
|
||||||
|
this.print = print;
|
||||||
|
this.logName = logName;
|
||||||
|
this.sendToErr = sendToErr;
|
||||||
|
this.success = success;
|
||||||
|
this.failure = failure;
|
||||||
|
this.latch = latch;
|
||||||
|
setDaemon(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
InputStreamReader isr = new InputStreamReader(is);
|
||||||
|
BufferedReader br = new BufferedReader(isr);
|
||||||
|
String line;
|
||||||
|
while ((line = br.readLine()) != null)
|
||||||
|
{
|
||||||
|
if (line.startsWith(success))
|
||||||
|
{
|
||||||
|
failed = false;
|
||||||
|
latch.countDown();
|
||||||
|
}
|
||||||
|
else if (line.startsWith(failure))
|
||||||
|
{
|
||||||
|
failed = true;
|
||||||
|
latch.countDown();
|
||||||
|
}
|
||||||
|
if (print)
|
||||||
|
{
|
||||||
|
if (sendToErr)
|
||||||
|
{
|
||||||
|
System.err.println(logName + " err:" + line);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println(logName + " out:" + line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
// ok, stream closed
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -63,7 +63,7 @@
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<waitOnStart>true</waitOnStart>
|
<waitOnStart>true</waitOnStart>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/server0</configurationDir>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
</executions>
|
</executions>
|
||||||
<configuration>
|
<configuration>
|
||||||
<waitOnStart>false</waitOnStart>
|
<waitOnStart>false</waitOnStart>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -161,7 +161,7 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<configuration>
|
<configuration>
|
||||||
<waitOnStart>false</waitOnStart>
|
<waitOnStart>false</waitOnStart>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
|
@ -43,12 +43,11 @@ import org.apache.activemq.jms.client.ActiveMQConnectionFactory;
|
||||||
*/
|
*/
|
||||||
public abstract class ActiveMQExample
|
public abstract class ActiveMQExample
|
||||||
{
|
{
|
||||||
protected static final Logger log = Logger.getLogger(ActiveMQExample.class
|
protected static final Logger log = Logger.getLogger(ActiveMQExample.class.getName());
|
||||||
.getName());
|
|
||||||
|
|
||||||
protected boolean failure = false;
|
protected boolean failure = false;
|
||||||
|
|
||||||
private String[] args;
|
protected String[] args;
|
||||||
|
|
||||||
public abstract boolean runExample() throws Exception;
|
public abstract boolean runExample() throws Exception;
|
||||||
|
|
||||||
|
@ -176,17 +175,6 @@ public abstract class ActiveMQExample
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InitialContext getContext(final int serverId) throws Exception
|
|
||||||
{
|
|
||||||
ActiveMQExample.log.info("using " + args[serverId] + " for jndi");
|
|
||||||
Properties props = new Properties();
|
|
||||||
props.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
|
||||||
props.put("java.naming.provider.url", args[serverId]);
|
|
||||||
props.put("queue.queue/exampleQueue", "exampleQueue");
|
|
||||||
props.put("topic.topic/exampleTopic", "exampleTopic");
|
|
||||||
return new InitialContext(props);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected int getServer(Connection connection)
|
protected int getServer(Connection connection)
|
||||||
{
|
{
|
||||||
ClientSession session = ((ActiveMQConnection) connection).getInitialSession();
|
ClientSession session = ((ActiveMQConnection) connection).getInitialSession();
|
||||||
|
|
|
@ -125,7 +125,7 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<configuration>
|
<configuration>
|
||||||
<waitOnStart>false</waitOnStart>
|
<waitOnStart>false</waitOnStart>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
|
@ -65,8 +65,8 @@
|
||||||
<pre class="prettyprint">
|
<pre class="prettyprint">
|
||||||
<code>
|
<code>
|
||||||
<queues>
|
<queues>
|
||||||
<queue name="jms.queue.aerogearQueue">
|
<queue name="jms.queue.exampleQueue">
|
||||||
<address>jms.queue.aerogearQueue</address>
|
<address>jms.queue.exampleQueue</address>
|
||||||
</queue>
|
</queue>
|
||||||
</queues>
|
</queues>
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
<connector-service name="aerogear-connector">
|
<connector-service name="aerogear-connector">
|
||||||
<factory-class>org.apache.activemq.integration.aerogear.AeroGearConnectorServiceFactory</factory-class>
|
<factory-class>org.apache.activemq.integration.aerogear.AeroGearConnectorServiceFactory</factory-class>
|
||||||
<param key="endpoint" value="${endpoint}"/>
|
<param key="endpoint" value="${endpoint}"/>
|
||||||
<param key="queue" value="jms.queue.aerogearQueue"/>
|
<param key="queue" value="jms.queue.exampleQueue"/>
|
||||||
<param key="application-id" value="${applicationid}"/>
|
<param key="application-id" value="${applicationid}"/>
|
||||||
<param key="master-secret" value="${mastersecret}"/>
|
<param key="master-secret" value="${mastersecret}"/>
|
||||||
</connector-service>
|
</connector-service>
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
<p>Now lets look at a snippet of code we used to send the message for our JMS client</p>
|
<p>Now lets look at a snippet of code we used to send the message for our JMS client</p>
|
||||||
<pre class="prettyprint">
|
<pre class="prettyprint">
|
||||||
<code>
|
<code>
|
||||||
Queue queue = (Queue)initialContext.lookup("/queue/aerogearQueue");
|
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
||||||
|
|
||||||
// Step 3. Perform a lookup on the Connection Factory
|
// Step 3. Perform a lookup on the Connection Factory
|
||||||
ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("/ConnectionFactory");
|
ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("/ConnectionFactory");
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class AerogearExample extends ActiveMQExample
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Step 1. Create an initial context to perform the JNDI lookup.
|
// Step 1. Create an initial context to perform the JNDI lookup.
|
||||||
initialContext = getContext(0);
|
initialContext = new InitialContext();
|
||||||
|
|
||||||
// Step 2. Perfom a lookup on the queue
|
// Step 2. Perfom a lookup on the queue
|
||||||
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
||||||
|
|
|
@ -10,15 +10,6 @@
|
||||||
|
|
||||||
<paging-directory>${build.directory}/server0/data/messaging/paging</paging-directory>
|
<paging-directory>${build.directory}/server0/data/messaging/paging</paging-directory>
|
||||||
|
|
||||||
|
|
||||||
<!-- Connectors -->
|
|
||||||
|
|
||||||
<connectors>
|
|
||||||
<connector name="netty-connector">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
</connector>
|
|
||||||
</connectors>
|
|
||||||
|
|
||||||
<!-- Acceptors -->
|
<!-- Acceptors -->
|
||||||
<acceptors>
|
<acceptors>
|
||||||
<acceptor name="netty-acceptor">
|
<acceptor name="netty-acceptor">
|
||||||
|
@ -29,8 +20,8 @@
|
||||||
<!-- We need to create a core queue for the JMS queue explicitly because the connector will be deployed
|
<!-- We need to create a core queue for the JMS queue explicitly because the connector will be deployed
|
||||||
before the JMS queue is deployed, so the first time, it otherwise won't find the queue -->
|
before the JMS queue is deployed, so the first time, it otherwise won't find the queue -->
|
||||||
<queues>
|
<queues>
|
||||||
<queue name="jms.queue.aerogearQueue">
|
<queue name="jms.queue.exampleQueue">
|
||||||
<address>jms.queue.aerogearQueue</address>
|
<address>jms.queue.exampleQueue</address>
|
||||||
</queue>
|
</queue>
|
||||||
</queues>
|
</queues>
|
||||||
|
|
||||||
|
@ -38,7 +29,7 @@
|
||||||
<connector-service name="aerogear-connector">
|
<connector-service name="aerogear-connector">
|
||||||
<factory-class>org.apache.activemq.integration.aerogear.AeroGearConnectorServiceFactory</factory-class>
|
<factory-class>org.apache.activemq.integration.aerogear.AeroGearConnectorServiceFactory</factory-class>
|
||||||
<param key="endpoint" value="${endpoint}"/>
|
<param key="endpoint" value="${endpoint}"/>
|
||||||
<param key="queue" value="jms.queue.aerogearQueue"/>
|
<param key="queue" value="jms.queue.exampleQueue"/>
|
||||||
<param key="application-id" value="${applicationid}"/>
|
<param key="application-id" value="${applicationid}"/>
|
||||||
<param key="master-secret" value="${mastersecret}"/>
|
<param key="master-secret" value="${mastersecret}"/>
|
||||||
</connector-service>
|
</connector-service>
|
||||||
|
@ -48,7 +39,7 @@
|
||||||
|
|
||||||
<security-settings>
|
<security-settings>
|
||||||
<!--security for example queue-->
|
<!--security for example queue-->
|
||||||
<security-setting match="jms.queue.aerogearQueue">
|
<security-setting match="jms.queue.exampleQueue">
|
||||||
<permission type="createDurableQueue" roles="guest"/>
|
<permission type="createDurableQueue" roles="guest"/>
|
||||||
<permission type="deleteDurableQueue" roles="guest"/>
|
<permission type="deleteDurableQueue" roles="guest"/>
|
||||||
<permission type="createNonDurableQueue" roles="guest"/>
|
<permission type="createNonDurableQueue" roles="guest"/>
|
|
@ -1,2 +1,3 @@
|
||||||
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
|
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
|
||||||
java.naming.provider.url=tcp://localhost:5445
|
java.naming.provider.url=tcp://localhost:5445
|
||||||
|
queue.queue/exampleQueue=exampleQueue
|
|
@ -40,7 +40,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -20,8 +20,8 @@ import java.net.InetSocketAddress;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
import org.apache.activemq.common.example.ActiveMQExample;
|
import org.apache.activemq.common.example.ActiveMQExample;
|
||||||
import org.jboss.netty.bootstrap.ServerBootstrap;
|
import io.netty.bootstrap.ServerBootstrap;
|
||||||
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
|
import io.netty.channel.socket.nio.NioServerSocketChannelFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A HttpServer
|
* A HttpServer
|
||||||
|
|
|
@ -22,24 +22,24 @@ import java.io.RandomAccessFile;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
|
|
||||||
import org.jboss.netty.buffer.ChannelBuffers;
|
import io.netty.buffer.ChannelBuffers;
|
||||||
import org.jboss.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import org.jboss.netty.channel.ChannelFuture;
|
import io.netty.channel.ChannelFuture;
|
||||||
import org.jboss.netty.channel.ChannelFutureListener;
|
import io.netty.channel.ChannelFutureListener;
|
||||||
import org.jboss.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import org.jboss.netty.channel.ChannelPipelineCoverage;
|
import io.netty.channel.ChannelPipelineCoverage;
|
||||||
import org.jboss.netty.channel.ExceptionEvent;
|
import io.netty.channel.ExceptionEvent;
|
||||||
import org.jboss.netty.channel.MessageEvent;
|
import io.netty.channel.MessageEvent;
|
||||||
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
|
import io.netty.channel.SimpleChannelUpstreamHandler;
|
||||||
import org.jboss.netty.handler.codec.frame.TooLongFrameException;
|
import io.netty.handler.codec.frame.TooLongFrameException;
|
||||||
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
|
import io.netty.handler.codec.http.DefaultHttpResponse;
|
||||||
import org.jboss.netty.handler.codec.http.HttpHeaders;
|
import io.netty.handler.codec.http.HttpHeaders;
|
||||||
import org.jboss.netty.handler.codec.http.HttpMethod;
|
import io.netty.handler.codec.http.HttpMethod;
|
||||||
import org.jboss.netty.handler.codec.http.HttpRequest;
|
import io.netty.handler.codec.http.HttpRequest;
|
||||||
import org.jboss.netty.handler.codec.http.HttpResponse;
|
import io.netty.handler.codec.http.HttpResponse;
|
||||||
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
|
import io.netty.handler.codec.http.HttpResponseStatus;
|
||||||
import org.jboss.netty.handler.codec.http.HttpVersion;
|
import io.netty.handler.codec.http.HttpVersion;
|
||||||
import org.jboss.netty.handler.stream.ChunkedFile;
|
import io.netty.handler.stream.ChunkedFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A HttpStaticFileServerHandler
|
* A HttpStaticFileServerHandler
|
||||||
|
|
|
@ -16,12 +16,12 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.jms.example;
|
package org.apache.activemq.jms.example;
|
||||||
|
|
||||||
import org.jboss.netty.channel.ChannelPipeline;
|
import io.netty.channel.ChannelPipeline;
|
||||||
import org.jboss.netty.channel.ChannelPipelineFactory;
|
import io.netty.channel.ChannelPipelineFactory;
|
||||||
import org.jboss.netty.channel.Channels;
|
import io.netty.channel.Channels;
|
||||||
import org.jboss.netty.handler.codec.http.HttpRequestDecoder;
|
import io.netty.handler.codec.http.HttpRequestDecoder;
|
||||||
import org.jboss.netty.handler.codec.http.HttpResponseEncoder;
|
import io.netty.handler.codec.http.HttpResponseEncoder;
|
||||||
import org.jboss.netty.handler.stream.ChunkedWriteHandler;
|
import io.netty.handler.stream.ChunkedWriteHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A HttpStaticFileServerPipelineFactory
|
* A HttpStaticFileServerPipelineFactory
|
||||||
|
|
|
@ -10,13 +10,6 @@
|
||||||
|
|
||||||
<paging-directory>${build.directory}/server0/data/messaging/paging</paging-directory>
|
<paging-directory>${build.directory}/server0/data/messaging/paging</paging-directory>
|
||||||
|
|
||||||
<!-- Connectors -->
|
|
||||||
<connectors>
|
|
||||||
<connector name="netty-connector">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
</connector>
|
|
||||||
</connectors>
|
|
||||||
|
|
||||||
<!-- Acceptors -->
|
<!-- Acceptors -->
|
||||||
<acceptors>
|
<acceptors>
|
||||||
<acceptor name="netty-acceptor">
|
<acceptor name="netty-acceptor">
|
|
@ -36,7 +36,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -45,10 +45,8 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1199</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
<jndiRmiPort>1198</jndiRmiPort>
|
<serverStartString>INFO: AMQ221001</serverStartString>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
|
||||||
<serverStartString>INFO: HQ221034</serverStartString>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -77,7 +75,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -86,7 +84,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
@ -129,7 +127,7 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<configuration>
|
<configuration>
|
||||||
<waitOnStart>false</waitOnStart>
|
<waitOnStart>false</waitOnStart>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.jms.example;
|
package org.apache.activemq.jms.example;
|
||||||
|
|
||||||
|
import java.lang.Object;
|
||||||
|
import java.lang.String;
|
||||||
|
import java.util.Hashtable;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@ -149,7 +152,11 @@ public class ApplicationLayerFailoverExample extends ActiveMQExample
|
||||||
private void createJMSObjects(final int server) throws Exception
|
private void createJMSObjects(final int server) throws Exception
|
||||||
{
|
{
|
||||||
// Step 1. Get an initial context for looking up JNDI from the server
|
// Step 1. Get an initial context for looking up JNDI from the server
|
||||||
initialContext = getContext(server);
|
Hashtable<String, Object> properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", "tcp://127.0.0.1:" + (5445 + server));
|
||||||
|
properties.put("queue.queue/exampleQueue", "exampleQueue");
|
||||||
|
initialContext = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 2. Look-up the JMS Queue object from JNDI
|
// Step 2. Look-up the JMS Queue object from JNDI
|
||||||
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
||||||
|
|
|
@ -2,16 +2,7 @@
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||||
|
|
||||||
<!-- Connectors -->
|
|
||||||
<connectors>
|
|
||||||
<connector name="netty-connector">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
<param key="port" value="5445"/>
|
|
||||||
</connector>
|
|
||||||
</connectors>
|
|
||||||
|
|
||||||
<!-- Acceptors -->
|
<!-- Acceptors -->
|
||||||
|
|
||||||
<acceptors>
|
<acceptors>
|
||||||
<acceptor name="netty-acceptor">
|
<acceptor name="netty-acceptor">
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
|
|
@ -3,15 +3,6 @@
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
xsi:schemaLocation="urn:activemq /schema/activemq-configuration.xsd">
|
||||||
|
|
||||||
<!-- Connectors -->
|
|
||||||
|
|
||||||
<connectors>
|
|
||||||
<connector name="netty-connector">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
<param key="port" value="5446"/>
|
|
||||||
</connector>
|
|
||||||
</connectors>
|
|
||||||
|
|
||||||
<!-- Acceptors -->
|
<!-- Acceptors -->
|
||||||
<acceptors>
|
<acceptors>
|
||||||
<acceptor name="netty-acceptor">
|
<acceptor name="netty-acceptor">
|
|
@ -41,7 +41,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1199</jndiPort>
|
<jndiPort>1199</jndiPort>
|
||||||
<jndiRmiPort>1198</jndiRmiPort>
|
<jndiRmiPort>1198</jndiRmiPort>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.jms.example;
|
package org.apache.activemq.jms.example;
|
||||||
|
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
import javax.jms.Connection;
|
import javax.jms.Connection;
|
||||||
import javax.jms.ConnectionFactory;
|
import javax.jms.ConnectionFactory;
|
||||||
import javax.jms.Message;
|
import javax.jms.Message;
|
||||||
|
@ -55,11 +57,15 @@ public class BridgeExample extends ActiveMQExample
|
||||||
{
|
{
|
||||||
// Step 1 - we create an initial context for looking up JNDI on node 0
|
// Step 1 - we create an initial context for looking up JNDI on node 0
|
||||||
|
|
||||||
ic0 = getContext(0);
|
Hashtable<String, Object> properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", "tcp://127.0.0.1:5445");
|
||||||
|
properties.put("queue.queue/sausage-factory", "sausage-factory");
|
||||||
|
ic0 = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 2 - we look up the sausage-factory queue from node 0
|
// Step 2 - we look up the sausage-factory queue from node 0
|
||||||
|
|
||||||
Queue sausageFactory = (Queue)ic0.lookup("queue/exampleQueue");
|
Queue sausageFactory = (Queue)ic0.lookup("queue/sausage-factory");
|
||||||
|
|
||||||
// Step 3 - we look up a JMS ConnectionFactory object from node 0
|
// Step 3 - we look up a JMS ConnectionFactory object from node 0
|
||||||
|
|
||||||
|
@ -67,11 +73,15 @@ public class BridgeExample extends ActiveMQExample
|
||||||
|
|
||||||
// Step 4 - we create an initial context for looking up JNDI on node 1
|
// Step 4 - we create an initial context for looking up JNDI on node 1
|
||||||
|
|
||||||
ic1 = getContext(1);
|
properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", "tcp://127.0.0.1:5446");
|
||||||
|
properties.put("queue.queue/mincing-machine", "mincing-machine");
|
||||||
|
ic1 = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 5 - we look up the mincing-machine queue on node 1
|
// Step 5 - we look up the mincing-machine queue on node 1
|
||||||
|
|
||||||
Queue mincingMachine = (Queue)ic1.lookup("queue/exampleQueue1");
|
Queue mincingMachine = (Queue)ic1.lookup("queue/mincing-machine");
|
||||||
|
|
||||||
// Step 6 - we look up a JMS ConnectionFactory object from node 1
|
// Step 6 - we look up a JMS ConnectionFactory object from node 1
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,6 @@
|
||||||
|
|
||||||
<!-- Connectors -->
|
<!-- Connectors -->
|
||||||
<connectors>
|
<connectors>
|
||||||
<connector name="netty-connector">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
<param key="port" value="5445"/>
|
|
||||||
</connector>
|
|
||||||
|
|
||||||
<!-- Connector to the other node -->
|
<!-- Connector to the other node -->
|
||||||
<connector name="remote-connector">
|
<connector name="remote-connector">
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
@ -10,15 +10,6 @@
|
||||||
|
|
||||||
<paging-directory>${build.directory}/server1/data/messaging/paging</paging-directory>
|
<paging-directory>${build.directory}/server1/data/messaging/paging</paging-directory>
|
||||||
|
|
||||||
<!-- Connectors -->
|
|
||||||
|
|
||||||
<connectors>
|
|
||||||
<connector name="netty-connector">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
<param key="port" value="5446"/>
|
|
||||||
</connector>
|
|
||||||
</connectors>
|
|
||||||
|
|
||||||
<!-- Acceptors -->
|
<!-- Acceptors -->
|
||||||
<acceptors>
|
<acceptors>
|
||||||
<acceptor name="netty-acceptor">
|
<acceptor name="netty-acceptor">
|
|
@ -94,7 +94,7 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<configuration>
|
<configuration>
|
||||||
<waitOnStart>false</waitOnStart>
|
<waitOnStart>false</waitOnStart>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class QueueBrowserExample extends ActiveMQExample
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Step 1. Create an initial context to perform the JNDI lookup.
|
// Step 1. Create an initial context to perform the JNDI lookup.
|
||||||
initialContext = getContext(0);
|
initialContext = new InitialContext();
|
||||||
|
|
||||||
// Step 2. Perfom a lookup on the queue
|
// Step 2. Perfom a lookup on the queue
|
||||||
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
||||||
|
|
|
@ -10,14 +10,6 @@
|
||||||
|
|
||||||
<paging-directory>${build.directory}/server0/data/messaging/paging</paging-directory>
|
<paging-directory>${build.directory}/server0/data/messaging/paging</paging-directory>
|
||||||
|
|
||||||
<!-- Connectors -->
|
|
||||||
|
|
||||||
<connectors>
|
|
||||||
<connector name="netty-connector">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
</connector>
|
|
||||||
</connectors>
|
|
||||||
|
|
||||||
<!-- Acceptors -->
|
<!-- Acceptors -->
|
||||||
<acceptors>
|
<acceptors>
|
||||||
<acceptor name="netty-acceptor">
|
<acceptor name="netty-acceptor">
|
|
@ -1,2 +1,3 @@
|
||||||
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
|
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
|
||||||
java.naming.provider.url=tcp://localhost:5445
|
java.naming.provider.url=tcp://localhost:5445
|
||||||
|
queue.queue/exampleQueue=exampleQueue
|
|
@ -125,7 +125,7 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<configuration>
|
<configuration>
|
||||||
<waitOnStart>false</waitOnStart>
|
<waitOnStart>false</waitOnStart>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class ClientKickoffExample extends ActiveMQExample
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Step 1. Create an initial context to perform the JNDI lookup.
|
// Step 1. Create an initial context to perform the JNDI lookup.
|
||||||
initialContext = getContext(0);
|
initialContext = new InitialContext();
|
||||||
|
|
||||||
// Step 2. Perform a lookup on the Connection Factory
|
// Step 2. Perform a lookup on the Connection Factory
|
||||||
QueueConnectionFactory cf = (QueueConnectionFactory)initialContext.lookup("ConnectionFactory");
|
QueueConnectionFactory cf = (QueueConnectionFactory)initialContext.lookup("ConnectionFactory");
|
||||||
|
|
|
@ -13,13 +13,6 @@
|
||||||
<!-- true to expose ActiveMQ resources through JMX -->
|
<!-- true to expose ActiveMQ resources through JMX -->
|
||||||
<jmx-management-enabled>true</jmx-management-enabled>
|
<jmx-management-enabled>true</jmx-management-enabled>
|
||||||
|
|
||||||
<!-- Connectors -->
|
|
||||||
<connectors>
|
|
||||||
<connector name="netty">
|
|
||||||
<factory-class>org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
|
|
||||||
</connector>
|
|
||||||
</connectors>
|
|
||||||
|
|
||||||
<!-- Acceptors -->
|
<!-- Acceptors -->
|
||||||
<acceptors>
|
<acceptors>
|
||||||
<acceptor name="netty">
|
<acceptor name="netty">
|
|
@ -36,7 +36,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
|
@ -55,9 +55,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1199</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
<jndiRmiPort>1198</jndiRmiPort>
|
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
|
@ -79,10 +77,6 @@
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<clientClass>org.apache.activemq.jms.example.ClientSideFailoverListerExample</clientClass>
|
<clientClass>org.apache.activemq.jms.example.ClientSideFailoverListerExample</clientClass>
|
||||||
<args>
|
|
||||||
<param>tcp://localhost:5445</param>
|
|
||||||
<param>tcp://localhost:5446</param>
|
|
||||||
</args>
|
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>exampleConfigDir</name>
|
<name>exampleConfigDir</name>
|
||||||
|
@ -97,7 +91,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -106,7 +100,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<p>This example demonstrates how you can listen on failover event on the client side.</p>
|
<p>This example demonstrates how you can listen on failover event on the client side.</p>
|
||||||
|
|
||||||
<p>In this example there are two nodes running in a cluster, both server will be running for start,
|
<p>In this example there are two nodes running in a cluster, both server will be running for start,
|
||||||
but after a while the first server will crash. This will trigger an fail oever event.</p>
|
but after a while the first server will crash. This will trigger an fail-over event.</p>
|
||||||
|
|
||||||
<h2>Example step-by-step</h2>
|
<h2>Example step-by-step</h2>
|
||||||
<p><em>To run the example, simply type <code>mvn verify</code> from this directory</em></p>
|
<p><em>To run the example, simply type <code>mvn verify</code> from this directory</em></p>
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class ClientSideFailoverListerExample extends ActiveMQExample
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Step 1. Get an initial context for looking up JNDI from server 0
|
// Step 1. Get an initial context for looking up JNDI from server 0
|
||||||
initialContext = getContext(0);
|
initialContext = new InitialContext();
|
||||||
|
|
||||||
// Step 2. Look-up the JMS Queue object from JNDI
|
// Step 2. Look-up the JMS Queue object from JNDI
|
||||||
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
|
||||||
|
java.naming.provider.url=tcp://localhost:5445
|
||||||
|
queue.queue/exampleQueue=exampleQueue
|
||||||
|
connection.ConnectionFactory.ha=true
|
||||||
|
connection.ConnectionFactory.retryInterval=1000
|
||||||
|
connection.ConnectionFactory.retryIntervalMultiplier=1.0
|
||||||
|
connection.ConnectionFactory.reconnectAttempts=-1
|
|
@ -36,16 +36,12 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
<value>${basedir}/target/</value>
|
<value>${basedir}/target/</value>
|
||||||
</property>
|
</property>
|
||||||
<property>
|
|
||||||
<name>udp-address</name>
|
|
||||||
<value>${udp-address}</value>
|
|
||||||
</property>
|
|
||||||
</systemProperties>
|
</systemProperties>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -55,9 +51,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1199</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
<jndiRmiPort>1198</jndiRmiPort>
|
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
|
@ -77,19 +71,13 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1299</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server2</configurationDir>
|
||||||
<jndiRmiPort>1298</jndiRmiPort>
|
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server2</hornetqConfigurationDir>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
<value>${basedir}/target/</value>
|
<value>${basedir}/target/</value>
|
||||||
</property>
|
</property>
|
||||||
<property>
|
|
||||||
<name>udp-address</name>
|
|
||||||
<value>${udp-address}</value>
|
|
||||||
</property>
|
|
||||||
</systemProperties>
|
</systemProperties>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -100,10 +88,6 @@
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<clientClass>org.apache.activemq.jms.example.ClientSideLoadBalancingExample</clientClass>
|
<clientClass>org.apache.activemq.jms.example.ClientSideLoadBalancingExample</clientClass>
|
||||||
<args>
|
|
||||||
<param>tcp://localhost:5445</param>
|
|
||||||
<param>tcp://localhost:5446</param>
|
|
||||||
</args>
|
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>exampleConfigDir</name>
|
<name>exampleConfigDir</name>
|
||||||
|
@ -118,7 +102,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -127,7 +111,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -136,7 +120,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server2</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server2</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class ClientSideLoadBalancingExample extends ActiveMQExample
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Step 1. Get an initial context for looking up JNDI from server 0
|
// Step 1. Get an initial context for looking up JNDI from server 0
|
||||||
initialContext = getContext(0);
|
initialContext = new InitialContext();
|
||||||
|
|
||||||
// Step 2. Look-up the JMS Queue object from JNDI
|
// Step 2. Look-up the JMS Queue object from JNDI
|
||||||
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
Queue queue = (Queue)initialContext.lookup("queue/exampleQueue");
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
|
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
|
||||||
java.naming.provider.url=tcp://localhost:5445
|
java.naming.provider.url=udp://231.7.7.7:9876
|
||||||
|
queue.queue/exampleQueue=exampleQueue
|
|
@ -36,16 +36,12 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
<value>${basedir}/target/</value>
|
<value>${basedir}/target/</value>
|
||||||
</property>
|
</property>
|
||||||
<property>
|
|
||||||
<name>udp-address</name>
|
|
||||||
<value>${udp-address}</value>
|
|
||||||
</property>
|
|
||||||
</systemProperties>
|
</systemProperties>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -55,19 +51,13 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1199</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
<jndiRmiPort>1198</jndiRmiPort>
|
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
<value>${basedir}/target/</value>
|
<value>${basedir}/target/</value>
|
||||||
</property>
|
</property>
|
||||||
<property>
|
|
||||||
<name>udp-address</name>
|
|
||||||
<value>${udp-address}</value>
|
|
||||||
</property>
|
|
||||||
</systemProperties>
|
</systemProperties>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -96,7 +86,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -105,7 +95,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.jms.example;
|
package org.apache.activemq.jms.example;
|
||||||
|
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
import javax.jms.Connection;
|
import javax.jms.Connection;
|
||||||
import javax.jms.ConnectionFactory;
|
import javax.jms.ConnectionFactory;
|
||||||
import javax.jms.MessageConsumer;
|
import javax.jms.MessageConsumer;
|
||||||
|
@ -56,7 +58,11 @@ public class ClusteredDurableSubscriptionExample extends ActiveMQExample
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Step 1. Get an initial context for looking up JNDI from server 0
|
// Step 1. Get an initial context for looking up JNDI from server 0
|
||||||
ic0 = getContext(0);
|
Hashtable<String, Object> properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", args[0]);
|
||||||
|
properties.put("topic.topic/exampleTopic", "exampleTopic");
|
||||||
|
ic0 = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 2. Look-up the JMS Topic object from JNDI
|
// Step 2. Look-up the JMS Topic object from JNDI
|
||||||
Topic topic = (Topic)ic0.lookup("topic/exampleTopic");
|
Topic topic = (Topic)ic0.lookup("topic/exampleTopic");
|
||||||
|
@ -65,7 +71,11 @@ public class ClusteredDurableSubscriptionExample extends ActiveMQExample
|
||||||
ConnectionFactory cf0 = (ConnectionFactory)ic0.lookup("ConnectionFactory");
|
ConnectionFactory cf0 = (ConnectionFactory)ic0.lookup("ConnectionFactory");
|
||||||
|
|
||||||
// Step 4. Get an initial context for looking up JNDI from server 1
|
// Step 4. Get an initial context for looking up JNDI from server 1
|
||||||
ic1 = getContext(1);
|
|
||||||
|
properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", args[1]);
|
||||||
|
ic1 = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 5. Look-up a JMS Connection Factory object from JNDI on server 1
|
// Step 5. Look-up a JMS Connection Factory object from JNDI on server 1
|
||||||
ConnectionFactory cf1 = (ConnectionFactory)ic1.lookup("ConnectionFactory");
|
ConnectionFactory cf1 = (ConnectionFactory)ic1.lookup("ConnectionFactory");
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
<name>build.directory</name>
|
<name>build.directory</name>
|
||||||
|
@ -55,9 +55,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1199</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
<jndiRmiPort>1198</jndiRmiPort>
|
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
|
@ -77,9 +75,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1299</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server2</configurationDir>
|
||||||
<jndiRmiPort>1298</jndiRmiPort>
|
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server2</hornetqConfigurationDir>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<property>
|
<property>
|
||||||
|
@ -119,7 +115,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -128,7 +124,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -137,7 +133,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server2</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server2</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.jms.example;
|
package org.apache.activemq.jms.example;
|
||||||
|
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
import javax.jms.Connection;
|
import javax.jms.Connection;
|
||||||
import javax.jms.ConnectionFactory;
|
import javax.jms.ConnectionFactory;
|
||||||
import javax.jms.MessageConsumer;
|
import javax.jms.MessageConsumer;
|
||||||
|
@ -58,7 +60,11 @@ public class ClusteredGroupingExample extends ActiveMQExample
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Step 1. Get an initial context for looking up JNDI from server 0
|
// Step 1. Get an initial context for looking up JNDI from server 0
|
||||||
ic0 = getContext(0);
|
Hashtable<String, Object> properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", args[0]);
|
||||||
|
properties.put("queue.queue/exampleQueue", "exampleQueue");
|
||||||
|
ic0 = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 2. Look-up the JMS Queue object from JNDI
|
// Step 2. Look-up the JMS Queue object from JNDI
|
||||||
Queue queue = (Queue)ic0.lookup("queue/exampleQueue");
|
Queue queue = (Queue)ic0.lookup("queue/exampleQueue");
|
||||||
|
@ -67,15 +73,21 @@ public class ClusteredGroupingExample extends ActiveMQExample
|
||||||
ConnectionFactory cf0 = (ConnectionFactory)ic0.lookup("ConnectionFactory");
|
ConnectionFactory cf0 = (ConnectionFactory)ic0.lookup("ConnectionFactory");
|
||||||
|
|
||||||
// Step 4. Get an initial context for looking up JNDI from server 1
|
// Step 4. Get an initial context for looking up JNDI from server 1
|
||||||
ic1 = getContext(1);
|
properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", args[1]);
|
||||||
|
ic1 = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 5. Look-up a JMS Connection Factory object from JNDI on server 1
|
// Step 5. Look-up a JMS Connection Factory object from JNDI on server 1
|
||||||
ConnectionFactory cf1 = (ConnectionFactory)ic1.lookup("ConnectionFactory");
|
ConnectionFactory cf1 = (ConnectionFactory)ic1.lookup("ConnectionFactory");
|
||||||
|
|
||||||
// Step 4. Get an initial context for looking up JNDI from server 1
|
// Step 4. Get an initial context for looking up JNDI from server 2
|
||||||
ic2 = getContext(2);
|
properties = new Hashtable<String, Object>();
|
||||||
|
properties.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
|
||||||
|
properties.put("java.naming.provider.url", args[2]);
|
||||||
|
ic2 = new InitialContext(properties);
|
||||||
|
|
||||||
// Step 5. Look-up a JMS Connection Factory object from JNDI on server 1
|
// Step 5. Look-up a JMS Connection Factory object from JNDI on server 2
|
||||||
ConnectionFactory cf2 = (ConnectionFactory)ic2.lookup("ConnectionFactory");
|
ConnectionFactory cf2 = (ConnectionFactory)ic2.lookup("ConnectionFactory");
|
||||||
|
|
||||||
// Step 6. We create a JMS Connection connection0 which is a connection to server 0
|
// Step 6. We create a JMS Connection connection0 which is a connection to server 0
|
||||||
|
@ -93,7 +105,7 @@ public class ClusteredGroupingExample extends ActiveMQExample
|
||||||
// Step 10. We create a JMS Session on server 1
|
// Step 10. We create a JMS Session on server 1
|
||||||
Session session1 = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
Session session1 = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
||||||
|
|
||||||
// Step 11. We create a JMS Session on server 1
|
// Step 11. We create a JMS Session on server 2
|
||||||
Session session2 = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
Session session2 = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
||||||
|
|
||||||
// Step 12. We start the connections to ensure delivery occurs on them
|
// Step 12. We start the connections to ensure delivery occurs on them
|
||||||
|
@ -200,5 +212,4 @@ public class ClusteredGroupingExample extends ActiveMQExample
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<!-- this is to make sure the example will run fine on any box.
|
<!-- this is to make sure the example will run fine on any box.
|
||||||
you may tweak this to any property you like. More information on the JGroups docs -->
|
you may tweak this to any property you like. More information on the JGroups docs -->
|
||||||
|
@ -53,9 +53,7 @@
|
||||||
<goal>start</goal>
|
<goal>start</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jndiPort>1199</jndiPort>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
<jndiRmiPort>1198</jndiRmiPort>
|
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
|
||||||
<fork>true</fork>
|
<fork>true</fork>
|
||||||
<systemProperties>
|
<systemProperties>
|
||||||
<!-- this is to make sure the example will run fine on any box.
|
<!-- this is to make sure the example will run fine on any box.
|
||||||
|
@ -86,7 +84,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server0</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server0</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -95,7 +93,7 @@
|
||||||
<goal>stop</goal>
|
<goal>stop</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<hornetqConfigurationDir>${basedir}/target/classes/activemq/server1</hornetqConfigurationDir>
|
<configurationDir>${basedir}/target/classes/activemq/server1</configurationDir>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue