Hi Christian, Back from a trip on my way to home at the airport, I've just carefully read your attitude about this thread.
Thanks for sharing your clear statement! Babak > Am 15.12.2013 um 20:04 schrieb Christian Müller <christian.muel...@gmail.com>: > > To complete this thread, Claus reverted this commit on December 3rd. We are > fine here so far. > > Some people asked me privately about my opinion, and because we are in > Apache, I will share them here: > If Apache Camel is > - shipped/integrated with an official Apache Camel console or > - shipped/integrated with an external developed console which is > transparent for the user - e.g. via a seamless integration with an official > Apache Camel Maven goal (or Ant task, ...) > the content of the console MUST be under the control of this project. > This is required to prevent a community/vendor "lock in". Otherwise this > community/vendor COULD use this exclusivity to forward/link/advertise from > the console to only this community/vendor to the detriment of the Apache > Camel project and other offerings. > This is different to "just use a third party framework with an Apache > friendly license" to do x, y, z, ... > > This should be also the case for Apache ActiveMQ, Apache Karaf, Apache > ServiceMix, ... > > Best, > Christian > ----------------- > > Software Integration Specialist > > Apache Member > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer > Apache Incubator PMC Member > > https://www.linkedin.com/pub/christian-mueller/11/551/642 > > >> On Tue, Dec 3, 2013 at 4:43 PM, Daniel Kulp <dk...@apache.org> wrote: >> >> >> This “discussion” seems to have died down. There are 4 PMC members that >> support the veto with 3 specifically stating technical (and not political >> or social) grounds. Thus, this must be reverted until all of the >> technical issues are resolved. Claus: is that something you’ll have time >> to do shortly? >> >> Dan >> >> >>> On Nov 28, 2013, at 8:32 AM, Daniel Kulp <dk...@apache.org> wrote: >>> >>> >>> I’m -1 to this commit. I don’t think we should be adding a bunch of >> targets for all the various container/platform integrations. This starts >> going down the road of adding targets for karaf, glassfish, etc… We should >> just provide standard packaging that the hawtio:run command or whatever >> would pick up. (like tomcat:run, jetty:run, etc…) >>> >>> Dan >>> >>> >>>> On Nov 28, 2013, at 7:46 AM, davscl...@apache.org wrote: >>>> >>>> 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()); >>> >>> -- >>> Daniel Kulp >>> dk...@apache.org - http://dankulp.com/blog >>> Talend Community Coder - http://coders.talend.com >> >> -- >> Daniel Kulp >> dk...@apache.org - http://dankulp.com/blog >> Talend Community Coder - http://coders.talend.com >> >>