You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/08/27 09:31:58 UTC
[camel-spring-boot] 02/02: CAMEL-18425: camel-cli - Make regular Camel applications work with Camel CLI
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
commit a391f64eeed93349061fa298792c400cfe6860b5
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Aug 27 11:11:01 2022 +0200
CAMEL-18425: camel-cli - Make regular Camel applications work with Camel CLI
---
.../connector/CliConnectorAutoConfiguration.java | 6 ++---
.../camel/spring/boot/CamelAutoConfiguration.java | 26 ++++++++++++++++++++++
2 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/components-starter/camel-cli-connector-starter/src/main/java/org/apache/camel/springboot/cli/connector/CliConnectorAutoConfiguration.java b/components-starter/camel-cli-connector-starter/src/main/java/org/apache/camel/springboot/cli/connector/CliConnectorAutoConfiguration.java
index c3ca214dd29..267c0066455 100644
--- a/components-starter/camel-cli-connector-starter/src/main/java/org/apache/camel/springboot/cli/connector/CliConnectorAutoConfiguration.java
+++ b/components-starter/camel-cli-connector-starter/src/main/java/org/apache/camel/springboot/cli/connector/CliConnectorAutoConfiguration.java
@@ -23,8 +23,7 @@ import java.util.jar.Manifest;
import org.apache.camel.spi.CliConnectorFactory;
import org.springframework.boot.SpringBootVersion;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -34,8 +33,7 @@ import org.springframework.context.support.AbstractApplicationContext;
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name = "camel.cli.enabled", matchIfMissing = true)
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
+@AutoConfigureBefore(name = "org.apache.camel.spring.boot.CamelAutoConfiguration") // configure early to have Camel CLI during startup
@EnableConfigurationProperties({CliConnectorConfiguration.class})
public class CliConnectorAutoConfiguration {
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java
index c2c846edb93..9270c586ac9 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java
@@ -26,20 +26,25 @@ import org.apache.camel.ConsumerTemplate;
import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.FluentProducerTemplate;
import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.properties.PropertiesComponent;
import org.apache.camel.component.properties.PropertiesParser;
import org.apache.camel.main.DefaultConfigurationConfigurer;
import org.apache.camel.main.RoutesCollector;
import org.apache.camel.model.Model;
import org.apache.camel.spi.BeanRepository;
+import org.apache.camel.spi.CliConnector;
+import org.apache.camel.spi.CliConnectorFactory;
import org.apache.camel.spi.StartupStepRecorder;
import org.apache.camel.spring.spi.ApplicationContextBeanRepository;
import org.apache.camel.spring.spi.CamelBeanPostProcessor;
import org.apache.camel.support.DefaultRegistry;
+import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.support.startup.LoggingStartupStepRecorder;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
@@ -126,6 +131,9 @@ public class CamelAutoConfiguration {
}
}
+ // setup cli connector eager
+ configureCliConnector(applicationContext, camelContext);
+
camelContext.adapt(ExtendedCamelContext.class).setPackageScanClassResolver(new FatJarPackageScanClassResolver());
camelContext.adapt(ExtendedCamelContext.class).setPackageScanResourceResolver(new FatJarPackageScanResourceResolver());
@@ -144,6 +152,24 @@ public class CamelAutoConfiguration {
return camelContext;
}
+ static void configureCliConnector(ApplicationContext applicationContext,
+ CamelContext camelContext) {
+
+ // factory is bound eager into spring bean registry
+ try {
+ CliConnectorFactory ccf = applicationContext.getBean(CliConnectorFactory.class);
+ CliConnector connector = ccf.createConnector();
+ camelContext.addService(connector, true);
+ // force start cli connector early as otherwise it will be deferred until context is started
+ // but, we want status available during startup phase
+ ServiceHelper.startService(connector);
+ } catch (BeansException e) {
+ // optional so ignore
+ } catch (Exception e) {
+ throw RuntimeCamelException.wrapRuntimeException(e);
+ }
+ }
+
static void configureStartupRecorder(CamelContext camelContext, CamelConfigurationProperties config) {
if ("false".equals(config.getStartupRecorder())) {
camelContext.adapt(ExtendedCamelContext.class).getStartupStepRecorder().setEnabled(false);