You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2008/07/16 19:33:39 UTC
svn commit: r677356 - in
/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine:
BpelProcess.java BpelRuntimeContextImpl.java WorkEvent.java
Author: mriou
Date: Wed Jul 16 10:33:38 2008
New Revision: 677356
URL: http://svn.apache.org/viewvc?rev=677356&view=rev
Log:
First cut at checking behind invokes to see if they completed.
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
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/WorkEvent.java
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java?rev=677356&r1=677355&r2=677356&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java Wed Jul 16 10:33:38 2008
@@ -41,12 +41,7 @@
import org.apache.ode.bpel.evt.ProcessInstanceEvent;
import org.apache.ode.bpel.explang.ConfigurationException;
import org.apache.ode.bpel.explang.EvaluationException;
-import org.apache.ode.bpel.iapi.BpelEngineException;
-import org.apache.ode.bpel.iapi.Endpoint;
-import org.apache.ode.bpel.iapi.EndpointReference;
-import org.apache.ode.bpel.iapi.MessageExchange;
-import org.apache.ode.bpel.iapi.PartnerRoleChannel;
-import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.iapi.*;
import org.apache.ode.bpel.intercept.InterceptorInvoker;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
import org.apache.ode.bpel.o.OElementVarType;
@@ -370,6 +365,14 @@
}
MyRoleMessageExchangeImpl mex = (MyRoleMessageExchangeImpl) _engine.getMessageExchange(we.getMexId());
invokeProcess(mex);
+ } else if (we.getType().equals(WorkEvent.Type.INVOKE_CHECK)) {
+ if (__log.isDebugEnabled()) __log.debug("handleWorkEvent: InvokeCheck event for mexid " + we.getMexId());
+
+ PartnerRoleMessageExchange mex = (PartnerRoleMessageExchange) _engine.getMessageExchange(we.getMexId());
+ if (mex.getStatus() == MessageExchange.Status.ASYNC || mex.getStatus() == MessageExchange.Status.REQUEST) {
+ mex.replyWithFailure(MessageExchange.FailureType.COMMUNICATION_ERROR,
+ "Dangling invocation (mexId=" + we.getMexId() + "), forcing it into a failed state.", null);
+ }
} else {
// Instance level events
ProcessInstanceDAO procInstance = getProcessDAO().getInstance(we.getIID());
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=677356&r1=677355&r2=677356&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 Wed Jul 16 10:33:38 2008
@@ -21,10 +21,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
import javax.wsdl.Operation;
import javax.xml.namespace.QName;
@@ -772,6 +769,8 @@
if (partnerEpr != null) {
mexDao.setEPR(partnerEpr.toXML().getDocumentElement());
mex.setStatus(MessageExchange.Status.REQUEST);
+ // Assuming an unreliable protocol, we schedule a task to check if recovery mode will be needed
+ scheduleInvokeCheck(mex);
_bpelProcess._engine._contexts.mexContext.invokePartner(mex);
} else {
__log.error("Couldn't find endpoint for partner EPR " + DOMUtils.domToString(partnerEPR));
@@ -809,6 +808,20 @@
return mexDao.getMessageExchangeId();
}
+ private void scheduleInvokeCheck(PartnerRoleMessageExchangeImpl mex) {
+ boolean isTwoWay = mex.getMessageExchangePattern() == org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern.REQUEST_RESPONSE;
+ if (!_bpelProcess.isInMemory() && isTwoWay) {
+ WorkEvent event = new WorkEvent();
+ event.setMexId(mex.getMessageExchangeId());
+ event.setProcessId(_bpelProcess.getPID());
+ event.setInMem(false);
+ event.setType(WorkEvent.Type.INVOKE_CHECK);
+ Calendar timer = Calendar.getInstance();
+ timer.add(Calendar.SECOND, 65);
+ _bpelProcess._engine._contexts.scheduler.schedulePersistedJob(event.getDetail(), timer.getTime());
+ }
+ }
+
private void buildOutgoingMessage(MessageDAO message, Element outgoingElmt) {
if (outgoingElmt == null) return;
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/WorkEvent.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/WorkEvent.java?rev=677356&r1=677355&r2=677356&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/WorkEvent.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/WorkEvent.java Wed Jul 16 10:33:38 2008
@@ -60,7 +60,7 @@
}
public enum Type {
- TIMER, RESUME, INVOKE_RESPONSE, MATCHER, INVOKE_INTERNAL
+ TIMER, RESUME, INVOKE_RESPONSE, MATCHER, INVOKE_INTERNAL, INVOKE_CHECK
}
public String getChannel() {