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 4134d21  CAMEL-16238: Registry should stop during shutdown of 
CamelContext and clear its fallback registry
4134d21 is described below

commit 4134d215d7c4abd44612e7ae52a6c8d112e251b0
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Feb 25 07:58:21 2021 +0100

    CAMEL-16238: Registry should stop during shutdown of CamelContext and clear 
its fallback registry
---
 .../org/apache/camel/impl/engine/AbstractCamelContext.java |  4 +++-
 .../java/org/apache/camel/support/DefaultRegistry.java     | 14 +++++++++++++-
 .../main/java/org/apache/camel/support/SimpleRegistry.java |  8 +++++++-
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index c706c88..e8cf42c 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -3298,9 +3298,10 @@ public abstract class AbstractCamelContext extends 
BaseService
         shutdownServices(executorServiceManager);
         shutdownServices(reactiveExecutor);
 
-        // shutdown type converter as late as possible
+        // shutdown type converter and registry as late as possible
         ServiceHelper.stopService(typeConverter);
         ServiceHelper.stopService(typeConverterRegistry);
+        ServiceHelper.stopService(registry);
 
         // stop the lazy created so they can be re-created on restart
         forceStopLazyInitialization();
@@ -3687,6 +3688,7 @@ public abstract class AbstractCamelContext extends 
BaseService
         asyncProcessorAwaitManager = null;
         exchangeFactory = null;
         exchangeFactoryManager = null;
+        registry = null;
     }
 
     /**
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java
index 05342ca..4e37dc3 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.support;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -31,6 +32,9 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.BeanRepository;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.IOHelper;
 
 /**
  * The default {@link Registry} which supports using a given first-choice 
repository to lookup the beans, such as
@@ -40,7 +44,7 @@ import org.apache.camel.spi.Registry;
  * Notice that beans in the fallback registry are not managed by the 
first-choice registry, so these beans may not
  * support dependency injection and other features that the first-choice 
registry may offer.
  */
-public class DefaultRegistry implements Registry, CamelContextAware {
+public class DefaultRegistry extends ServiceSupport implements Registry, 
CamelContextAware {
 
     protected CamelContext camelContext;
     protected List<BeanRepository> repositories;
@@ -215,4 +219,12 @@ public class DefaultRegistry implements Registry, 
CamelContextAware {
         return answer;
     }
 
+    @Override
+    protected void doStop() throws Exception {
+        super.doStop();
+        if (fallbackRegistry instanceof Closeable) {
+            IOHelper.close((Closeable) fallbackRegistry);
+        }
+        ServiceHelper.stopAndShutdownService(fallbackRegistry);
+    }
 }
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/SimpleRegistry.java 
b/core/camel-support/src/main/java/org/apache/camel/support/SimpleRegistry.java
index 39528bd..4d443b0 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/SimpleRegistry.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/SimpleRegistry.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.support;
 
+import java.io.Closeable;
+import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
@@ -31,7 +33,7 @@ import org.apache.camel.spi.Registry;
  *
  * @see DefaultRegistry
  */
-public class SimpleRegistry extends LinkedHashMap<String, Map<Class<?>, 
Object>> implements Registry {
+public class SimpleRegistry extends LinkedHashMap<String, Map<Class<?>, 
Object>> implements Registry, Closeable {
 
     @Override
     public Object lookupByName(String name) {
@@ -101,4 +103,8 @@ public class SimpleRegistry extends LinkedHashMap<String, 
Map<Class<?>, Object>>
         computeIfAbsent(id, k -> new LinkedHashMap<>()).put(type, wrap(bean));
     }
 
+    @Override
+    public void close() throws IOException {
+        clear();
+    }
 }

Reply via email to