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/09/05 16:45:12 UTC

camel git commit: CAMEL-9115: camel-restlet - Should doneUoW using restlet callback

Repository: camel
Updated Branches:
  refs/heads/camel-2.15.x e081e569a -> bffedde0f


CAMEL-9115: camel-restlet - Should doneUoW using restlet callback


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

Branch: refs/heads/camel-2.15.x
Commit: bffedde0fa394b8efd77fd4c6c11aaddc95a9fa2
Parents: e081e56
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Sep 5 16:45:37 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Sep 5 16:45:57 2015 +0200

----------------------------------------------------------------------
 .../component/restlet/RestletConsumer.java      | 25 +++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/bffedde0/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java
index fa1f847..227f43d 100644
--- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java
+++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java
@@ -23,6 +23,7 @@ import org.apache.camel.impl.DefaultConsumer;
 import org.restlet.Request;
 import org.restlet.Response;
 import org.restlet.Restlet;
+import org.restlet.Uniform;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,9 +71,14 @@ public class RestletConsumer extends DefaultConsumer {
                     }
                     binding.populateRestletResponseFromExchange(exchange, response);
 
+                    // resetlet will call the callback when its done sending where it would be safe
+                    // to call doneUoW
+                    Uniform callback = newResponseUniform(exchange);
+                    response.setOnError(callback);
+                    response.setOnSent(callback);
+
                 } catch (Throwable e) {
                     getExceptionHandler().handleException("Error processing request", exchange, e);
-                } finally {
                     if (exchange != null) {
                         doneUoW(exchange);
                     }
@@ -81,6 +87,23 @@ public class RestletConsumer extends DefaultConsumer {
         };
     }
 
+    /**
+     * Creates a new {@link org.restlet.Uniform} callback that restlet calls when its done sending the reply message.
+     * <p/>
+     * We use this to defer done on the exchange {@link org.apache.camel.spi.UnitOfWork} where resources is safe to be
+     * cleaned up as part of the done process.
+     */
+    private Uniform newResponseUniform(final Exchange exchange) {
+        return new Uniform() {
+            @Override
+            public void handle(Request request, Response response) {
+                if (exchange != null) {
+                    doneUoW(exchange);
+                }
+            }
+        };
+    }
+
     @Override
     protected void doStart() throws Exception {
         super.doStart();