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