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#????}";


Reply via email to