Skip to content

Commit

Permalink
Upgrade to Camel 3.3.0 - WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesnetherton authored and ppalaga committed May 9, 2020
1 parent dbb7b55 commit 34c1f42
Show file tree
Hide file tree
Showing 19 changed files with 300 additions and 269 deletions.
378 changes: 189 additions & 189 deletions docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public static final Asset applicationProperties() {
@Test
public void testRoutesDiscovery() {
assertThat(camelContext.getRoutes()).isEmpty();
assertThat(mainSupport.getRoutesBuilders()).isEmpty();
assertThat(mainSupport.configure().getRoutesBuilders()).isEmpty();
}

public static class MyRoute extends RouteBuilder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.List;
import java.util.Properties;

import javax.inject.Inject;

import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.CamelContext;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.BaseMainSupport;
import org.jboss.shrinkwrap.api.ShrinkWrap;
Expand Down Expand Up @@ -67,8 +69,9 @@ public static final Asset applicationProperties() {
public void testRoutesFilter() {
assertThat(camelContext.getRoutes()).hasSize(1);
assertThat(camelContext.getRoutes()).first().hasFieldOrPropertyWithValue("id", "my-route");
assertThat(mainSupport.getRoutesBuilders()).hasSize(1);
assertThat(mainSupport.getRoutesBuilders()).first().isInstanceOf(MyRoute.class);
final List<RoutesBuilder> routesBuilders = mainSupport.configure().getRoutesBuilders();
assertThat(routesBuilders).hasSize(1);
assertThat(routesBuilders).first().isInstanceOf(MyRoute.class);
}

public static class MyRoute extends RouteBuilder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public abstract class BaseModel implements Model {
private Map<String, ServiceCallConfigurationDefinition> serviceCallConfigurations = new ConcurrentHashMap<>();
private Map<String, HystrixConfigurationDefinition> hystrixConfigurations = new ConcurrentHashMap<>();
private Map<String, Resilience4jConfigurationDefinition> resilience4jConfigurations = new ConcurrentHashMap<>();
private Map<String, FaultToleranceConfigurationDefinition> faultToleranceConfigurations = new ConcurrentHashMap<>();
private Function<RouteDefinition, Boolean> routeFilter;

public BaseModel(CamelContext camelContext) {
Expand Down Expand Up @@ -215,6 +216,34 @@ public void addResilience4jConfiguration(String id, Resilience4jConfigurationDef
resilience4jConfigurations.put(id, configuration);
}

@Override
public FaultToleranceConfigurationDefinition getFaultToleranceConfiguration(String id) {
if (id == null) {
id = "";
}

return faultToleranceConfigurations.get(id);
}

@Override
public void setFaultToleranceConfiguration(FaultToleranceConfigurationDefinition configuration) {
faultToleranceConfigurations.put("", configuration);
}

@Override
public void setFaultToleranceConfigurations(List<FaultToleranceConfigurationDefinition> configurations) {
if (configurations != null) {
for (FaultToleranceConfigurationDefinition configuration : configurations) {
faultToleranceConfigurations.put(configuration.getId(), configuration);
}
}
}

@Override
public void addFaultToleranceConfiguration(String id, FaultToleranceConfigurationDefinition configuration) {
faultToleranceConfigurations.put(id, configuration);
}

@Override
public DataFormatDefinition resolveDataFormatDefinition(String name) {
// lookup type and create the data format from it
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ protected void postProcessCamelContext(CamelContext camelContext) throws Excepti
// post process classes with camel's post processor so classes have support
// for camel's simple di
CamelBeanPostProcessor postProcessor = camelContext.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
for (RoutesBuilder builder : getRoutesBuilders()) {
for (RoutesBuilder builder : mainConfigurationProperties.getRoutesBuilders()) {
postProcessor.postProcessBeforeInitialization(builder, builder.getClass().getName());
postProcessor.postProcessAfterInitialization(builder, builder.getClass().getName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,24 @@
* Bridges {@link MainSupport} events to CDI.
*/
public class CamelMainEventDispatcher implements org.apache.camel.main.MainListener {
@Override
public void beforeInitialize(BaseMainSupport main) {
fireEvent(CamelMainEvents.BeforeInitialize.class, new CamelMainEvents.BeforeInitialize());
}

@Override
public void beforeConfigure(BaseMainSupport main) {
fireEvent(CamelMainEvents.BeforeConfigure.class, new CamelMainEvents.BeforeConfigure());
}

@Override
public void afterConfigure(BaseMainSupport main) {
fireEvent(CamelMainEvents.AfterConfigure.class, new CamelMainEvents.AfterConfigure());
}

@Override
public void configure(CamelContext context) {
fireEvent(CamelMainEvents.Configure.class, new CamelMainEvents.Configure());
// deprecated, replaced by afterConfigure()
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ private CamelMainEvents() {
public static class BeforeConfigure {
}

/**
* Event fired after the the CamelContext has been created and before the
* auto-configured step starts.
*/
public static class BeforeInitialize {
}

/**
* Event fired by {@link CamelMain} before the CamelContext is being created and started.
*/
Expand All @@ -35,7 +42,7 @@ public static class BeforeStart {
/**
* Event fired by {@link CamelMain} to configure the created CamelContext.
*/
public static class Configure {
public static class AfterConfigure {
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public void addRoutesBuilder(RuntimeValue<CamelMain> main, String routesBuilderC
Class<RoutesBuilder> type = context.getClassResolver().resolveClass(routesBuilderClass, RoutesBuilder.class);
RoutesBuilder builder = context.getInjector().newInstance(type, false);

main.getValue().addRoutesBuilder(builder);
main.getValue().configure().addRoutesBuilder(builder);
} catch (Exception e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,26 @@ public void addResilience4jConfiguration(String id, Resilience4jConfigurationDef
model.addResilience4jConfiguration(id, configuration);
}

@Override
public FaultToleranceConfigurationDefinition getFaultToleranceConfiguration(String id) {
return model.getFaultToleranceConfiguration(id);
}

@Override
public void setFaultToleranceConfiguration(FaultToleranceConfigurationDefinition configuration) {
model.setFaultToleranceConfiguration(configuration);
}

@Override
public void setFaultToleranceConfigurations(List<FaultToleranceConfigurationDefinition> configurations) {
model.setFaultToleranceConfigurations(configurations);
}

@Override
public void addFaultToleranceConfiguration(String id, FaultToleranceConfigurationDefinition configuration) {
model.addFaultToleranceConfiguration(id, configuration);
}

@Override
public List<ValidatorDefinition> getValidators() {
return model.getValidators();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,33 +115,22 @@ public <T> Optional<T> newInstance(String key, Class<T> type) {

@Override
public Optional<Class<?>> findClass(String key) {
return findClass(key, null);
}

@Override
public Optional<Class<?>> findClass(String key, String propertyPrefix) {
final String mapKey = mapKey(path, propertyPrefix, key);
final String mapKey = mapKey(path, null, key);
final Class<?> cl = classMap.get(mapKey);
LOG.tracef("Found a non-optional class for key %s: %s", mapKey, cl == null ? "null" : cl.getName());
return Optional.ofNullable(cl);
}

@Override
public Optional<Class<?>> findClass(String key, String propertyPrefix, Class<?> clazz) {
// Just ignore clazz which is only useful for OSGiFactoryFinder
return findClass(key, propertyPrefix);
}

@Override
public Optional<Class<?>> findOptionalClass(String key, String propertyPrefix) {
final String mapKey = mapKey(path, propertyPrefix, key);
public Optional<Class<?>> findOptionalClass(String key) {
final String mapKey = mapKey(path, null, key);
final Class<?> cl = classMap.get(mapKey);
LOG.tracef("Found an optional class for key %s: %s", mapKey, cl == null ? "null" : cl.getName());
return Optional.ofNullable(cl);
}

private Optional<Object> doNewInstance(String key, String propertyPrefix) {
return findClass(key, propertyPrefix).map(ObjectHelper::newInstance);
return findClass(key).map(ObjectHelper::newInstance);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,8 @@
*/
package org.apache.camel.quarkus.component.file.deployment;

import java.nio.file.Paths;

import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.file.strategy.FileProcessStrategyFactory;
import org.apache.camel.component.file.strategy.GenericFileProcessStrategyFactory;
import org.apache.camel.quarkus.core.deployment.CamelServiceBuildItem;

class FileProcessor {

Expand All @@ -34,33 +27,4 @@ class FileProcessor {
FeatureBuildItem feature() {
return new FeatureBuildItem(FEATURE);
}

@BuildStep
ReflectiveClassBuildItem registerForReflection() {
return new ReflectiveClassBuildItem(true, false,
GenericFile.class,
GenericFileProcessStrategyFactory.class,
FileProcessStrategyFactory.class);
}

@BuildStep
CamelServiceBuildItem fileProcessStrategyFactoryService() {
//
// The current factory finder set-up does not take into account additional service defined from
// the factory file using prefixes, as example, the factory file content of the file component
// defines two services:
//
// class=org.apache.camel.component.file.FileComponent
// strategy.factory.class=org.apache.camel.component.file.strategy.FileProcessStrategyFactory
//
// but the current implementation puts an instance if the FileComponent class into the registry
// and blindly ignore strategy.factory.class, in addition, the current selector can't distinguish
// between REGISTER and DISCOVERY at service factory property level thus this CamelServiceBuildItem
// is needed to workaround the limitation.
//
return new CamelServiceBuildItem(
Paths.get("META-INF/services/org/apache/camel/component/strategy.factory.file"),
"file.strategy.factory",
"org.apache.camel.component.file.strategy.FileProcessStrategyFactory");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@
"component": {
"kind": "component",
"name": "qute",
"scheme": "qute",
"extendsScheme": "",
"syntax": "qute:resourceUri",
"title": "Qute",
"description": "Transforms the message using a Quarkus Qute template.",
"label": "transformation",
"deprecated": false,
"async": false,
"consumerOnly": false,
"producerOnly": true,
"lenientProperties": false,
"javaType": "org.apache.camel.component.qute.QuteComponent",
"firstVersion": "3.2.0",
"label": "transformation",
"javaType": "org.apache.camel.component.qute.QuteComponent",
"supportLevel": "Preview",
"groupId": "org.apache.camel.quarkus",
"artifactId": "camel-quarkus-qute-component",
"version": "1.1.0-SNAPSHOT"
"version": "1.1.0-SNAPSHOT",
"scheme": "qute",
"extendsScheme": "",
"syntax": "qute:resourceUri",
"async": false,
"consumerOnly": false,
"producerOnly": true,
"lenientProperties": false
},
"componentProperties": {
"lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public JsonObject describeMain() {
main.getMainListeners().forEach(listener -> listeners.add(listener.getClass().getName()));

JsonArrayBuilder routeBuilders = Json.createArrayBuilder();
main.getRoutesBuilders().forEach(builder -> routeBuilders.add(builder.getClass().getName()));
main.configure().getRoutesBuilders().forEach(builder -> routeBuilders.add(builder.getClass().getName()));

JsonArrayBuilder routes = Json.createArrayBuilder();
main.getCamelContext().getRoutes().forEach(route -> routes.add(route.getId()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public JsonObject describeMain() {
main.getMainListeners().forEach(listener -> listeners.add(listener.getClass().getName()));

JsonArrayBuilder routeBuilders = Json.createArrayBuilder();
main.getRoutesBuilders().forEach(builder -> routeBuilders.add(builder.getClass().getName()));
main.configure().getRoutesBuilders().forEach(builder -> routeBuilders.add(builder.getClass().getName()));

JsonArrayBuilder routes = Json.createArrayBuilder();
main.getCamelContext().getRoutes().forEach(route -> routes.add(route.getId()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public JsonObject describeMain() {
main.getMainListeners().forEach(listener -> listeners.add(listener.getClass().getName()));

JsonArrayBuilder routeBuilders = Json.createArrayBuilder();
main.getRoutesBuilders().forEach(builder -> routeBuilders.add(builder.getClass().getName()));
main.configure().getRoutesBuilders().forEach(builder -> routeBuilders.add(builder.getClass().getName()));

JsonArrayBuilder routes = Json.createArrayBuilder();
camelContext.getRoutes().forEach(route -> routes.add(route.getId()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public String templateFromClassPathResource(String message) {
@Produces(MediaType.TEXT_PLAIN)
public String templateFromHeader(String message) {
LOG.infof("Calling templateFromHeader with %s", message);
return template.requestBodyAndHeader("mustache://template/simple.mustache", message,
return template.requestBodyAndHeader("mustache://template/simple.mustache?allowTemplateFromHeader=true", message,
MustacheConstants.MUSTACHE_TEMPLATE,
"Body='{{body}}'", String.class);
}
Expand All @@ -64,7 +64,7 @@ public String templateFromHeader(String message) {
@Produces(MediaType.TEXT_PLAIN)
public String templateUriFromHeader(String message) {
LOG.infof("Calling templateUriFromHeader with %s", message);
return template.requestBodyAndHeader("mustache://template/simple.mustache", message,
return template.requestBodyAndHeader("mustache://template/simple.mustache?allowTemplateFromHeader=true", message,
MustacheConstants.MUSTACHE_RESOURCE_URI,
"/template/another.mustache", String.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ public void configure() throws Exception {
.route()
.setBody(constant("{\"ok\": true}"))
.endRest()
.post("/slack/api/channels.list")
.post("/slack/api/conversations.list")
.route()
.setBody(constant(
"{\"ok\":true,\"channels\":[{\"id\":\"ABC12345\",\"name\":\"general\",\"is_channel\":true,\"created\":1571904169}]}"))
.endRest()
.post("/slack/api/channels.history")
.post("/slack/api/conversations.history")
.route()
.setBody(constant(
"{\"ok\":true,\"messages\":[{\"type\":\"message\",\"subtype\":\"bot_message\",\"text\":\"Hello Camel Quarkus Slack\""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@

public class SupportListener implements MainListener {
@Override
public void configure(CamelContext context) {
public void beforeInitialize(BaseMainSupport main) {
try {
context.addRoutes(new RouteBuilder() {
main.configure().addRoutesBuilder(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("timer:configure")
Expand All @@ -38,13 +38,21 @@ public void configure() throws Exception {
}
}

@Override
public void afterConfigure(BaseMainSupport main) {
}

@Override
public void configure(CamelContext context) {
}

@Override
public void beforeConfigure(BaseMainSupport main) {
}

@Override
public void beforeStart(BaseMainSupport main) {
main.addRoutesBuilder(new MyBuilder());
main.configure().addRoutesBuilder(new MyBuilder());
}

@Override
Expand Down

0 comments on commit 34c1f42

Please sign in to comment.