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 2015/07/31 09:35:42 UTC

camel git commit: [CAMEL-9033] Unregister HttpHandler on Consumer stop

Repository: camel
Updated Branches:
  refs/heads/master 57989d7d1 -> 62e33ddac


[CAMEL-9033] Unregister HttpHandler on Consumer stop


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/62e33dda
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/62e33dda
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/62e33dda

Branch: refs/heads/master
Commit: 62e33ddac0a08058d03a3ff6c42b46f3f037130c
Parents: 57989d7
Author: Thomas Diesler <th...@jboss.com>
Authored: Thu Jul 30 14:23:09 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jul 31 09:42:18 2015 +0200

----------------------------------------------------------------------
 .../component/undertow/UndertowComponent.java   | 36 ++++++++-----
 .../component/undertow/UndertowConsumer.java    | 54 ++++++++++++--------
 .../camel/component/undertow/UndertowHost.java  |  7 ++-
 .../component/undertow/UndertowHostFactory.java | 44 ----------------
 4 files changed, 62 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/62e33dda/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
index 489d2cf..01b9684 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
@@ -17,12 +17,14 @@
 package org.apache.camel.component.undertow;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.HashMap;
 import java.util.Map;
 
 import io.undertow.Handlers;
 import io.undertow.Undertow;
 import io.undertow.server.handlers.PathHandler;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
@@ -57,7 +59,7 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu
         URI endpointUri = URISupport.createRemainingURI(uriHttpUriAddress, parameters);
 
         // create the endpoint first
-        UndertowEndpoint endpoint = new UndertowEndpoint(endpointUri.toString(), this);
+        UndertowEndpoint endpoint = createEndpointInstance(endpointUri, this);
         endpoint.setUndertowHttpBinding(undertowHttpBinding);
         setProperties(endpoint, parameters);
 
@@ -76,6 +78,10 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu
         return endpoint;
     }
 
+    protected UndertowEndpoint createEndpointInstance(URI endpointUri, UndertowComponent component) throws URISyntaxException {
+        return new UndertowEndpoint(endpointUri.toString(), component);
+    }
+
     @Override
     public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate,
                                    String consumes, String produces, Map<String, Object> parameters) throws Exception {
@@ -158,7 +164,10 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu
         }
         if (serversRegistry.get(port).isEmpty()) {
             //if there no Consumer left, we can shut down server
-            serversRegistry.get(port).getServer().stop();
+            Undertow server = serversRegistry.get(port).getServer();
+            if (server != null) {
+                server.stop();
+            }
             serversRegistry.remove(port);
         } else {
             //call startServer to rebuild otherwise
@@ -179,18 +188,7 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu
         undertowRegistry.setServer(newServer);
     }
 
-    public UndertowHttpBinding getUndertowHttpBinding() {
-        return undertowHttpBinding;
-    }
-
-    /**
-     * To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
-     */
-    public void setUndertowHttpBinding(UndertowHttpBinding undertowHttpBinding) {
-        this.undertowHttpBinding = undertowHttpBinding;
-    }
-
-    private Undertow rebuildServer(UndertowRegistry registy) {
+    protected Undertow rebuildServer(UndertowRegistry registy) {
         Undertow.Builder result = Undertow.builder();
         if (registy.getSslContext() != null) {
             result = result.addHttpsListener(registy.getPort(), registy.getHost(), registy.getSslContext());
@@ -213,4 +211,14 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu
         return result.build();
     }
 
+    public UndertowHttpBinding getUndertowHttpBinding() {
+        return undertowHttpBinding;
+    }
+
+    /**
+     * To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
+     */
+    public void setUndertowHttpBinding(UndertowHttpBinding undertowHttpBinding) {
+        this.undertowHttpBinding = undertowHttpBinding;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/62e33dda/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
index b78ea04..ae6ce7a 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.undertow;
 import java.net.URI;
 
 import io.undertow.server.HttpHandler;
+
 import org.apache.camel.Processor;
 import org.apache.camel.component.undertow.handlers.HttpCamelHandler;
 import org.apache.camel.impl.DefaultConsumer;
@@ -32,6 +33,8 @@ public class UndertowConsumer extends DefaultConsumer {
 
     private static final Logger LOG = LoggerFactory.getLogger(UndertowConsumer.class);
 
+    private UndertowHost undertowHost;
+
     public UndertowConsumer(UndertowEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
     }
@@ -41,19 +44,25 @@ public class UndertowConsumer extends DefaultConsumer {
         return (UndertowEndpoint) super.getEndpoint();
     }
 
+    public UndertowHost getUndertowHost() {
+        if (undertowHost == null) {
+            undertowHost = createUndertowHost();
+        }
+        return undertowHost;
+    }
+
+    protected UndertowHost createUndertowHost() {
+        return new DefaultUndertowHost();
+    }
+
     @Override
     protected void doStart() throws Exception {
         super.doStart();
         LOG.debug("Undertow consumer is starting");
         getEndpoint().getComponent().registerConsumer(this);
 
-        UndertowHostFactory factory = UndertowHostFactory.Locator.getUndertowHostFactory();
-        if (factory == null) {
-            factory = new DefaultUndertowHostFactory();
-        }
-
         URI httpUri = getEndpoint().getHttpURI();
-        UndertowHost host = factory.createUndertowHost();
+        UndertowHost host = getUndertowHost();
 
         host.validateEndpointURI(httpUri);
         host.registerHandler(httpUri.getPath(), new HttpCamelHandler(this));
@@ -62,25 +71,30 @@ public class UndertowConsumer extends DefaultConsumer {
     @Override
     protected void doStop() {
         LOG.debug("Undertow consumer is stopping");
+
+        URI httpUri = getEndpoint().getHttpURI();
+        UndertowHost host = getUndertowHost();
+
+        host.unregisterHandler(httpUri.getPath());
+
         getEndpoint().getComponent().unregisterConsumer(this);
     }
 
-    class DefaultUndertowHostFactory implements UndertowHostFactory {
+    class DefaultUndertowHost implements UndertowHost {
+
+        @Override
+        public void validateEndpointURI(URI httpURI) {
+            // all URIs are good
+        }
+
+        @Override
+        public void registerHandler(String path, HttpHandler handler) {
+            getEndpoint().getComponent().startServer(UndertowConsumer.this);
+        }
 
         @Override
-        public UndertowHost createUndertowHost() {
-            return new UndertowHost() {
-
-                @Override
-                public void validateEndpointURI(URI httpURI) {
-                    // all URIs are good
-                }
-
-                @Override
-                public void registerHandler(String path, HttpHandler handler) {
-                    getEndpoint().getComponent().startServer(UndertowConsumer.this);
-                }
-            };
+        public void unregisterHandler(String path) {
+            // do nothing
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/62e33dda/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHost.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHost.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHost.java
index be59c36..bd79986 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHost.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHost.java
@@ -32,7 +32,12 @@ public interface UndertowHost {
     void validateEndpointURI(URI httpURI);
 
     /**
-     * register a handler on the given path
+     * Register a handler on the given path
      */
     void registerHandler(String path, HttpHandler handler);
+
+    /**
+     * Unregister a handler on the given path
+     */
+    void unregisterHandler(String path);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/62e33dda/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostFactory.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostFactory.java
deleted file mode 100644
index b5c6f74..0000000
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.undertow;
-
-/**
- * A factory to create an undertow host
- */
-public interface UndertowHostFactory {
-
-    /**
-     * Create or get an undertow host
-     */
-    UndertowHost createUndertowHost();
-
-    public final class Locator {
-
-        private static UndertowHostFactory globalFactory;
-
-        private Locator() {
-        }
-
-        public static UndertowHostFactory getUndertowHostFactory() {
-            return globalFactory;
-        }
-
-        public static void setUndertowHostFactory(UndertowHostFactory factory) {
-            globalFactory = factory;
-        }
-    }
-}
\ No newline at end of file