lib/openwfe/expressions/timeout.rb in ruote-0.9.18 vs lib/openwfe/expressions/timeout.rb in ruote-0.9.19
- old
+ new
@@ -1,34 +1,34 @@
#
#--
# Copyright (c) 2007-2008, John Mettraux, OpenWFE.org
# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
+#
+# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
-#
+#
# . Redistributions of source code must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-#
-# . Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
+# list of conditions and the following disclaimer.
+#
+# . Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
-#
+#
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#++
#
#
@@ -44,135 +44,135 @@
# Managing timeout for expressions like 'participant' and 'when'
#
module OpenWFE
+ #
+ # The timeout behaviour is implemented here, making it easy
+ # to mix it in into ParticipantExpression and WhenExpression.
+ #
+ module TimeoutMixin
+ include Rufus::Schedulable
+
+ attr_accessor \
+ :timeout_at,
+ :timeout_job_id
+
#
- # The timeout behaviour is implemented here, making it easy
- # to mix it in into ParticipantExpression and WhenExpression.
+ # Looks for the "timeout" attribute in its process definition
+ # and then sets the @timeout_at field (if there is a timeout).
#
- module TimeoutMixin
- include Rufus::Schedulable
+ def determine_timeout (timeout_attname=:timeout)
- attr_accessor \
- :timeout_at,
- :timeout_job_id
-
- #
- # Looks for the "timeout" attribute in its process definition
- # and then sets the @timeout_at field (if there is a timeout).
- #
- def determine_timeout (timeout_attname=:timeout)
+ #@timeout_at = nil
+ #@timeout_job_id = nil
- #@timeout_at = nil
- #@timeout_job_id = nil
+ timeout = lookup_attribute(timeout_attname, @applied_workitem)
+ return unless timeout
- timeout = lookup_attribute(timeout_attname, @applied_workitem)
- return unless timeout
+ timeout = Rufus::parse_time_string(timeout)
+ @timeout_at = Time.new.to_f + timeout
+ end
- timeout = Rufus::parse_time_string(timeout)
- @timeout_at = Time.new.to_f + timeout
- end
+ #
+ # Providing a default reschedule() implementation for the expressions
+ # that use this mixin.
+ # This default implementation just reschedules the timeout.
+ #
+ def reschedule (scheduler)
+ to_reschedule(scheduler)
+ end
- #
- # Providing a default reschedule() implementation for the expressions
- # that use this mixin.
- # This default implementation just reschedules the timeout.
- #
- def reschedule (scheduler)
- to_reschedule(scheduler)
- end
+ #
+ # Combines a call to determine_timeout and to reschedule.
+ #
+ def schedule_timeout (timeout_attname=:timeout)
- #
- # Combines a call to determine_timeout and to reschedule.
- #
- def schedule_timeout (timeout_attname=:timeout)
+ determine_timeout(timeout_attname)
+ to_reschedule(get_scheduler)
+ end
- determine_timeout(timeout_attname)
- to_reschedule(get_scheduler)
- end
+ #--
+ # Overrides the parent method to make sure a potential
+ # timeout schedules gets removed.
+ #
+ # Well... Leave that to classes that mix this in...
+ # No method override in a mixin...
+ #
+ #def reply_to_parent (workitem)
+ # unschedule_timeout()
+ # super(workitem)
+ #end
+ #++
- #--
- # Overrides the parent method to make sure a potential
- # timeout schedules gets removed.
- #
- # Well... Leave that to classes that mix this in...
- # No method override in a mixin...
- #
- #def reply_to_parent (workitem)
- # unschedule_timeout()
- # super(workitem)
- #end
- #++
+ #
+ # Places a "__timed_out__" field in the workitem.
+ #
+ def set_timedout_flag (workitem)
- #
- # Places a "__timed_out__" field in the workitem.
- #
- def set_timedout_flag (workitem)
+ workitem.attributes["__timed_out__"] = "true"
+ end
- workitem.attributes["__timed_out__"] = "true"
- end
+ #
+ # Removes any "__timed_out__" field in the workitem.
+ #
+ def remove_timedout_flag (workitem)
- #
- # Removes any "__timed_out__" field in the workitem.
- #
- def remove_timedout_flag (workitem)
+ workitem.attributes.delete("__timed_out__")
+ end
- workitem.attributes.delete("__timed_out__")
- end
+ protected
- protected
+ #
+ # prefixed with "to_" for easy mix in
+ #
+ def to_reschedule (scheduler)
- #
- # prefixed with "to_" for easy mix in
- #
- def to_reschedule (scheduler)
+ #return if @timeout_job_id
+ #
+ # already rescheduled
- #return if @timeout_job_id
- #
- # already rescheduled
+ return unless @timeout_at
+ #
+ # no need for a timeout
- return unless @timeout_at
- #
- # no need for a timeout
+ @timeout_job_id = "timeout_#{self.fei.to_s}"
- @timeout_job_id = "timeout_#{self.fei.to_s}"
+ scheduler.schedule_at(
+ @timeout_at,
+ { :schedulable => self,
+ :job_id => @timeout_job_id,
+ :do_timeout! => true,
+ :tags => [ "timeout", self.class.name ] })
- scheduler.schedule_at(
- @timeout_at,
- { :schedulable => self,
- :job_id => @timeout_job_id,
- :do_timeout! => true,
- :tags => [ "timeout", self.class.name ] })
+ ldebug do
+ "to_reschedule() will timeout at " +
+ "#{Rufus::to_iso8601_date(@timeout_at)}" +
+ " @timeout_job_id is #{@timeout_job_id}" +
+ " (oid #{object_id})"
+ end
- ldebug do
- "to_reschedule() will timeout at " +
- "#{Rufus::to_iso8601_date(@timeout_at)}" +
- " @timeout_job_id is #{@timeout_job_id}" +
- " (oid #{object_id})"
- end
+ #store_itself()
+ #
+ # done in the including expression
+ end
- #store_itself()
- #
- # done in the including expression
- end
+ #
+ # Unschedules the timeout
+ #
+ def unschedule_timeout ()
- #
- # Unschedules the timeout
- #
- def unschedule_timeout ()
+ ldebug do
+ "unschedule_timeout() " +
+ "@timeout_job_id is #{@timeout_job_id}" +
+ " (oid #{object_id})"
+ end
- ldebug do
- "unschedule_timeout() " +
- "@timeout_job_id is #{@timeout_job_id}" +
- " (oid #{object_id})"
- end
+ #ldebug_callstack "unschedule_timeout()"
- #ldebug_callstack "unschedule_timeout()"
-
- get_scheduler.unschedule(@timeout_job_id) \
- if @timeout_job_id
- end
- end
+ get_scheduler.unschedule(@timeout_job_id) \
+ if @timeout_job_id
+ end
+ end
end