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 2021/04/19 11:31:12 UTC
[camel] 02/02: CAMEL-16527: Unable to disable component or endpoint
autowiring with camel-main
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 65c003958d1f0b1d19d44ded4524a65c66e2138e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Apr 19 13:30:33 2021 +0200
CAMEL-16527: Unable to disable component or endpoint autowiring with camel-main
---
.../impl/engine/AutowiredLifecycleStrategy.java | 55 ++++++++++++++++++++--
1 file changed, 51 insertions(+), 4 deletions(-)
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AutowiredLifecycleStrategy.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AutowiredLifecycleStrategy.java
index 73da22f..574b329 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AutowiredLifecycleStrategy.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AutowiredLifecycleStrategy.java
@@ -16,11 +16,14 @@
*/
package org.apache.camel.impl.engine;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
import org.apache.camel.CamelContext;
import org.apache.camel.Component;
import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.VetoCamelContextStartException;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.Language;
import org.apache.camel.spi.PropertyConfigurer;
@@ -33,14 +36,60 @@ class AutowiredLifecycleStrategy extends LifecycleStrategySupport {
private static final Logger LOG = LoggerFactory.getLogger(AutowiredLifecycleStrategy.class);
+ // provisional maps to hold components, dataformats, languages that are created during
+ // starting camel, but need to defer autowiring until later in case additional configuration
+ // would turn this per instance
+ private final Map<String, Component> autowrieComponents = new HashMap<>();
+ private final Map<String, DataFormat> autowrieDataFormats = new HashMap<>();
+ private final Map<String, Language> autowrieLanguages = new HashMap<>();
private final ExtendedCamelContext camelContext;
+ private volatile boolean initialized;
public AutowiredLifecycleStrategy(CamelContext camelContext) {
this.camelContext = (ExtendedCamelContext) camelContext;
}
@Override
+ public void onContextInitialized(CamelContext context) throws VetoCamelContextStartException {
+ // we are initializd so lets do autowiring on what we have collected during bootstrap
+ autowrieComponents.forEach(this::autowireComponent);
+ autowrieDataFormats.forEach(this::autowireDataFormat);
+ autowrieLanguages.forEach(this::autowireLanguage);
+ autowrieComponents.clear();
+ autowrieDataFormats.clear();
+ autowrieLanguages.clear();
+ // we are now done initialized
+ initialized = true;
+ }
+
+ @Override
public void onComponentAdd(String name, Component component) {
+ if (initialized) {
+ autowireComponent(name, component);
+ } else {
+ autowrieComponents.put(name, component);
+ }
+ }
+
+ @Override
+ public void onDataFormatCreated(String name, DataFormat dataFormat) {
+ if (initialized) {
+ autowireDataFormat(name, dataFormat);
+ } else {
+ autowrieDataFormats.put(name, dataFormat);
+ }
+ }
+
+ @Override
+ public void onLanguageCreated(String name, Language language) {
+ if (initialized) {
+ autowireLanguage(name, language);
+ } else {
+ autowrieLanguages.put(name, language);
+ }
+ }
+
+ private void autowireComponent(String name, Component component) {
// autowiring can be turned off on context level and per component
boolean enabled = camelContext.isAutowiredEnabled() && component.isAutowiredEnabled();
if (enabled) {
@@ -48,8 +97,7 @@ class AutowiredLifecycleStrategy extends LifecycleStrategySupport {
}
}
- @Override
- public void onDataFormatCreated(String name, DataFormat dataFormat) {
+ private void autowireDataFormat(String name, DataFormat dataFormat) {
// autowiring can be turned off on context level
boolean enabled = camelContext.isAutowiredEnabled();
if (enabled) {
@@ -57,8 +105,7 @@ class AutowiredLifecycleStrategy extends LifecycleStrategySupport {
}
}
- @Override
- public void onLanguageCreated(String name, Language language) {
+ private void autowireLanguage(String name, Language language) {
// autowiring can be turned off on context level
boolean enabled = camelContext.isAutowiredEnabled();
if (enabled) {