You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by rr...@apache.org on 2009/10/19 15:43:11 UTC

svn commit: r826669 - /ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java

Author: rr
Date: Mon Oct 19 13:43:10 2009
New Revision: 826669

URL: http://svn.apache.org/viewvc?rev=826669&view=rev
Log:
ODE-684: fix

Modified:
    ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java

Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java?rev=826669&r1=826668&r2=826669&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java Mon Oct 19 13:43:10 2009
@@ -32,6 +32,7 @@
 import org.apache.ode.bpel.runtime.channels.TerminationChannelListener;
 import org.apache.ode.bpel.runtime.channels.TimerResponseChannel;
 import org.apache.ode.bpel.runtime.channels.TimerResponseChannelListener;
+import org.apache.ode.jacob.ChannelListener;
 import org.apache.ode.jacob.SynchChannel;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -122,7 +123,7 @@
 
         /**
          * Concretion constructor.
-         * @param alarm date at which time to fire
+         * @param alarm date at which time to fire. If null, then we wait forever (for control channels handling)
          */
         WAIT(Calendar alarm) {
             _alarm = alarm;
@@ -131,10 +132,28 @@
         public void run() {
             Calendar now = Calendar.getInstance();
 
-            if (now.before(_alarm)) {
+            Set<ChannelListener> listeners = new EventHandlerControlChannelListener(_cc) {
+                private static final long serialVersionUID = -7750428941445331236L;
+
+                public void stop() {
+                    _psc.completed(null, _comps);
+                }
+
+            }.or(new TerminationChannelListener(_tc) {
+                private static final long serialVersionUID = 6100105997983514609L;
+
+                public void terminate() {
+                    _psc.completed(null, _comps);
+                }
+            });
+
+            if (_alarm == null) {
+                object(false, listeners);
+            } else if (now.before(_alarm)) {
                 TimerResponseChannel trc = newChannel(TimerResponseChannel.class);
                 getBpelRuntimeContext().registerTimer(trc,_alarm.getTime());
-                object(false,new TimerResponseChannelListener(trc){
+                
+                listeners.add(new TimerResponseChannelListener(trc){
                     private static final long serialVersionUID = 1110683632756756017L;
 
                     public void onTimeout() {
@@ -145,20 +164,8 @@
                     public void onCancel() {
                         _psc.completed(null, _comps);
                     }
-                }.or(new EventHandlerControlChannelListener(_cc) {
-                    private static final long serialVersionUID = -7750428941445331236L;
-
-                    public void stop() {
-                        _psc.completed(null, _comps);
-                    }
-
-                }.or(new TerminationChannelListener(_tc) {
-                    private static final long serialVersionUID = 6100105997983514609L;
-
-                    public void terminate() {
-                        _psc.completed(null, _comps);
-                    }
-                })));
+                });
+                object(false, listeners);
             } else /* now is later then alarm time */ {
                 // If the alarm has passed we fire the nested activity
                 ActivityInfo child = new ActivityInfo(genMonotonic(),
@@ -226,7 +233,12 @@
                         }
                         instance(new WAIT(next));
                     } else {
-                        _psc.completed(faultData, _comps);
+                        if (faultData != null) {
+                            //propagate completion into bounding scope only if we got fault during processing onAlarm
+                            _psc.completed(faultData, _comps);
+                        } else {
+                            instance(new WAIT(null));
+                        }
                     }
                 }