You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2019/12/13 16:24:39 UTC
[camel-quarkus] branch master updated: Ensure RoutesBuilder
instances created by a CDI Producder are not removed
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push:
new 7d3f384 Ensure RoutesBuilder instances created by a CDI Producder are not removed
7d3f384 is described below
commit 7d3f3847e72161816916b80b197ae494b69b5551
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Fri Dec 13 11:58:44 2019 +0100
Ensure RoutesBuilder instances created by a CDI Producder are not removed
---
.../quarkus/core/deployment/BuildProcessor.java | 62 +++++++++++-----------
.../quarkus/core/runtime/CamelRegistryTest.java | 19 ++++++-
.../camel/quarkus/core/CamelRouteProducer.java | 39 ++++++++++++++
.../org/apache/camel/quarkus/core/CamelTest.java | 2 +-
4 files changed, 89 insertions(+), 33 deletions(-)
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
index fac317e..a3933df 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
@@ -26,25 +26,6 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
-import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
-import io.quarkus.arc.deployment.BeanContainerBuildItem;
-import io.quarkus.arc.deployment.BeanRegistrationPhaseBuildItem;
-import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
-import io.quarkus.arc.deployment.UnremovableBeanBuildItem.BeanClassNamesExclusion;
-import io.quarkus.arc.processor.BuildExtension;
-import io.quarkus.deployment.ApplicationArchive;
-import io.quarkus.deployment.Capabilities;
-import io.quarkus.deployment.annotations.BuildProducer;
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.annotations.ExecutionTime;
-import io.quarkus.deployment.annotations.Overridable;
-import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
-import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
-import io.quarkus.deployment.builditem.ServiceStartBuildItem;
-import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
-import io.quarkus.deployment.recording.RecorderContext;
-import io.quarkus.runtime.RuntimeValue;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.converter.BaseTypeConverterRegistry;
import org.apache.camel.quarkus.core.CamelConfig;
@@ -66,6 +47,25 @@ import org.jboss.jandex.IndexView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
+import io.quarkus.arc.deployment.BeanContainerBuildItem;
+import io.quarkus.arc.deployment.BeanRegistrationPhaseBuildItem;
+import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
+import io.quarkus.arc.processor.BuildExtension;
+import io.quarkus.deployment.ApplicationArchive;
+import io.quarkus.deployment.Capabilities;
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Overridable;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.ServiceStartBuildItem;
+import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
+import io.quarkus.deployment.recording.RecorderContext;
+import io.quarkus.runtime.RuntimeValue;
+
class BuildProcessor {
private static final Logger LOGGER = LoggerFactory.getLogger(BuildProcessor.class);
@@ -81,8 +81,16 @@ class BuildProcessor {
*/
public static class Core {
@BuildStep
- ContainerBeansBuildItem containerBeans(BeanRegistrationPhaseBuildItem beanRegistrationPhase) {
- return new ContainerBeansBuildItem(beanRegistrationPhase.getContext().get(BuildExtension.Key.BEANS));
+ BeanRegistrationPhaseBuildItem.BeanConfiguratorBuildItem containerBeans(
+ BeanRegistrationPhaseBuildItem beanRegistrationPhase,
+ BuildProducer<ContainerBeansBuildItem> containerBeans) {
+
+ containerBeans.produce(
+ new ContainerBeansBuildItem(beanRegistrationPhase.getContext().get(BuildExtension.Key.BEANS)));
+
+ // method using BeanRegistrationPhaseBuildItem should return a BeanConfiguratorBuildItem
+ // otherwise the build step may be processed at the wrong time.
+ return new BeanRegistrationPhaseBuildItem.BeanConfiguratorBuildItem();
}
@BuildStep
@@ -317,15 +325,9 @@ class BuildProcessor {
* making the lazy beans unremovable in that case.
*/
@BuildStep(onlyIf = Flags.MainEnabled.class)
- UnremovableBeanBuildItem unremoveLazyBeans(
- List<CamelRoutesBuilderClassBuildItem> camelRoutesClasses) {
-
- final Set<String> lazyBeans = camelRoutesClasses.stream()
- .map(buildItem -> buildItem.getDotName().toString())
- .collect(Collectors.toSet());
-
- return new UnremovableBeanBuildItem(new BeanClassNamesExclusion(lazyBeans));
-
+ UnremovableBeanBuildItem unremovableRoutesBuilders() {
+ return new UnremovableBeanBuildItem(
+ b -> b.getTypes().stream().anyMatch(t -> t.name().equals(ROUTES_BUILDER_TYPE)));
}
@Overridable
diff --git a/extensions/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelRegistryTest.java b/extensions/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelRegistryTest.java
index da1fe39..69f6dde 100644
--- a/extensions/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelRegistryTest.java
+++ b/extensions/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelRegistryTest.java
@@ -39,14 +39,17 @@ public class CamelRegistryTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
- .addClasses(BeanProducer.class, MyRoute.class, MyCDIRoute.class));
+ .addClasses(BeanProducer.class, MyRoute.class, MyCDIRoute.class, MyCDIProducer.class));
@Inject
Registry registry;
@Test
public void testLookupRoutes() {
- assertThat(registry.findByType(RoutesBuilder.class)).isNotEmpty();
+ // MyCDIRoute
+ // MyCDIProducer::routes
+ assertThat(registry.findByType(RoutesBuilder.class))
+ .hasSize(2);
}
@Test
@@ -109,4 +112,16 @@ public class CamelRegistryTest {
public void configure() throws Exception {
}
}
+
+ @ApplicationScoped
+ public static class MyCDIProducer {
+ @Produces
+ public RoutesBuilder routes() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ }
+ };
+ }
+ }
}
diff --git a/integration-tests/core-main/src/main/java/org/apache/camel/quarkus/core/CamelRouteProducer.java b/integration-tests/core-main/src/main/java/org/apache/camel/quarkus/core/CamelRouteProducer.java
new file mode 100644
index 0000000..6a00a77
--- /dev/null
+++ b/integration-tests/core-main/src/main/java/org/apache/camel/quarkus/core/CamelRouteProducer.java
@@ -0,0 +1,39 @@
+/*
+ * 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.quarkus.core;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+
+@ApplicationScoped
+public class CamelRouteProducer {
+
+ @Produces
+ RoutesBuilder producedRoute() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:produced")
+ .id("produced")
+ .to("log:produced");
+ }
+ };
+ }
+}
diff --git a/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java b/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java
index ae87660..4a79b0e 100644
--- a/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java
+++ b/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java
@@ -101,7 +101,7 @@ public class CamelTest {
.contains(CamelRoute.class.getName())
.doesNotContain(CamelRouteFiltered.class.getName());
assertThat(p.getList("routes", String.class))
- .contains("keep-alive", "configure", "beforeStart")
+ .contains("keep-alive", "configure", "beforeStart", "produced")
.doesNotContain("filtered");
assertThat(p.getBoolean("autoConfigurationLogSummary")).isFalse();