blob: 574e07d11b89da4f8f4962a5ccfa9b2d87cdddf6 [file] [log] [blame]
/**
* 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;
/**
* 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.
*/
import java.util.Properties;
import org.apache.activemq.broker.BrokerFactory;
import org.apache.activemq.broker.BrokerService;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
/**
* Goal which starts an activemq broker.
*
* @goal run
* @phase process-sources
*/
public class BrokerMojo extends AbstractMojo {
/**
* The maven project.
*
* @parameter expression="${project}"
* @required
* @readonly
*/
protected MavenProject project;
/**
* The broker configuration uri The list of currently supported URI syntaxes
* is described <a
* href="http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html">here</a>
*
* @parameter expression="${configUri}"
* default-value="broker:(tcp://localhost:61616)?useJmx=false&persistent=false"
* @required
*/
private String configUri;
/**
* Indicates whether to fork the broker, useful for integration tests.
*
* @parameter expression="${fork}" default-value="false"
*/
private boolean fork;
/**
* System properties to add
*
* @parameter expression="${systemProperties}"
*/
private Properties systemProperties;
public void execute() throws MojoExecutionException {
try {
setSystemProperties();
getLog().info("Loading broker configUri: " + configUri);
final BrokerService broker = BrokerFactory.createBroker(configUri);
if (fork) {
new Thread(new Runnable() {
public void run() {
try {
broker.start();
waitForShutdown(broker);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} else {
broker.start();
waitForShutdown(broker);
}
} catch (Exception e) {
throw new MojoExecutionException("Failed to start ActiveMQ Broker", e);
}
}
/**
* Wait for a shutdown invocation elsewhere
*
* @throws Exception
*/
protected void waitForShutdown(BrokerService broker) throws Exception {
final boolean[] shutdown = new boolean[] {
false
};
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
synchronized (shutdown) {
shutdown[0] = true;
shutdown.notify();
}
}
});
// Wait for any shutdown event
synchronized (shutdown) {
while (!shutdown[0]) {
try {
shutdown.wait();
} catch (InterruptedException e) {
}
}
}
// Stop broker
broker.stop();
}
/**
* Set system properties
*/
protected void setSystemProperties() {
// Set the default properties
System.setProperty("activemq.base", project.getBuild().getDirectory() + "/");
System.setProperty("activemq.home", project.getBuild().getDirectory() + "/");
System.setProperty("org.apache.activemq.UseDedicatedTaskRunner", "true");
System.setProperty("org.apache.activemq.default.directory.prefix", project.getBuild().getDirectory() + "/");
System.setProperty("derby.system.home", project.getBuild().getDirectory() + "/");
System.setProperty("derby.storage.fileSyncTransactionLog", "true");
// Overwrite any custom properties
System.getProperties().putAll(systemProperties);
}
}