Updated Branches: refs/heads/camel-2.12.x 628b34c0d -> ae5a770e0
CAMEL-7023: Added hawtio goal to camel maven plugin. Conflicts: parent/pom.xml Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ae5a770e Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ae5a770e Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ae5a770e Branch: refs/heads/camel-2.12.x Commit: ae5a770e01a1a2512412be97e62b18cb7578d640 Parents: 628b34c Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Nov 28 13:47:25 2013 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Nov 28 13:48:16 2013 +0100 ---------------------------------------------------------------------- parent/pom.xml | 1 + tooling/maven/camel-maven-plugin/pom.xml | 7 +++ .../java/org/apache/camel/maven/HawtioMojo.java | 58 ++++++++++++++++++++ .../java/org/apache/camel/maven/RunMojo.java | 21 +++++-- 4 files changed, 83 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/ae5a770e/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 95f2a9e..d3229bc 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -173,6 +173,7 @@ <hawtbuf-version>1.9</hawtbuf-version> <hawtdb-version>1.6</hawtdb-version> <hawtdispatch-version>1.18</hawtdispatch-version> + <hawtio-version>1.2.0</hawtio-version> <hazelcast-version>2.6</hazelcast-version> <hbase-version>0.94.10</hbase-version> <hbase-bundle-version>0.94.6_1</hbase-bundle-version> http://git-wip-us.apache.org/repos/asf/camel/blob/ae5a770e/tooling/maven/camel-maven-plugin/pom.xml ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-maven-plugin/pom.xml b/tooling/maven/camel-maven-plugin/pom.xml index 160b8ab..940ab77 100644 --- a/tooling/maven/camel-maven-plugin/pom.xml +++ b/tooling/maven/camel-maven-plugin/pom.xml @@ -53,6 +53,13 @@ <artifactId>camel-cdi</artifactId> </dependency> + <!--for the hawtio goal --> + <dependency> + <groupId>io.hawt</groupId> + <artifactId>hawtio-app</artifactId> + <version>${hawtio-version}</version> + </dependency> + <dependency> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> http://git-wip-us.apache.org/repos/asf/camel/blob/ae5a770e/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/HawtioMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/HawtioMojo.java b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/HawtioMojo.java new file mode 100644 index 0000000..1c8f697 --- /dev/null +++ b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/HawtioMojo.java @@ -0,0 +1,58 @@ +/** + * 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.camel.maven; + +import java.lang.reflect.Method; + +/** + * Runs a CamelContext using any Spring or Blueprint XML configuration files found in + * <code>META-INF/spring/*.xml</code>, and <code>OSGI-INF/blueprint/*.xml</code>, + * and <code>camel-*.xml</code> and starting up the context together with + * <a href="http://hawt.io/">hawtio</a> as web console. + * + * @goal hawtio + * @requiresDependencyResolution compile+runtime + * @execute phase="test-compile" + */ +public class HawtioMojo extends RunMojo { + + /** + * The port number to use for the hawtio web console. + * + * @parameter property="camel.port" + * default-value="8080" + */ + private int port = 8080; + + public HawtioMojo() { + extendedPluginDependencyArtifactId = "hawtio-app"; + } + + @Override + void beforeBootstrapCamel() throws Exception { + getLog().info("Starting hawtio ..."); + Method hawtioMain = Thread.currentThread().getContextClassLoader().loadClass("io.hawt.app.App") + .getMethod("main", new Class[] {String[].class}); + if (!hawtioMain.isAccessible()) { + getLog().debug("Setting accessibility to true in order to invoke main()."); + hawtioMain.setAccessible(true); + } + String[] args = new String[]{"--port", "" + port, "--join", "false"}; + hawtioMain.invoke(hawtioMain, new Object[]{args}); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/ae5a770e/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java index 6f3921d..510333b6 100644 --- a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java +++ b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java @@ -369,6 +369,7 @@ public class RunMojo extends AbstractExecMojo { private Properties originalSystemProperties; private String extraPluginDependencyArtifactId; + protected String extendedPluginDependencyArtifactId; /** * Execute goal. @@ -455,7 +456,7 @@ public class RunMojo extends AbstractExecMojo { getLog().info("Using org.apache.camel.spring.Main to initiate a CamelContext"); mainClass = "org.apache.camel.spring.Main"; } - + arguments = new String[args.size()]; args.toArray(arguments); @@ -474,9 +475,12 @@ public class RunMojo extends AbstractExecMojo { } IsolatedThreadGroup threadGroup = new IsolatedThreadGroup(mainClass /* name */); - Thread bootstrapThread = new Thread(threadGroup, new Runnable() { + final Thread bootstrapThread = new Thread(threadGroup, new Runnable() { public void run() { try { + beforeBootstrapCamel(); + + getLog().info("Starting Camel ..."); Method main = Thread.currentThread().getContextClassLoader().loadClass(mainClass) .getMethod("main", new Class[] {String[].class}); if (!main.isAccessible()) { @@ -494,6 +498,7 @@ public class RunMojo extends AbstractExecMojo { } } }, mainClass + ".main()"); + bootstrapThread.setContextClassLoader(getClassLoader()); setSystemProperties(); @@ -532,6 +537,13 @@ public class RunMojo extends AbstractExecMojo { registerSourceRoots(); } + /** + * Allows plugin extensions to do custom logic before bootstrapping Camel. + */ + void beforeBootstrapCamel() throws Exception { + // noop + } + class IsolatedThreadGroup extends ThreadGroup { Throwable uncaughtException; // synchronize access to this @@ -743,7 +755,7 @@ public class RunMojo extends AbstractExecMojo { * @throws MojoExecutionException */ private void addExtraPluginDependenciesToClasspath(Set<URL> path) throws MojoExecutionException { - if (extraPluginDependencyArtifactId == null) { + if (extraPluginDependencyArtifactId == null && extendedPluginDependencyArtifactId == null) { return; } @@ -751,7 +763,8 @@ public class RunMojo extends AbstractExecMojo { Set<Artifact> artifacts = new HashSet<Artifact>(this.pluginDependencies); for (Artifact artifact : artifacts) { // must - if (artifact.getArtifactId().equals(extraPluginDependencyArtifactId)) { + if (artifact.getArtifactId().equals(extraPluginDependencyArtifactId) + || artifact.getArtifactId().equals(extendedPluginDependencyArtifactId)) { getLog().debug("Adding extra plugin dependency artifact: " + artifact.getArtifactId() + " to classpath"); path.add(artifact.getFile().toURI().toURL());