Author: rr
Date: Sat Apr 3 10:46:50 2010
New Revision: 930505
URL: http://svn.apache.org/viewvc?rev=930505&view=rev
Log:
ODE-798: Job failed on REPLY in P2P communication fix
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=930505&r1=930504&r2=930505&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
Sat Apr 3 10:46:50 2010
@@ -69,6 +69,7 @@ import org.apache.ode.bpel.iapi.PartnerR
import org.apache.ode.bpel.iapi.Scheduler;
import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
+import org.apache.ode.bpel.iapi.MessageExchange.Status;
import org.apache.ode.bpel.iapi.ProcessConf.CLEANUP_CATEGORY;
import org.apache.ode.bpel.iapi.ProcessConf.PartnerRoleConfig;
import org.apache.ode.bpel.intercept.InterceptorInvoker;
@@ -522,35 +523,40 @@ public class BpelRuntimeContextImpl impl
if (BpelProcess.__log.isDebugEnabled()) {
__log.debug("Replying to a p2p mex, myrole " + m + " -
partnerole " + pmex);
}
- try {
- switch (m.getStatus()) {
- case FAILURE:
- // We can't seem to get the failure out of the myrole
mex?
-
pmex.replyWithFailure(MessageExchange.FailureType.OTHER, "operation failed",
null);
- break;
- case FAULT:
- Fault fault =
pmex.getOperation().getFault(m.getFault().getLocalPart());
- if (fault == null) {
- __log.error("process " + _bpelProcess + "
instance " + _iid + " thrown unmapped fault in p2p communication " +
m.getFault() + " " + m.getFaultExplanation() + " - converted to failure");
-
pmex.replyWithFailure(MessageExchange.FailureType.OTHER, "process thrown
unmapped fault in p2p communication " + m.getFault() + " " +
m.getFaultExplanation() + " - converted to failure",
m.getFaultResponse().getMessage());
- } else {
- Message faultRes =
pmex.createMessage(pmex.getOperation().getFault(m.getFault().getLocalPart())
- .getMessage().getQName());
-
faultRes.setMessage(m.getResponse().getMessage());
- pmex.replyWithFault(m.getFault(), faultRes);
- }
- break;
- case RESPONSE:
- Message response =
pmex.createMessage(pmex.getOperation().getOutput().getMessage().getQName());
- response.setMessage(m.getResponse().getMessage());
- pmex.reply(response);
- break;
- default:
- __log.warn("Unexpected state: " + m.getStatus());
- break;
+
+ if (pmex.getStatus() == Status.ASYNC || pmex.getStatus() ==
Status.REQUEST) {
+ try {
+ switch (m.getStatus()) {
+ case FAILURE:
+ // We can't seem to get the failure out of the
myrole mex?
+
pmex.replyWithFailure(MessageExchange.FailureType.OTHER, "operation failed",
null);
+ break;
+ case FAULT:
+ Fault fault =
pmex.getOperation().getFault(m.getFault().getLocalPart());
+ if (fault == null) {
+ __log.error("process " + _bpelProcess +
" instance " + _iid + " thrown unmapped fault in p2p communication " +
m.getFault() + " " + m.getFaultExplanation() + " - converted to failure");
+
pmex.replyWithFailure(MessageExchange.FailureType.OTHER, "process thrown
unmapped fault in p2p communication " + m.getFault() + " " +
m.getFaultExplanation() + " - converted to failure",
m.getFaultResponse().getMessage());
+ } else {
+ Message faultRes =
pmex.createMessage(pmex.getOperation().getFault(m.getFault().getLocalPart())
+ .getMessage().getQName());
+
faultRes.setMessage(m.getResponse().getMessage());
+ pmex.replyWithFault(m.getFault(), faultRes);
+ }
+ break;
+ case RESPONSE:
+ Message response =
pmex.createMessage(pmex.getOperation().getOutput().getMessage().getQName());
+ response.setMessage(m.getResponse().getMessage());
+ pmex.reply(response);
+ break;
+ default:
+ __log.warn("Unexpected state: " + m.getStatus());
+ break;
+ }
+ } finally {
+
mex.release(_bpelProcess.isCleanupCategoryEnabled(m.getStatus() ==
MessageExchange.Status.RESPONSE, CLEANUP_CATEGORY.MESSAGES));
}
- } finally {
-
mex.release(_bpelProcess.isCleanupCategoryEnabled(m.getStatus() ==
MessageExchange.Status.RESPONSE, CLEANUP_CATEGORY.MESSAGES));
+ } else {
+ __log.warn("Can't send response to a p2p mex: " + mex + "
partner mex: " + pmex);
}
} else {
checkInvokeExternalPermission();
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java?rev=930505&r1=930504&r2=930505&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java
Sat Apr 3 10:46:50 2010
@@ -165,7 +165,7 @@ public class PartnerRoleMessageExchangeI
public String toString() {
try {
return "{PartnerRoleMex#" + getMessageExchangeId() + " [PID " +
getCaller() + "] calling " + _epr + "."
- + getOperationName() + "(...)}";
+ + getOperationName() + "(...) Status " + getStatus() + "}";
} catch (Throwable t) {
return "{PartnerRoleMex#????}";