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 2020/10/02 15:15:41 UTC
[camel] branch master updated: CAMEL-15607: camel-core - When
resolving language then only resolve via registry once (#4348)
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
The following commit(s) were added to refs/heads/master by this push:
new b6d5a81 CAMEL-15607: camel-core - When resolving language then only resolve via registry once (#4348)
b6d5a81 is described below
commit b6d5a81f437e07fd1d94bf93ba928cc877f00468
Author: Luca Burgazzoli <lb...@users.noreply.github.com>
AuthorDate: Fri Oct 2 17:11:27 2020 +0200
CAMEL-15607: camel-core - When resolving language then only resolve via registry once (#4348)
---
.../camel/impl/engine/AbstractCamelContext.java | 73 +++++++++-------------
1 file changed, 28 insertions(+), 45 deletions(-)
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 93c92b5..3387765 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -1636,60 +1636,43 @@ public abstract class AbstractCamelContext extends BaseService
}
@Override
- public Language resolveLanguage(String language) {
- LOG.debug("Resolving language: {}", language);
-
- Language answer;
- synchronized (languages) {
- // as first iteration, check if there is a language instance for the given name
- // bound to the registry
- answer = ResolverHelper.lookupLanguageInRegistryWithFallback(getCamelContextReference(), language);
- if (answer != null) {
- Language old = languages.put(language, answer);
- // if the language has already been loaded, thus it is already registered
- // in the local language cache, we can return it as it has already been
- // initialized and configured
- if (old == answer) {
- return answer;
- }
- } else {
- answer = languages.get(language);
+ public Language resolveLanguage(String name) {
+ LOG.debug("Resolving language: {}", name);
- // check if the language is singleton, if so return the shared
- // instance
- if (IsSingleton.test(answer)) {
- return answer;
- } else {
- answer = null;
- }
- }
+ return languages.computeIfAbsent(name, new Function<String, Language>() {
+ @Override
+ public Language apply(String s) {
+ final CamelContext camelContext = getCamelContextReference();
- if (answer == null) {
- // language not known or not singleton, then use resolver
- answer = getLanguageResolver().resolveLanguage(language, getCamelContextReference());
- }
+ // as first iteration, check if there is a language instance for the given name
+ // bound to the registry
+ Language language = ResolverHelper.lookupLanguageInRegistryWithFallback(camelContext, name);
- if (answer != null) {
- // inject CamelContext if aware
- CamelContextAware.trySetCamelContext(answer, getCamelContextReference());
+ if (language == null) {
+ // language not known, then use resolver
+ language = getLanguageResolver().resolveLanguage(name, camelContext);
+ }
- if (answer instanceof Service) {
- try {
- startService((Service) answer);
- } catch (Exception e) {
- throw RuntimeCamelException.wrapRuntimeCamelException(e);
+ if (language != null) {
+ if (language instanceof Service) {
+ try {
+ startService((Service) language);
+ } catch (Exception e) {
+ throw RuntimeCamelException.wrapRuntimeCamelException(e);
+ }
}
- }
- for (LifecycleStrategy strategy : lifecycleStrategies) {
- strategy.onLanguageCreated(language, answer);
+ // inject CamelContext if aware
+ CamelContextAware.trySetCamelContext(language, camelContext);
+
+ for (LifecycleStrategy strategy : lifecycleStrategies) {
+ strategy.onLanguageCreated(name, language);
+ }
}
- languages.put(language, answer);
+ return language;
}
- }
-
- return answer;
+ });
}
// Properties