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/05/26 08:50:00 UTC

[camel] branch master updated: camel3 - Stop type converter registry as late as possible during shutdown of CamelContext as it may be in use during the stopping procedure.

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 65f4843  camel3 - Stop type converter registry as late as possible during shutdown of CamelContext as it may be in use during the stopping procedure.
65f4843 is described below

commit 65f484394334c4314948651aa5cfe2165de6d447
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun May 26 09:30:52 2019 +0200

    camel3 - Stop type converter registry as late as possible during shutdown of CamelContext as it may be in use during the stopping procedure.
---
 .../apache/camel/impl/engine/AbstractCamelContext.java | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 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 6191b73..f9fa38d 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
@@ -1255,10 +1255,13 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
                 }
                 // do not add endpoints as they have their own list
                 if (singleton && !(service instanceof Endpoint)) {
-                    // only add to list of services to stop if its not already
-                    // there
+                    // only add to list of services to stop if its not already there
                     if (stopOnShutdown && !hasService(service)) {
-                        servicesToStop.add(service);
+                        // special for type converter / type converter registry which is stopped manual later
+                        boolean tc = service instanceof TypeConverter || service instanceof TypeConverterRegistry;
+                        if (!tc) {
+                            servicesToStop.add(service);
+                        }
                     }
                 }
                 ServiceHelper.startService(service);
@@ -2574,12 +2577,11 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
             log.warn("Error occurred while stopping lifecycle strategies. This exception will be ignored.", e);
         }
 
-        // shutdown services as late as possible
+        // shutdown services as late as possible (except type converters as they may be needed during the remainder of the stopping)
         shutdownServices(servicesToStop);
         servicesToStop.clear();
 
-        // must notify that we are stopped before stopping the management
-        // strategy
+        // must notify that we are stopped before stopping the management strategy
         EventHelper.notifyCamelContextStopped(this);
 
         // stop the notifier service
@@ -2595,6 +2597,10 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
         // do not clear lifecycleStrategies as we can start Camel again and get
         // the route back as before
 
+        // shutdown type converter as late as possible
+        ServiceHelper.stopService(typeConverter);
+        ServiceHelper.stopService(typeConverterRegistry);
+
         // stop the lazy created so they can be re-created on restart
         forceStopLazyInitialization();