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 <xno...@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); + } } } }