You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2016/12/02 16:53:53 UTC

[1/2] camel git commit: Created a mechanism to configure Camel CDI via CDI event. Currently the only setting is to turn off automatic add of RouteBuilders to context.

Repository: camel
Updated Branches:
  refs/heads/master 82490dbe3 -> 5089ab27a


Created a mechanism to configure Camel CDI via CDI event. Currently the only setting is to turn off automatic add of RouteBuilders to context.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ca9035ba
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ca9035ba
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ca9035ba

Branch: refs/heads/master
Commit: ca9035ba607ef7aec9218368de2ceeb344752fd8
Parents: 0ee24c1
Author: Sverker Abrahamsson <sv...@limetransit.com>
Authored: Tue Nov 29 19:51:31 2016 +0100
Committer: Sverker Abrahamsson <sv...@limetransit.com>
Committed: Fri Dec 2 15:38:35 2016 +0100

----------------------------------------------------------------------
 .../apache/camel/cdi/CdiCamelConfiguration.java | 41 +++++++++++
 .../camel/cdi/CdiCamelConfigurationEvent.java   | 46 +++++++++++++
 .../org/apache/camel/cdi/CdiCamelExtension.java | 34 ++++++----
 .../cdi/test/CdiCamelConfigurationTest.java     | 71 ++++++++++++++++++++
 4 files changed, 179 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ca9035ba/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfiguration.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfiguration.java
new file mode 100644
index 0000000..4ea53c6
--- /dev/null
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfiguration.java
@@ -0,0 +1,41 @@
+/**
+ * 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;
+
+/**
+ * The Camel CDI configuration. Camel CDI fires a {@code CdiCamelConfiguration} event
+ * during the deployment phase that the application can observe and use to configure it.
+ *
+ * Note that the event fired can only be used within the observer method invocation context.
+ * Any attempt to call one of its methods outside of that context will result in an 
+ * `IllegalStateException` to be thrown.
+ */
+public interface CdiCamelConfiguration {
+
+    /**
+     * Overrides the Camel CDI behavior to automatically add all RouteBuilders to the corresponding Camel contexts.
+     *
+     * @return this Camel CDI configuration
+     * @throws IllegalStateException if called outside of the observer method invocation
+     */
+    CdiCamelConfiguration autoConfigureRoutes(boolean autoConfigureRoutes);
+
+    /**
+     * @return Current state of autoConfigureRoutes parameter.
+     */
+    boolean autoConfigureRoutes();
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ca9035ba/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfigurationEvent.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfigurationEvent.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfigurationEvent.java
new file mode 100644
index 0000000..bf96ea0
--- /dev/null
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelConfigurationEvent.java
@@ -0,0 +1,46 @@
+/**
+ * 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;
+
+/* package-private */ final class CdiCamelConfigurationEvent implements CdiCamelConfiguration {
+
+    private boolean autoConfigureRoutes = true;
+    private volatile boolean unmodifiable;
+
+    @Override
+    public CdiCamelConfiguration autoConfigureRoutes(boolean autoConfigureRoutes) {
+        throwsIfUnmodifiable();
+        this.autoConfigureRoutes = autoConfigureRoutes;
+        return this;
+    }
+
+    @Override
+    public boolean autoConfigureRoutes() {
+        return autoConfigureRoutes;
+    }
+
+    void unmodifiable() {
+        unmodifiable = true;
+    }
+
+    private void throwsIfUnmodifiable() {
+        if (unmodifiable) {
+            throw new IllegalStateException("Camel CDI configuration event must not be used outside "
+            + "its observer method!");
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ca9035ba/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index f4bb9bb..e525936 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -120,6 +120,8 @@ public class CdiCamelExtension implements Extension {
 
     private final Set<ImportResource> resources = newSetFromMap(new ConcurrentHashMap<>());
 
+    private final CdiCamelConfigurationEvent configuration = new CdiCamelConfigurationEvent();
+
     CdiEventEndpoint<?> getEventEndpoint(String uri) {
         return cdiEventEndpoints.get(uri);
     }
@@ -373,6 +375,10 @@ public class CdiCamelExtension implements Extension {
     }
 
     private void afterDeploymentValidation(@Observes AfterDeploymentValidation adv, BeanManager manager) {
+        // Send event for Camel CDI configuration
+        manager.fireEvent(configuration);
+        configuration.unmodifiable();
+
         Collection<CamelContext> contexts = new ArrayList<>();
         for (Bean<?> context : manager.getBeans(CamelContext.class, ANY)) {
             contexts.add(getReference(manager, CamelContext.class, context));
@@ -387,21 +393,23 @@ public class CdiCamelExtension implements Extension {
         }
 
         // Add routes to Camel contexts
-        boolean deploymentException = false;
-        Set<Bean<?>> routes = new HashSet<>(manager.getBeans(RoutesBuilder.class, ANY));
-        routes.addAll(manager.getBeans(RouteContainer.class, ANY));
-        for (Bean<?> context : manager.getBeans(CamelContext.class, ANY)) {
-            for (Bean<?> route : routes) {
-                Set<Annotation> qualifiers = new HashSet<>(context.getQualifiers());
-                qualifiers.retainAll(route.getQualifiers());
-                if (qualifiers.size() > 1) {
-                    deploymentException |= !addRouteToContext(route, context, manager, adv);
+        if (configuration.autoConfigureRoutes()) {
+            boolean deploymentException = false;
+            Set<Bean<?>> routes = new HashSet<>(manager.getBeans(RoutesBuilder.class, ANY));
+            routes.addAll(manager.getBeans(RouteContainer.class, ANY));
+            for (Bean<?> context : manager.getBeans(CamelContext.class, ANY)) {
+                for (Bean<?> route : routes) {
+                    Set<Annotation> qualifiers = new HashSet<>(context.getQualifiers());
+                    qualifiers.retainAll(route.getQualifiers());
+                    if (qualifiers.size() > 1) {
+                        deploymentException |= !addRouteToContext(route, context, manager, adv);
+                    }
                 }
             }
-        }
-        // Let's return to avoid starting misconfigured contexts
-        if (deploymentException) {
-            return;
+            // Let's return to avoid starting misconfigured contexts
+            if (deploymentException) {
+                return;
+            }
         }
 
         // Trigger eager beans instantiation (calling toString is necessary to force

http://git-wip-us.apache.org/repos/asf/camel/blob/ca9035ba/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java
new file mode 100644
index 0000000..b0e316a
--- /dev/null
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java
@@ -0,0 +1,71 @@
+/**
+ * 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.test;
+
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelConfiguration;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.bean.EndpointInjectRoute;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertTrue;
+
+@RunWith(Arquillian.class)
+public class CdiCamelConfigurationTest {
+    private static boolean configMethodHasBeenCalled;
+
+    @Inject
+    private CamelContext camelContext;
+
+    @Deployment
+    static Archive<?> createTestArchive() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(CdiCamelConfigurationTest.class)
+            // RouteBuilder which should not appear in the context
+            .addClass(EndpointInjectRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    static void configuration(@Observes CdiCamelConfiguration configuration) {
+        configMethodHasBeenCalled = true;
+        configuration.autoConfigureRoutes(false);
+    }
+
+    @Test
+    public void checkThatConfigMethodHasBeenCalled() {
+        assertTrue("Config method has not been called", configMethodHasBeenCalled);
+    }
+
+    @Test
+    public void checkThatNoRouteBuildersAddedToContext() {
+        assertTrue("There are RouteBuilder instances in context", camelContext.getRoutes().isEmpty());
+    }
+}
\ No newline at end of file


[2/2] camel git commit: Merge branch 'master' of https://github.com/sverkera/camel into sverkera-master

Posted by as...@apache.org.
Merge branch 'master' of https://github.com/sverkera/camel into sverkera-master


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5089ab27
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5089ab27
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5089ab27

Branch: refs/heads/master
Commit: 5089ab27a3cd26999b88e3b457451ea027e77afc
Parents: 82490db ca9035b
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Fri Dec 2 17:50:11 2016 +0100
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Fri Dec 2 17:50:11 2016 +0100

----------------------------------------------------------------------
 .../apache/camel/cdi/CdiCamelConfiguration.java | 41 +++++++++++
 .../camel/cdi/CdiCamelConfigurationEvent.java   | 46 +++++++++++++
 .../org/apache/camel/cdi/CdiCamelExtension.java | 34 ++++++----
 .../cdi/test/CdiCamelConfigurationTest.java     | 71 ++++++++++++++++++++
 4 files changed, 179 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5089ab27/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
----------------------------------------------------------------------