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 2019/08/23 20:03:27 UTC
[camel] branch master updated: CAMEL-13904: JMX - Early registered
services may not be enlisted in XML DSL
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 0bd3087 CAMEL-13904: JMX - Early registered services may not be enlisted in XML DSL
0bd3087 is described below
commit 0bd3087d6477dc80709094b43326b159531b25f1
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Aug 23 20:33:50 2019 +0200
CAMEL-13904: JMX - Early registered services may not be enlisted in XML DSL
---
.../core/xml/AbstractCamelContextFactoryBean.java | 11 +++++++----
.../management/JmxManagementLifecycleStrategy.java | 14 ++++++++++++-
.../management/JmxManagementStrategyFactory.java | 23 ++++++++++++++++++++++
3 files changed, 43 insertions(+), 5 deletions(-)
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index a1e4b3b..8fbc61d 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -181,9 +181,9 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
mergedOptions.putAll(getGlobalOptions().asMap());
}
- getContext().setGlobalOptions(mergedOptions);
-
- setupCustomServices();
+ if (!mergedOptions.isEmpty()) {
+ getContext().setGlobalOptions(mergedOptions);
+ }
// set the custom registry if defined
initCustomRegistry(getContext());
@@ -191,9 +191,12 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
// setup property placeholder so we got it as early as possible
initPropertyPlaceholder();
- // setup JMX agent at first
+ // then setup JMX
initJMXAgent();
+ // setup all misc services
+ setupCustomServices();
+
BacklogTracer backlogTracer = getBeanForType(BacklogTracer.class);
if (backlogTracer != null) {
LOG.info("Using custom BacklogTracer: {}", backlogTracer);
diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
index 80fa529..e3e6c15 100644
--- a/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
+++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
@@ -142,6 +142,18 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
this.camelContext = camelContext;
}
+ // used for handing over pre-services between a provisional lifecycycle strategy
+ // and then later the actual strategy to be used when using XML
+ List<PreRegisterService> getPreServices() {
+ return preServices;
+ }
+
+ // used for handing over pre-services between a provisional lifecycycle strategy
+ // and then later the actual strategy to be used when using XML
+ void addPreService(PreRegisterService preService) {
+ preServices.add(preService);
+ }
+
@Override
public CamelContext getCamelContext() {
return camelContext;
@@ -1011,7 +1023,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
*
* @see JmxManagementLifecycleStrategy#enlistPreRegisteredServices()
*/
- private static final class PreRegisterService {
+ public static final class PreRegisterService {
private String name;
private Component component;
diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementStrategyFactory.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementStrategyFactory.java
index fbabb31..dee2c0e 100644
--- a/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementStrategyFactory.java
+++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/JmxManagementStrategyFactory.java
@@ -16,9 +16,12 @@
*/
package org.apache.camel.management;
+import java.util.List;
import java.util.Map;
+import java.util.Optional;
import org.apache.camel.CamelContext;
+import org.apache.camel.Service;
import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.ManagementStrategy;
import org.apache.camel.spi.ManagementStrategyFactory;
@@ -49,6 +52,26 @@ public class JmxManagementStrategyFactory implements ManagementStrategyFactory {
camelContext.setManagementStrategy(strategy);
// must add management lifecycle strategy as first choice
if (!camelContext.getLifecycleStrategies().isEmpty()) {
+
+ // a bit of ugly code to handover pre registered services that has been add to an eager/provisional JmxManagementLifecycleStrategy
+ // which is now re-placed with a new JmxManagementLifecycleStrategy that is based on the end user configured settings
+ // and therefore will be in use
+ List<JmxManagementLifecycleStrategy.PreRegisterService> preServices = null;
+ JmxManagementLifecycleStrategy jmx = camelContext.getLifecycleStrategies().stream()
+ .filter(s -> s instanceof JmxManagementLifecycleStrategy)
+ .map(JmxManagementLifecycleStrategy.class::cast)
+ .findFirst().orElse(null);
+ if (jmx != null) {
+ preServices = jmx.getPreServices();
+ }
+
+ if (preServices != null && !preServices.isEmpty() && lifecycle instanceof JmxManagementLifecycleStrategy) {
+ JmxManagementLifecycleStrategy existing = (JmxManagementLifecycleStrategy) lifecycle;
+ for (JmxManagementLifecycleStrategy.PreRegisterService pre : preServices) {
+ existing.addPreService(pre);
+ }
+ }
+
// camel-spring/camel-blueprint may re-initialize JMX during startup, so remove any previous
camelContext.getLifecycleStrategies().removeIf(s -> s instanceof JmxManagementLifecycleStrategy);
}