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/03/03 05:18:52 UTC

[camel] branch camel-2.25.x updated: CAMEL-14639: added synchronized blocks so that registry is now thread safe (#3608)

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

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


The following commit(s) were added to refs/heads/camel-2.25.x by this push:
     new d6ddbee  CAMEL-14639: added synchronized blocks so that registry is now thread safe (#3608)
d6ddbee is described below

commit d6ddbeef8c6b7e7a85258048fb0d56ae6c0b8c42
Author: Jiri Novak <xn...@gmail.com>
AuthorDate: Tue Mar 3 06:18:41 2020 +0100

    CAMEL-14639: added synchronized blocks so that registry is now thread safe (#3608)
---
 .../component/servlet/DefaultHttpRegistry.java     | 71 +++++++++++++---------
 1 file changed, 42 insertions(+), 29 deletions(-)

diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java
index f93f9f9..573c0e5 100644
--- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java
+++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java
@@ -32,6 +32,7 @@ public class DefaultHttpRegistry implements HttpRegistry {
     private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpRegistry.class);
 
     private static Map<String, HttpRegistry> registries = new HashMap<>();
+    private final Object lock = new Object();
     
     private final Set<HttpConsumer> consumers;
     private final Set<CamelServlet> providers;
@@ -62,23 +63,27 @@ public class DefaultHttpRegistry implements HttpRegistry {
     
     @Override
     public void register(HttpConsumer consumer) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Registering consumer for path {} providers present: {}", consumer.getPath(), providers.size());
-        }
-        consumers.add(consumer);
-        for (CamelServlet provider : providers) {
-            provider.connect(consumer);
+        synchronized (lock) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Registering consumer for path {} providers present: {}", consumer.getPath(), providers.size());
+            }
+            consumers.add(consumer);
+            for (CamelServlet provider : providers) {
+                provider.connect(consumer);
+            }
         }
     }
     
     @Override
     public void unregister(HttpConsumer consumer) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Unregistering consumer for path {}", consumer.getPath());
-        }
-        consumers.remove(consumer);
-        for (CamelServlet provider : providers) {
-            provider.disconnect(consumer);
+        synchronized (lock) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Unregistering consumer for path {}", consumer.getPath());
+            }
+            consumers.remove(consumer);
+            for (CamelServlet provider : providers) {
+                provider.disconnect(consumer);
+            }
         }
     }
     
@@ -95,38 +100,46 @@ public class DefaultHttpRegistry implements HttpRegistry {
     
     @Override
     public void register(CamelServlet provider) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Registering CamelServlet with name {} consumers present: {}", provider.getServletName(), consumers.size());
-        }
-        providers.add(provider);
-        for (HttpConsumer consumer : consumers) {
-            provider.connect(consumer);
+        synchronized (lock) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Registering CamelServlet with name {} consumers present: {}", provider.getServletName(), consumers.size());
+            }
+            providers.add(provider);
+            for (HttpConsumer consumer : consumers) {
+                provider.connect(consumer);
+            }
         }
     }
 
     @Override
     public void unregister(CamelServlet provider) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Unregistering CamelServlet with name {}", provider.getServletName());
+        synchronized (lock) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Unregistering CamelServlet with name {}", provider.getServletName());
+            }
+            providers.remove(provider);
         }
-        providers.remove(provider);
     }
 
     @Override
     public CamelServlet getCamelServlet(String servletName) {
-        for (CamelServlet provider : providers) {
-            if (provider.getServletName().equals(servletName)) {
-                return provider;
+        synchronized (lock) {
+            for (CamelServlet provider : providers) {
+                if (provider.getServletName().equals(servletName)) {
+                    return provider;
+                }
             }
+            return null;
         }
-        return null;
     }
 
     public void setServlets(List<Servlet> servlets) {
-        providers.clear();
-        for (Servlet servlet : servlets) {
-            if (servlet instanceof CamelServlet) {
-                providers.add((CamelServlet) servlet);
+        synchronized (lock) {
+            providers.clear();
+            for (Servlet servlet : servlets) {
+                if (servlet instanceof CamelServlet) {
+                    providers.add((CamelServlet) servlet);
+                }
             }
         }
     }