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