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:42 UTC

[camel] branch master updated: CAMEL-14639: added synchronized blocks so that registry is now thread safe (#3607)

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 9d156e7  CAMEL-14639: added synchronized blocks so that registry is now thread safe (#3607)
9d156e7 is described below

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

    CAMEL-14639: added synchronized blocks so that registry is now thread safe (#3607)
---
 .../component/servlet/DefaultHttpRegistry.java     | 72 +++++++++++++---------
 1 file changed, 43 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 8aa044f..6a5fc74 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
@@ -34,6 +34,8 @@ public class DefaultHttpRegistry implements HttpRegistry {
 
     private static Map<String, HttpRegistry> registries = new HashMap<>();
     
+    private final Object lock = new Object();
+
     private final Set<HttpConsumer> consumers;
     private final Set<CamelServlet> providers;
 
@@ -63,23 +65,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);
+            }
         }
     }
     
@@ -96,38 +102,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);
+                }
             }
         }
     }