Author: midon
Date: Fri Mar 20 19:25:02 2009
New Revision: 756723

URL: http://svn.apache.org/viewvc?rev=756723&view=rev
Log:
ODE-551: Timeout for Check Job should be equal to mex timeout

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

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=756723&r1=756722&r2=756723&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
 Fri Mar 20 19:25:02 2009
@@ -65,6 +65,7 @@
 import org.apache.ode.bpel.runtime.channels.FaultData;
 import org.apache.ode.jacob.soup.ReplacementMap;
 import org.apache.ode.utils.ObjectPrinter;
+import org.apache.ode.utils.Properties;
 import org.apache.ode.utils.msg.MessageBundle;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -1042,4 +1043,20 @@
                return (activeInstances != null && activeInstances.size() > 0);
        }
 
+    public long getTimeout(OPartnerLink partnerLink) {
+        // OPartnerLink, PartnerLinkPartnerRoleImpl
+        final PartnerLinkPartnerRoleImpl linkPartnerRole = 
_partnerRoles.get(partnerLink);
+        long timeout = Properties.DEFAULT_MEX_TIMEOUT;
+        String timeout_property = 
_pconf.getEndpointProperties(linkPartnerRole._initialEPR).get(Properties.PROP_MEX_TIMEOUT);
+        if (timeout_property != null) {
+            try {
+                timeout = Long.parseLong(timeout_property);
+            } catch (NumberFormatException e) {
+                if (__log.isWarnEnabled())
+                    __log.warn("Mal-formatted Property: [" + 
Properties.PROP_MEX_TIMEOUT + "=" + timeout_property + "] Default value (" + 
timeout + ") will be used");
+            }
+        }
+
+        return timeout;
+    }
 }

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=756723&r1=756722&r2=756723&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
 Fri Mar 20 19:25:02 2009
@@ -774,7 +774,7 @@
                 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);
+                scheduleInvokeCheck(mex, partnerLink.partnerLink);
                 _bpelProcess._engine._contexts.mexContext.invokePartner(mex);
             } else {
                 __log.error("Couldn't find endpoint for partner EPR " + 
DOMUtils.domToString(partnerEPR));
@@ -826,17 +826,19 @@
        return _bpelProcess;
     }
 
-    private void scheduleInvokeCheck(PartnerRoleMessageExchangeImpl mex) {
+    private void scheduleInvokeCheck(PartnerRoleMessageExchangeImpl mex, 
OPartnerLink partnerLink) {
         boolean isTwoWay = mex.getMessageExchangePattern() ==
                 
org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern.REQUEST_RESPONSE;
         if (!_bpelProcess.isInMemory() && isTwoWay) {
-            if (__log.isDebugEnabled()) __log.debug("Creating invocation check 
event for mexid " + mex.getMessageExchangeId());
             WorkEvent event = new WorkEvent();
             event.setMexId(mex.getMessageExchangeId());
             event.setProcessId(_bpelProcess.getPID());
             event.setInMem(false);
             event.setType(WorkEvent.Type.INVOKE_CHECK);
-            Date future = new Date(System.currentTimeMillis() + (180 * 1000));
+            // use a greater timeout to make sure the check job does not get 
executed while the service invocation is still waiting for a response
+            final long timeout = (long) 
(getBpelProcess().getTimeout(partnerLink)*1.5);
+            if (__log.isDebugEnabled()) __log.debug("Creating invocation check 
event in "+timeout+"ms for mexid " + mex.getMessageExchangeId());
+            Date future = new Date(System.currentTimeMillis() + timeout);
             String jobId = 
_bpelProcess._engine._contexts.scheduler.schedulePersistedJob(event.getDetail(),
 future);
             mex.setProperty("invokeCheckJobId", jobId);
         }


Reply via email to