You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2019/12/13 23:21:48 UTC
[camel-quarkus] branch master updated: Ensure custom services such
as deataformats, languages and component are not removed from container
This is an automated email from the ASF dual-hosted git repository.
acosentino 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 c7b637f Ensure custom services such as deataformats, languages and component are not removed from container
new c40a0b6 Merge pull request #548 from lburgazzoli/unremovable-services
c7b637f is described below
commit c7b637f4f54754dd83d072b0eec52c86ff627a20
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Fri Dec 13 18:08:50 2019 +0100
Ensure custom services such as deataformats, languages and component are not removed from container
---
.../quarkus/core/deployment/BuildProcessor.java | 58 +++++++++-----
.../quarkus/core/deployment/CamelSupport.java | 11 ++-
.../quarkus/core/runtime/CamelRegistryTest.java | 89 ++++++++++++++++++++--
3 files changed, 131 insertions(+), 27 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 a3933df..dd825be 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,6 +26,24 @@ 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.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;
@@ -44,28 +62,10 @@ import org.apache.camel.spi.TypeConverterRegistry;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
import org.jboss.jandex.IndexView;
+import org.jboss.jandex.Type;
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);
@@ -75,6 +75,24 @@ class BuildProcessor {
"org.apache.camel.builder.RouteBuilder");
private static final DotName ADVICE_WITH_ROUTE_BUILDER_TYPE = DotName.createSimple(
"org.apache.camel.builder.AdviceWithRouteBuilder");
+ private static final DotName DATA_FORMAT_TYPE = DotName.createSimple(
+ "org.apache.camel.spi.DataFormat");
+ private static final DotName LANGUAGE_TYPE = DotName.createSimple(
+ "org.apache.camel.spi.Language");
+ private static final DotName COMPONENT_TYPE = DotName.createSimple(
+ "org.apache.camel.Component");
+ private static final DotName PRODUCER_TYPE = DotName.createSimple(
+ "org.apache.camel.Producer");
+ private static final DotName PREDICATE_TYPE = DotName.createSimple(
+ "org.apache.camel.Predicate");
+
+ private static final Set<DotName> UNREMOVABLE_BEANS_TYPES = CamelSupport.setOf(
+ ROUTES_BUILDER_TYPE,
+ DATA_FORMAT_TYPE,
+ LANGUAGE_TYPE,
+ COMPONENT_TYPE,
+ PRODUCER_TYPE,
+ PREDICATE_TYPE);
/*
* Build steps related to camel core.
@@ -327,7 +345,7 @@ class BuildProcessor {
@BuildStep(onlyIf = Flags.MainEnabled.class)
UnremovableBeanBuildItem unremovableRoutesBuilders() {
return new UnremovableBeanBuildItem(
- b -> b.getTypes().stream().anyMatch(t -> t.name().equals(ROUTES_BUILDER_TYPE)));
+ b -> b.getTypes().stream().map(Type::name).anyMatch(UNREMOVABLE_BEANS_TYPES::contains));
}
@Overridable
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java
index 8cbe3c2..3c4847c 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java
@@ -24,17 +24,20 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
-import io.quarkus.arc.processor.BeanInfo;
-import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
import org.apache.camel.util.AntPathMatcher;
import org.apache.camel.util.ObjectHelper;
import org.jboss.jandex.ClassInfo;
+import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
+
public final class CamelSupport {
public static final String CAMEL_SERVICE_BASE_PATH = "META-INF/services/org/apache/camel";
public static final String CAMEL_ROOT_PACKAGE_DIRECTORY = "org/apache/camel";
@@ -114,4 +117,8 @@ public final class CamelSupport {
return answer;
}
+ public static <T> Set<T> setOf(T... items) {
+ return Stream.of(items).collect(Collectors.toCollection(HashSet::new));
+ }
+
}
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 69f6dde..e0de1a3 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
@@ -16,6 +16,9 @@
*/
package org.apache.camel.quarkus.core.runtime;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
@@ -24,10 +27,18 @@ import javax.inject.Named;
import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.BeanInject;
import org.apache.camel.BindToRegistry;
+import org.apache.camel.Component;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
import org.apache.camel.Processor;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.Language;
import org.apache.camel.spi.Registry;
+import org.apache.camel.support.DefaultComponent;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
@@ -39,17 +50,27 @@ public class CamelRegistryTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
- .addClasses(BeanProducer.class, MyRoute.class, MyCDIRoute.class, MyCDIProducer.class));
+ .addClasses(BeanProducer.class)
+ .addClasses(MyRoute.class, MyCDIRoute.class, MyCDIProducer.class)
+ .addClasses(MyLanguage.class, MyDataFormat.class, MyComponent.class));
@Inject
Registry registry;
@Test
public void testLookupRoutes() {
- // MyCDIRoute
- // MyCDIProducer::routes
- assertThat(registry.findByType(RoutesBuilder.class))
- .hasSize(2);
+ assertThat(registry.findByType(RoutesBuilder.class)).hasSize(2);
+ assertThat(registry.lookupByNameAndType("my-route", RoutesBuilder.class)).isNotNull();
+ assertThat(registry.lookupByNameAndType("my-route-produced", RoutesBuilder.class)).isNotNull();
+ }
+
+ @Test
+ public void testLookupCustomServices() {
+ assertThat(registry.lookupByNameAndType("my-df", DataFormat.class)).isNotNull();
+ assertThat(registry.lookupByNameAndType("my-language", Language.class)).isNotNull();
+ assertThat(registry.lookupByNameAndType("my-component", Component.class)).isNotNull();
+ assertThat(registry.lookupByNameAndType("my-predicate", Predicate.class)).isNotNull();
+ assertThat(registry.lookupByNameAndType("my-processor", Processor.class)).isNotNull();
}
@Test
@@ -103,6 +124,7 @@ public class CamelRegistryTest {
}
}
+ @Named("my-route")
@ApplicationScoped
public static class MyCDIRoute extends RouteBuilder {
@BeanInject("bean-1")
@@ -115,6 +137,7 @@ public class CamelRegistryTest {
@ApplicationScoped
public static class MyCDIProducer {
+ @Named("my-route-produced")
@Produces
public RoutesBuilder routes() {
return new RouteBuilder() {
@@ -123,5 +146,61 @@ public class CamelRegistryTest {
}
};
}
+
+ @Named("my-predicate")
+ @Produces
+ public Predicate predicate() {
+ return e -> false;
+ }
+
+ @Named("my-processor")
+ @Produces
+ public Processor processor() {
+ return e -> {};
+ }
+ }
+
+ @Named("my-df")
+ @ApplicationScoped
+ public static class MyDataFormat implements DataFormat {
+ @Override
+ public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
+ }
+
+ @Override
+ public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+ return null;
+ }
+
+ @Override
+ public void start() {
+ }
+
+ @Override
+ public void stop() {
+ }
+ }
+
+ @Named("my-language")
+ @ApplicationScoped
+ public static class MyLanguage implements Language {
+ @Override
+ public Predicate createPredicate(String expression) {
+ return null;
+ }
+
+ @Override
+ public Expression createExpression(String expression) {
+ return null;
+ }
+ }
+
+ @Named("my-component")
+ @ApplicationScoped
+ public static class MyComponent extends DefaultComponent {
+ @Override
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+ return null;
+ }
}
}