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