2009/3/13 Assaf Arkin <[email protected]>:
> When doing request/response with SOAP over HTTP, the quality of service
> guarantee is that of HTTP, which doesn't allow requests to be held
> indefinitely, so Ode should reject the request if it can't service the
> operation quickly enough.
>
> If this was one-way over asynchronous transport, queuing the message and
> handling it 10 minutes later would be the correct approach.
Yes, this is how I see it too.
So I did a patch for handling in-out operations quickly for ODE1X. It
was partly implemented before.
In-only operations are queued as before.
It works like this: when ODE doesn't find routing for a given in-out
request, it replies with failure.
Regards,
--
RafaĆ Rusin
http://www.touk.pl
http://www.mimuw.edu.pl/~rrusin
Index: bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java
===================================================================
--- bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java (revision 53090)
+++ bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java (working copy)
@@ -183,7 +183,7 @@
}
public boolean isAsynchronous() {
- return true;
+ return getPattern() == MessageExchangePattern.REQUEST_ONLY;
}
public void release(boolean instanceSucceeded) {
Index: bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java
===================================================================
--- bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java (revision 53090)
+++ bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java (working copy)
@@ -243,6 +243,7 @@
public void noRoutingMatch(MyRoleMessageExchangeImpl mex, List<RoutingInfo> routings) {
if (!mex.isAsynchronous()) {
mex.setFailure(MessageExchange.FailureType.NOMATCH, "No process instance matching correlation keys.", null);
+ _process._engine._contexts.mexContext.onAsyncReply(mex);
} else {
// enqueue message with the last message route, as per the comments in caller (@see BpelProcess.invokeProcess())
RoutingInfo routing =