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();