Author: jstrachan
Date: Tue Sep  4 11:36:36 2012
New Revision: 1380570

URL: http://svn.apache.org/viewvc?rev=1380570&view=rev
Log:
initial spike of CAMEL-5560 to add CDI support to camel:run

Added:
    
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java   
(with props)
Modified:
    camel/trunk/components/camel-cdi/pom.xml
    camel/trunk/examples/camel-example-cdi/pom.xml
    
camel/trunk/examples/camel-example-cdi/src/main/java/org/apache/camel/example/cdi/MyRouteConfig.java
    
camel/trunk/examples/camel-example-cdi/src/test/java/org/apache/camel/example/cdi/IntegrationTest.java
    camel/trunk/parent/pom.xml
    camel/trunk/tooling/maven/camel-maven-plugin/pom.xml
    
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java

Modified: camel/trunk/components/camel-cdi/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/pom.xml?rev=1380570&r1=1380569&r2=1380570&view=diff
==============================================================================
--- camel/trunk/components/camel-cdi/pom.xml (original)
+++ camel/trunk/components/camel-cdi/pom.xml Tue Sep  4 11:36:36 2012
@@ -34,10 +34,6 @@
 
     <properties>
         
<camel.osgi.export.pkg>org.apache.camel.component.cdi.*</camel.osgi.export.pkg>
-        <deltaspike-version>0.3-incubating</deltaspike-version>
-        <!-- these properties should be in-sync with deltaspike -->
-        <owb-version>1.1.5</owb-version>
-        <weld-version>1.1.5.Final</weld-version>
         <camel.osgi.import>
             !org.apache.camel.component.cdi.*,
             org.apache.deltaspike.core.api.*;resolution:=optional,
@@ -69,6 +65,13 @@
             <version>${deltaspike-version}</version>
         </dependency>
 
+        <!-- only required for the Main -->
+        <dependency>
+            <groupId>org.apache.deltaspike.cdictrl</groupId>
+            <artifactId>deltaspike-cdictrl-api</artifactId>
+            <version>${deltaspike-version}</version>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
             <artifactId>geronimo-atinject_1.0_spec</artifactId>
@@ -97,12 +100,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.deltaspike.cdictrl</groupId>
-            <artifactId>deltaspike-cdictrl-api</artifactId>
-            <version>${deltaspike-version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jul-to-slf4j</artifactId>
             <version>${slf4j-version}</version>
@@ -139,13 +136,13 @@
                 <dependency>
                     <groupId>org.apache.openwebbeans</groupId>
                     <artifactId>openwebbeans-impl</artifactId>
-                    <version>${owb-version}</version>
+                    <version>${openwebbeans-version}</version>
                     <scope>test</scope>
                 </dependency>
                 <dependency>
                     <groupId>org.apache.openwebbeans</groupId>
                     <artifactId>openwebbeans-spi</artifactId>
-                    <version>${owb-version}</version>
+                    <version>${openwebbeans-version}</version>
                     <scope>test</scope>
                 </dependency>
             </dependencies>

Added: 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java?rev=1380570&view=auto
==============================================================================
--- 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java 
(added)
+++ 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java 
Tue Sep  4 11:36:36 2012
@@ -0,0 +1,137 @@
+/**
+ *
+ * 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.cdi;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.main.MainSupport;
+import org.apache.camel.view.ModelFileGenerator;
+import org.apache.deltaspike.cdise.api.CdiContainer;
+import org.apache.deltaspike.cdise.api.CdiContainerLoader;
+import org.apache.deltaspike.core.api.provider.BeanProvider;
+
+/**
+ * Allows Camel and CDI applications to be booted up on the command line as a 
Java Application
+ */
+public class Main extends MainSupport {
+    private static Main instance;
+    private JAXBContext jaxbContext;
+    private CdiContainer cdiContainer;
+
+    public static void main(String... args) throws Exception {
+        Main main = new Main();
+        instance = main;
+        main.enableHangupSupport();
+        main.run(args);
+    }
+
+    /**
+     * Returns the currently executing main
+     *
+     * @return the current running instance
+     */
+    public static Main getInstance() {
+        return instance;
+    }
+
+    public Main() {
+        // add options...
+    }
+
+    @Override
+    protected ProducerTemplate findOrCreateCamelTemplate() {
+        ProducerTemplate answer = 
BeanProvider.getContextualReference(ProducerTemplate.class, true);
+        if (answer != null) {
+            return answer;
+        }
+        if (getCamelContexts().isEmpty()) {
+            throw new IllegalArgumentException(
+                    "No CamelContexts are available so cannot create a 
ProducerTemplate!");
+        }
+        return getCamelContexts().get(0).createProducerTemplate();
+    }
+
+    @Override
+    protected Map<String, CamelContext> getCamelContextMap() {
+        List<CamelContext> contexts = 
BeanProvider.getContextualReferences(CamelContext.class, true);
+        Map<String, CamelContext> answer = new HashMap<String, CamelContext>();
+        for (CamelContext context : contexts) {
+            String name = context.getName();
+            answer.put(name, context);
+        }
+        return answer;
+    }
+
+    @Override
+    protected ModelFileGenerator createModelFileGenerator() throws 
JAXBException {
+        return new ModelFileGenerator(getJaxbContext());
+    }
+
+    public JAXBContext getJaxbContext() throws JAXBException {
+        if (jaxbContext == null) {
+            jaxbContext = createJaxbContext();
+        }
+        return jaxbContext;
+    }
+
+    protected JAXBContext createJaxbContext() throws JAXBException {
+        StringBuilder packages = new StringBuilder();
+        for (Class<?> cl : getJaxbPackages()) {
+            if (packages.length() > 0) {
+                packages.append(":");
+            }
+            packages.append(cl.getPackage().getName());
+        }
+        return JAXBContext.newInstance(packages.toString(), 
getClass().getClassLoader());
+    }
+
+    protected Set<Class<?>> getJaxbPackages() {
+        Set<Class<?>> classes = new HashSet<Class<?>>();
+        //classes.add(CamelContextFactoryBean.class);
+        //classes.add(AbstractCamelContextFactoryBean.class);
+        classes.add(org.apache.camel.ExchangePattern.class);
+        classes.add(org.apache.camel.model.RouteDefinition.class);
+        
classes.add(org.apache.camel.model.config.StreamResequencerConfig.class);
+        
classes.add(org.apache.camel.model.dataformat.DataFormatsDefinition.class);
+        
classes.add(org.apache.camel.model.language.ExpressionDefinition.class);
+        
classes.add(org.apache.camel.model.loadbalancer.RoundRobinLoadBalancerDefinition.class);
+        //classes.add(SSLContextParametersFactoryBean.class);
+        return classes;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        cdiContainer = CdiContainerLoader.getCdiContainer();
+        cdiContainer.boot();
+        super.doStart();
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        super.doStop();
+        cdiContainer.shutdown();
+    }
+}

Propchange: 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: camel/trunk/examples/camel-example-cdi/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-cdi/pom.xml?rev=1380570&r1=1380569&r2=1380570&view=diff
==============================================================================
--- camel/trunk/examples/camel-example-cdi/pom.xml (original)
+++ camel/trunk/examples/camel-example-cdi/pom.xml Tue Sep  4 11:36:36 2012
@@ -93,8 +93,24 @@
                 <artifactId>camel-maven-plugin</artifactId>
                 <version>${project.version}</version>
                 <configuration>
-                    <duration>5s</duration>
+                  <useCDI>true</useCDI>
+<!--
+                  <duration>5s</duration>
+-->
                 </configuration>
+                <dependencies>
+                  <!-- lets use deltaspike & weld -->
+                  <dependency>
+                      <groupId>org.apache.deltaspike.cdictrl</groupId>
+                      <artifactId>deltaspike-cdictrl-weld</artifactId>
+                      <version>${deltaspike-version}</version>
+                  </dependency>
+                  <dependency>
+                      <groupId>org.jboss.weld.se</groupId>
+                      <artifactId>weld-se-core</artifactId>
+                      <version>${weld-version}</version>
+                  </dependency>
+                </dependencies>
             </plugin>
         </plugins>
     </build>

Modified: 
camel/trunk/examples/camel-example-cdi/src/main/java/org/apache/camel/example/cdi/MyRouteConfig.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-cdi/src/main/java/org/apache/camel/example/cdi/MyRouteConfig.java?rev=1380570&r1=1380569&r2=1380570&view=diff
==============================================================================
--- 
camel/trunk/examples/camel-example-cdi/src/main/java/org/apache/camel/example/cdi/MyRouteConfig.java
 (original)
+++ 
camel/trunk/examples/camel-example-cdi/src/main/java/org/apache/camel/example/cdi/MyRouteConfig.java
 Tue Sep  4 11:36:36 2012
@@ -18,6 +18,8 @@
 package org.apache.camel.example.cdi;
 
 import javax.annotation.PostConstruct;
+import javax.ejb.Startup;
+import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.inject.Produces;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -31,19 +33,21 @@ import org.apache.camel.cdi.Uri;
 /**
  * Configures all our Camel components, endpoints and beans and create the 
Camel routes
  */
+@Startup
+@ApplicationScoped
 public class MyRouteConfig {
 
     @Inject
-    public CamelContext camelContext;
+    private CamelContext camelContext;
 
     @Inject
     //@Uri("activemq:test.MyQueue")
     @Uri("file://target/testdata/queue")
-    public Endpoint queueEndpoint;
+    private Endpoint queueEndpoint;
 
     @Inject
     @Uri("file://target/testdata/result?noop=true")
-    public Endpoint resultEndpoint;
+    private Endpoint resultEndpoint;
 
     @Produces
     public RouteBuilder createRoutes() {
@@ -78,6 +82,11 @@ public class MyRouteConfig {
      */
     @PostConstruct
     public void start() throws Exception {
+        System.out.println("======= Starting MyRouteConfig!!");
         camelContext.addRoutes(createRoutes());
     }
+
+    public Endpoint getResultEndpoint() {
+        return resultEndpoint;
+    }
 }

Modified: 
camel/trunk/examples/camel-example-cdi/src/test/java/org/apache/camel/example/cdi/IntegrationTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-cdi/src/test/java/org/apache/camel/example/cdi/IntegrationTest.java?rev=1380570&r1=1380569&r2=1380570&view=diff
==============================================================================
--- 
camel/trunk/examples/camel-example-cdi/src/test/java/org/apache/camel/example/cdi/IntegrationTest.java
 (original)
+++ 
camel/trunk/examples/camel-example-cdi/src/test/java/org/apache/camel/example/cdi/IntegrationTest.java
 Tue Sep  4 11:36:36 2012
@@ -54,7 +54,7 @@ public class IntegrationTest {
     public RouteBuilder createRoutes() {
         return new RouteBuilder() {
             public void configure() {
-                from(config.resultEndpoint).to(result);
+                from(config.getResultEndpoint()).to(result);
             }
         };
     }

Modified: camel/trunk/parent/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/parent/pom.xml?rev=1380570&r1=1380569&r2=1380570&view=diff
==============================================================================
--- camel/trunk/parent/pom.xml (original)
+++ camel/trunk/parent/pom.xml Tue Sep  4 11:36:36 2012
@@ -68,6 +68,7 @@
     <cxf-version>2.6.2</cxf-version>
     <cxf-version-range>[2.4,2.8)</cxf-version-range>
     <cxf-xjc-utils-version>2.6.0</cxf-xjc-utils-version>
+    <deltaspike-version>0.3-incubating</deltaspike-version>
     <derby-version>10.9.1.0</derby-version>
     <dnsjava-version>2.1.1</dnsjava-version>
     <dozer-version>5.3.2</dozer-version>
@@ -151,6 +152,7 @@
     <netty-bundle-version>3.2.7.Final_1</netty-bundle-version>
     <netty-version>3.5.5.Final</netty-version>
     <ode-version>1.3.4</ode-version>
+    <!-- should be in-sync with deltaspike -->
     <openwebbeans-version>1.1.5</openwebbeans-version>
     <ognl-version>3.0.5_1</ognl-version>
     <osgi-version>4.2.0</osgi-version>
@@ -197,6 +199,8 @@
     <twitter4j-version>2.2.5</twitter4j-version>
     <velocity-version>1.7</velocity-version>
     <vysper-version>0.7</vysper-version>
+    <!-- should be in-sync with deltaspike -->
+    <weld-version>1.1.5.Final</weld-version>
     <woodstox-version>4.1.4</woodstox-version>
     <xbean-spring-version>3.11.1</xbean-spring-version>
     <xml-resolver-version>1.2</xml-resolver-version>

Modified: camel/trunk/tooling/maven/camel-maven-plugin/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/tooling/maven/camel-maven-plugin/pom.xml?rev=1380570&r1=1380569&r2=1380570&view=diff
==============================================================================
--- camel/trunk/tooling/maven/camel-maven-plugin/pom.xml (original)
+++ camel/trunk/tooling/maven/camel-maven-plugin/pom.xml Tue Sep  4 11:36:36 
2012
@@ -48,6 +48,12 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-test-blueprint</artifactId>
     </dependency>
+    <!-- camel-cdi has Main class for running CDI -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-cdi</artifactId>
+    </dependency>
+
     <dependency>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>exec-maven-plugin</artifactId>

Modified: 
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java?rev=1380570&r1=1380569&r2=1380570&view=diff
==============================================================================
--- 
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java
 (original)
+++ 
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java
 Tue Sep  4 11:36:36 2012
@@ -122,6 +122,14 @@ public class RunMojo extends AbstractExe
     protected boolean useBlueprint;
 
     /**
+     * Whether to use CDI when running, instead of Spring
+     *
+     * @parameter expression="${camel.cdi}"
+     *            default-value="false"
+     */
+    protected boolean useCDI;
+
+    /**
      * @component
      */
     private ArtifactResolver artifactResolver;
@@ -350,6 +358,7 @@ public class RunMojo extends AbstractExe
      */
     public void execute() throws MojoExecutionException, MojoFailureException {
         boolean usingSpringJavaConfigureMain = false;
+        boolean useCdiMain = useCDI;
         boolean usingBlueprintMain = useBlueprint;
         if (killAfter != -1) {
             getLog().warn("Warning: killAfter is now deprecated. Do you need 
it ? Please comment on MEXEC-6.");
@@ -400,6 +409,11 @@ public class RunMojo extends AbstractExe
         if (usingSpringJavaConfigureMain) {
             mainClass = "org.apache.camel.spring.javaconfig.Main";
             getLog().info("Using org.apache.camel.spring.javaconfig.Main to 
initiate a CamelContext");
+        } else if (useCdiMain) {
+            mainClass = "org.apache.camel.cdi.Main";
+            // must include plugin dependencies for blueprint
+            includePluginDependencies = true;
+            getLog().info("Using " + mainClass + " to initiate a 
CamelContext");
         } else if (usingBlueprintMain) {
             mainClass = "org.apache.camel.test.blueprint.Main";
             // must include plugin dependencies for blueprint


Reply via email to