This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch init-destroy
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 388df9193a519e804300ddd3f29be52a173686e2
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Aug 29 13:30:51 2024 +0200

    CAMEL-21140: camel-core - Add init/destroy method support for registry bind
---
 .../camel/dsl/xml/io/XmlRoutesBuilderLoader.java   | 45 +--------------------
 .../dsl/yaml/deserializers/BeansDeserializer.java  | 46 +---------------------
 .../dsl/yaml/YamlRoutesBuilderLoaderSupport.java   |  4 --
 3 files changed, 4 insertions(+), 91 deletions(-)

diff --git 
a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
 
b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
index c3d54777676..95a5292a31f 100644
--- 
a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
+++ 
b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
@@ -18,7 +18,6 @@ package org.apache.camel.dsl.xml.io;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -51,9 +50,7 @@ import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.RoutesLoader;
 import org.apache.camel.support.CachedResource;
-import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.support.scan.PackageScanHelper;
-import org.apache.camel.util.KeyValueHolder;
 import org.apache.camel.xml.io.util.XmlStreamDetector;
 import org.apache.camel.xml.io.util.XmlStreamInfo;
 import org.slf4j.Logger;
@@ -72,7 +69,6 @@ public class XmlRoutesBuilderLoader extends 
RouteBuilderLoaderSupport {
     private final Map<String, XmlStreamInfo> xmlInfoCache = new 
ConcurrentHashMap<>();
     private final Map<String, BeansDefinition> camelAppCache = new 
ConcurrentHashMap<>();
     private final List<BeanFactoryDefinition<?>> delayedRegistrations = new 
ArrayList<>();
-    private final Map<String, KeyValueHolder<Object, String>> beansToDestroy = 
new LinkedHashMap<>();
 
     private final AtomicInteger counter = new AtomicInteger(0);
 
@@ -364,50 +360,13 @@ public class XmlRoutesBuilderLoader extends 
RouteBuilderLoaderSupport {
     }
 
     protected void bindBean(BeanFactoryDefinition<?> def, String name, Object 
target) throws Exception {
-        // destroy and unbind any existing bean
-        destroyBean(name, true);
+        // unbind in case we reload
         getCamelContext().getRegistry().unbind(name);
-
-        // invoke init method and register bean
-        String initMethod = def.getInitMethod();
-        if (initMethod != null) {
-            ObjectHelper.invokeMethodSafe(initMethod, target);
-        }
-        getCamelContext().getRegistry().bind(name, target);
-
-        // remember to destroy bean on shutdown
-        if (def.getDestroyMethod() != null) {
-            beansToDestroy.put(name, new KeyValueHolder<>(target, 
def.getDestroyMethod()));
-        }
+        getCamelContext().getRegistry().bind(name, target, 
def.getInitMethod(), def.getDestroyMethod());
 
         // register bean in model
         Model model = 
getCamelContext().getCamelContextExtension().getContextPlugin(Model.class);
         model.addCustomBean(def);
     }
 
-    protected void destroyBean(String name, boolean remove) {
-        var holder = remove ? beansToDestroy.remove(name) : 
beansToDestroy.get(name);
-        if (holder != null) {
-            String destroyMethod = holder.getValue();
-            Object target = holder.getKey();
-            try {
-                ObjectHelper.invokeMethodSafe(destroyMethod, target);
-            } catch (Exception e) {
-                LOG.warn("Error invoking destroy method: {} on bean: {} due 
to: {}. This exception is ignored.",
-                        destroyMethod, target, e.getMessage(), e);
-            }
-        }
-    }
-
-    @Override
-    protected void doStop() throws Exception {
-        super.doStop();
-
-        // beans should trigger destroy methods on shutdown
-        for (String name : beansToDestroy.keySet()) {
-            destroyBean(name, false);
-        }
-        beansToDestroy.clear();
-    }
-
 }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
index 7c54470cc62..9b5001d5428 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
@@ -18,9 +18,7 @@ package org.apache.camel.dsl.yaml.deserializers;
 
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.camel.CamelContext;
@@ -34,10 +32,7 @@ import org.apache.camel.spi.CamelContextCustomizer;
 import org.apache.camel.spi.annotations.YamlIn;
 import org.apache.camel.spi.annotations.YamlProperty;
 import org.apache.camel.spi.annotations.YamlType;
-import org.apache.camel.util.KeyValueHolder;
 import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.snakeyaml.engine.v2.api.ConstructNode;
 import org.snakeyaml.engine.v2.nodes.Node;
 import org.snakeyaml.engine.v2.nodes.SequenceNode;
@@ -52,10 +47,7 @@ import org.snakeyaml.engine.v2.nodes.SequenceNode;
           })
 public class BeansDeserializer extends YamlDeserializerSupport implements 
ConstructNode {
 
-    public static final Logger LOG = 
LoggerFactory.getLogger(BeansDeserializer.class);
-
     private final Set<String> beanCache = new HashSet<>();
-    private final Map<String, KeyValueHolder<Object, String>> beansToDestroy = 
new LinkedHashMap<>();
 
     @Override
     public Object construct(Node node) {
@@ -149,47 +141,13 @@ public class BeansDeserializer extends 
YamlDeserializerSupport implements Constr
             String name, Object target)
             throws Exception {
 
-        // destroy and unbind any existing bean
-        destroyBean(name, true);
+        // unbind in case we reload
         camelContext.getRegistry().unbind(name);
-
-        // invoke init method and register bean
-        String initMethod = def.getInitMethod();
-        if (initMethod != null) {
-            org.apache.camel.support.ObjectHelper.invokeMethodSafe(initMethod, 
target);
-        }
-        camelContext.getRegistry().bind(name, target);
-
-        // remember to destroy bean on shutdown
-        if (def.getDestroyMethod() != null) {
-            beansToDestroy.put(name, new KeyValueHolder<>(target, 
def.getDestroyMethod()));
-        }
+        camelContext.getRegistry().bind(name, target, def.getInitMethod(), 
def.getDestroyMethod());
 
         // register bean in model
         Model model = 
camelContext.getCamelContextExtension().getContextPlugin(Model.class);
         model.addCustomBean(def);
     }
 
-    protected void destroyBean(String name, boolean remove) {
-        var holder = remove ? beansToDestroy.remove(name) : 
beansToDestroy.get(name);
-        if (holder != null) {
-            String destroyMethod = holder.getValue();
-            Object target = holder.getKey();
-            try {
-                
org.apache.camel.support.ObjectHelper.invokeMethodSafe(destroyMethod, target);
-            } catch (Exception e) {
-                LOG.warn("Error invoking destroy method: {} on bean: {} due 
to: {}. This exception is ignored.",
-                        destroyMethod, target, e.getMessage(), e);
-            }
-        }
-    }
-
-    public void stop() throws Exception {
-        // beans should trigger destroy methods on shutdown
-        for (String name : beansToDestroy.keySet()) {
-            destroyBean(name, false);
-        }
-        beansToDestroy.clear();
-    }
-
 }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
index d7e77b54cb9..bfd11e5212f 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
@@ -113,8 +113,4 @@ public abstract class YamlRoutesBuilderLoaderSupport 
extends RouteBuilderLoaderS
         return null;
     }
 
-    @Override
-    protected void doStop() throws Exception {
-        beansDeserializer.stop();
-    }
 }

Reply via email to