mirror of https://github.com/apache/activemq.git
Updated the maven-activemq-plugin
https://issues.apache.org/activemq/browse/AMQ-1223 https://issues.apache.org/activemq/browse/AMQ-1224 https://issues.apache.org/activemq/browse/AMQ-1222 Thanks for the patches and comments Tim! git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@547575 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
78761dde4e
commit
dca58fa68c
|
@ -33,35 +33,24 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-plugin-api</artifactId>
|
||||
<version>2.0</version>
|
||||
<version>2.0.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-project</artifactId>
|
||||
<version>2.0.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.activemq</groupId>
|
||||
<artifactId>activemq-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.activemq</groupId>
|
||||
<artifactId>activemq-console</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.activemq</groupId>
|
||||
<artifactId>activeio-core</artifactId>
|
||||
<groupId>org.apache.xbean</groupId>
|
||||
<artifactId>xbean-spring</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.derby</groupId>
|
||||
<artifactId>derby</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.derby</groupId>
|
||||
<artifactId>derbynet</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jms_1.1_spec</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -17,101 +17,122 @@ package org.apache.activemq.maven;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.activemq.console.Main;
|
||||
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;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.MappedByteBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Goal which starts activemq broker.
|
||||
* Goal which starts an activemq broker.
|
||||
*
|
||||
* @goal run
|
||||
* @phase process-sources
|
||||
*/
|
||||
public class BrokerMojo
|
||||
extends AbstractMojo {
|
||||
public class BrokerMojo extends AbstractMojo {
|
||||
/**
|
||||
* Location of the output directory. Defaults to target.
|
||||
* The maven project.
|
||||
*
|
||||
* @parameter expression="${project.build.directory}"
|
||||
* @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 File outputDirectory;
|
||||
private String configUri;
|
||||
|
||||
/**
|
||||
* Location of activemq xml config file.
|
||||
* Indicates whether to fork the broker, useful for integration tests.
|
||||
*
|
||||
* @parameter expression="${configFile}"
|
||||
* @parameter expression="${fork}" default-value="false"
|
||||
*/
|
||||
private File configFile;
|
||||
private boolean fork;
|
||||
|
||||
/**
|
||||
* Broker URL.
|
||||
*
|
||||
* @parameter expression="${url}" default-value="broker:(tcp://localhost:61616)?useJmx=false"
|
||||
* System properties to add
|
||||
* @parameter expression="${systemProperties}"
|
||||
*/
|
||||
private String url;
|
||||
private Properties systemProperties;
|
||||
|
||||
public void execute()
|
||||
throws MojoExecutionException {
|
||||
|
||||
File out = outputDirectory;
|
||||
|
||||
// Create output directory if it doesn't exist.
|
||||
if (!out.exists()) {
|
||||
out.mkdirs();
|
||||
}
|
||||
|
||||
String[] args = new String[2];
|
||||
if (configFile != null) {
|
||||
File config;
|
||||
public void execute() throws MojoExecutionException {
|
||||
try {
|
||||
config = copy(configFile);
|
||||
} catch (IOException e) {
|
||||
throw new MojoExecutionException(e.getMessage());
|
||||
}
|
||||
setSystemProperties();
|
||||
getLog().info("Loading broker configUri: " + configUri);
|
||||
|
||||
args[0] = "start";
|
||||
args[1] = "xbean:" + (config.toURI()).toString();
|
||||
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 {
|
||||
args[0] = "start";
|
||||
args[1] = url;
|
||||
broker.start();
|
||||
waitForShutdown(broker);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new MojoExecutionException("Failed to start ActiveMQ Broker", e);
|
||||
}
|
||||
|
||||
Main.main(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy activemq configuration file to output directory.
|
||||
*
|
||||
* @param source
|
||||
* @return
|
||||
* @throws java.io.IOException
|
||||
* Wait for a shutdown invocation elsewhere
|
||||
* @throws Exception
|
||||
*/
|
||||
public File copy(File source) throws IOException {
|
||||
FileChannel in = null, out = null;
|
||||
File dest = new File(outputDirectory.getAbsolutePath() + File.separator + source.getName());
|
||||
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 {
|
||||
in = new FileInputStream(source).getChannel();
|
||||
out = new FileOutputStream(dest).getChannel();
|
||||
|
||||
long size = in.size();
|
||||
MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
|
||||
|
||||
out.write(buf);
|
||||
|
||||
} finally {
|
||||
if (in != null) in.close();
|
||||
if (out != null) out.close();
|
||||
shutdown.wait();
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return dest;
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue