openwferu 0.9.15 → 0.9.16
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +4 -2
- data/lib/openwfe/engine/engine.rb +143 -25
- data/lib/openwfe/engine/file_persisted_engine.rb +3 -3
- data/lib/openwfe/expool/errorjournal.rb +48 -25
- data/lib/openwfe/expool/expressionpool.rb +77 -106
- data/lib/openwfe/expool/expstorage.rb +6 -5
- data/lib/openwfe/expool/threadedexpstorage.rb +190 -0
- data/lib/openwfe/expool/yamlexpstorage.rb +5 -150
- data/lib/openwfe/expressions/condition.rb +6 -6
- data/lib/openwfe/expressions/environment.rb +7 -2
- data/lib/openwfe/expressions/expressionmap.rb +14 -0
- data/lib/openwfe/expressions/fe_command.rb +2 -1
- data/lib/openwfe/expressions/fe_concurrence.rb +40 -18
- data/lib/openwfe/expressions/fe_cron.rb +14 -11
- data/lib/openwfe/expressions/fe_cursor.rb +2 -3
- data/lib/openwfe/expressions/fe_define.rb +34 -31
- data/lib/openwfe/expressions/fe_equals.rb +11 -21
- data/lib/openwfe/expressions/fe_filter_definition.rb +0 -2
- data/lib/openwfe/expressions/fe_fqv.rb +1 -3
- data/lib/openwfe/expressions/fe_if.rb +37 -12
- data/lib/openwfe/expressions/fe_iterator.rb +1 -1
- data/lib/openwfe/expressions/fe_listen.rb +147 -28
- data/lib/openwfe/expressions/fe_losfor.rb +13 -1
- data/lib/openwfe/expressions/fe_misc.rb +70 -11
- data/lib/openwfe/expressions/fe_participant.rb +3 -3
- data/lib/openwfe/expressions/fe_reserve.rb +1 -1
- data/lib/openwfe/expressions/fe_save.rb +11 -12
- data/lib/openwfe/expressions/fe_sequence.rb +22 -29
- data/lib/openwfe/expressions/fe_sleep.rb +11 -7
- data/lib/openwfe/expressions/fe_subprocess.rb +24 -10
- data/lib/openwfe/expressions/fe_value.rb +35 -15
- data/lib/openwfe/expressions/fe_when.rb +2 -4
- data/lib/openwfe/expressions/flowexpression.rb +73 -37
- data/lib/openwfe/expressions/merge.rb +2 -4
- data/lib/openwfe/expressions/raw.rb +40 -31
- data/lib/openwfe/expressions/raw_prog.rb +18 -9
- data/lib/openwfe/expressions/raw_xml.rb +1 -8
- data/lib/openwfe/expressions/simplerep.rb +27 -5
- data/lib/openwfe/expressions/time.rb +45 -15
- data/lib/openwfe/expressions/timeout.rb +2 -1
- data/lib/openwfe/expressions/wtemplate.rb +2 -2
- data/lib/openwfe/flowexpressionid.rb +62 -16
- data/lib/openwfe/listeners/listener.rb +28 -37
- data/lib/openwfe/listeners/listeners.rb +1 -1
- data/lib/openwfe/listeners/socketlisteners.rb +7 -15
- data/lib/openwfe/logging.rb +5 -4
- data/lib/openwfe/{rest → orest}/controlclient.rb +3 -5
- data/lib/openwfe/{rest → orest}/definitions.rb +0 -2
- data/lib/openwfe/{rest → orest}/exception.rb +0 -0
- data/lib/openwfe/{rest → orest}/oldrestservlet.rb +1 -1
- data/lib/openwfe/{rest → orest}/osocket.rb +1 -1
- data/lib/openwfe/{rest → orest}/restclient.rb +0 -2
- data/lib/openwfe/orest/workitem.rb +206 -0
- data/lib/openwfe/{rest → orest}/worklistclient.rb +15 -5
- data/lib/openwfe/{rest → orest}/xmlcodec.rb +4 -1
- data/lib/openwfe/participants/enoparticipants.rb +4 -14
- data/lib/openwfe/participants/participantmap.rb +16 -12
- data/lib/openwfe/participants/participants.rb +46 -1
- data/lib/openwfe/participants/socketparticipants.rb +1 -6
- data/lib/openwfe/service.rb +15 -6
- data/lib/openwfe/storage/yamlcustom.rb +3 -0
- data/lib/openwfe/storage/yamlfilestorage.rb +3 -1
- data/lib/openwfe/util/dollar.rb +21 -14
- data/lib/openwfe/util/lru.rb +29 -10
- data/lib/openwfe/util/observable.rb +4 -1
- data/lib/openwfe/util/otime.rb +3 -0
- data/lib/openwfe/util/scheduler.rb +346 -114
- data/lib/openwfe/utils.rb +67 -13
- data/lib/openwfe/version.rb +1 -1
- data/lib/openwfe/workitem.rb +22 -165
- data/lib/openwfe/worklist/oldrest.rb +2 -2
- data/test/bm/bm_1_xml_vs_prog.rb +56 -0
- data/test/{ft_26_load.rb → bm/ft_26_load.rb} +0 -0
- data/test/{ft_26b_load.rb → bm/ft_26b_load.rb} +0 -0
- data/test/{ft_26c_load.rb → bm/ft_26c_load.rb} +16 -4
- data/test/clone_test.rb +62 -0
- data/test/cron_test.rb +56 -1
- data/test/cronline_test.rb +17 -8
- data/test/description_test.rb +57 -0
- data/test/dollar_test.rb +17 -6
- data/test/eno_test.rb +22 -9
- data/test/fe_lookup_att_test.rb +50 -0
- data/test/fei_test.rb +18 -9
- data/test/flowtestbase.rb +24 -2
- data/test/ft_0.rb +10 -12
- data/test/ft_0e_multibody.rb +34 -0
- data/test/ft_10_loop.rb +4 -6
- data/test/ft_11_ppd.rb +5 -20
- data/test/ft_14b_subprocess.rb +2 -2
- data/test/ft_15_iterator.rb +56 -4
- data/test/ft_15b_iterator.rb +48 -0
- data/test/ft_16_fqv.rb +18 -3
- data/test/ft_23c_wait.rb +7 -5
- data/test/ft_25_cancel.rb +5 -3
- data/test/ft_27_getflowpos.rb +14 -11
- data/test/ft_28_fileparticipant.rb +3 -4
- data/test/ft_2_concurrence.rb +8 -12
- data/test/ft_2b_concurrence.rb +3 -2
- data/test/ft_30_socketlistener.rb +5 -6
- data/test/ft_32c_journal.rb +2 -2
- data/test/ft_32d_journal.rb +5 -6
- data/test/ft_33_description.rb +8 -3
- data/test/ft_34_cancelwfid.rb +3 -3
- data/test/ft_38_tag.rb +7 -10
- data/test/ft_39_reserve.rb +4 -2
- data/test/ft_3_equals.rb +18 -13
- data/test/ft_44b_restore.rb +2 -6
- data/test/ft_49_condition.rb +16 -12
- data/test/ft_4_misc.rb +51 -12
- data/test/ft_50_xml_attribute.rb +1 -1
- data/test/ft_54_listen.rb +96 -10
- data/test/ft_54b_listen.rb +68 -0
- data/test/ft_55_ptimeout.rb +1 -2
- data/test/ft_58_ejournal.rb +8 -33
- data/test/ft_59_ps.rb +2 -3
- data/test/ft_59b_ps_for_pat.rb +59 -0
- data/test/ft_5_time.rb +45 -4
- data/test/ft_60_ecancel.rb +7 -7
- data/test/ft_61_elsub.rb +1 -1
- data/test/ft_64_alias.rb +1 -1
- data/test/ft_67_schedlaunch.rb +29 -16
- data/test/ft_69_cancelmissing.rb +1 -1
- data/test/ft_6_lambda.rb +8 -6
- data/test/ft_70_lookupvar.rb +2 -2
- data/test/ft_71_log.rb +60 -0
- data/test/ft_72_lookup_processes.rb +79 -0
- data/test/ft_73_cancel_sub.rb +144 -0
- data/test/ft_74_block_and_workitem_dup.rb +63 -0
- data/test/ft_75_ruby_attributes.rb +87 -0
- data/test/ft_76_merge_isolate.rb +90 -0
- data/test/ft_7_lose.rb +2 -1
- data/test/ft_tests.rb +9 -0
- data/test/lookup_att_test.rb +90 -0
- data/test/misc_test.rb +33 -50
- data/test/orest_test.rb +1 -1
- data/test/participant_test.rb +32 -8
- data/test/pending.rb +6 -7
- data/test/rake_ltest.rb +3 -0
- data/test/rake_qtest.rb +4 -1
- data/test/raw_prog_test.rb +1 -1
- data/test/restart_cron_test.rb +6 -6
- data/test/restart_sleep_test.rb +8 -8
- data/test/ruby_procdef_test.rb +2 -2
- data/test/rutest_utils.rb +9 -3
- data/test/scheduler_1_test.rb +88 -0
- data/test/scheduler_test.rb +49 -4
- data/test/sec_test.rb +18 -11
- metadata +51 -34
- data/test/cron_test_2.rb +0 -50
data/README.txt
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
= OpenWFEru, Standard Library Documentation
|
2
2
|
|
3
3
|
== Prerequisites
|
4
|
-
|
5
|
-
RubyGems 0.9.4 or later
|
4
|
+
|
5
|
+
Ruby 1.8.5 or later, RubyGems 0.9.4 or later
|
6
6
|
|
7
7
|
== Installation
|
8
|
+
|
8
9
|
Installation can be handled by Ruby gems. This will pull in any libraries
|
9
10
|
you will need to install
|
10
11
|
|
11
12
|
gem install -y openwferu
|
12
13
|
|
13
14
|
== Overview
|
15
|
+
|
14
16
|
OpenWFEru is a Ruby port of the OpenWFE workflow engine
|
15
17
|
(http://www.openwfe.org). It is a complete rewrite in Ruby
|
16
18
|
so does not need to use the Java-based engine from OpenWFE.
|
@@ -86,7 +86,7 @@ module OpenWFE
|
|
86
86
|
unless $OWFE_LOG
|
87
87
|
#puts "Creating logs in " + FileUtils.pwd
|
88
88
|
FileUtils.mkdir("logs") unless File.exist?("logs")
|
89
|
-
$OWFE_LOG = Logger.new
|
89
|
+
$OWFE_LOG = Logger.new "logs/openwferu.log", 10, 1024000
|
90
90
|
$OWFE_LOG.level = Logger::INFO
|
91
91
|
end
|
92
92
|
|
@@ -95,37 +95,37 @@ module OpenWFE
|
|
95
95
|
# especially for the expstorage which 'observes' the expression
|
96
96
|
# pool and thus needs to be instantiated after it.
|
97
97
|
|
98
|
-
build_scheduler
|
98
|
+
build_scheduler
|
99
99
|
#
|
100
100
|
# for delayed or repetitive executions (it's the engine's clock)
|
101
101
|
# see http://openwferu.rubyforge.org/scheduler.html
|
102
102
|
|
103
|
-
build_expression_map
|
103
|
+
build_expression_map
|
104
104
|
#
|
105
105
|
# mapping expression names ('sequence', 'if', 'concurrence',
|
106
106
|
# 'when'...) to their implementations (SequenceExpression,
|
107
107
|
# IfExpression, ConcurrenceExpression, ...)
|
108
108
|
|
109
|
-
build_wfid_generator
|
109
|
+
build_wfid_generator
|
110
110
|
#
|
111
111
|
# the workflow instance (process instance) id generator
|
112
112
|
# making sure each process instance has a unique identifier
|
113
113
|
|
114
|
-
build_expression_pool
|
114
|
+
build_expression_pool
|
115
115
|
#
|
116
116
|
# the core (hairy ball) of the engine
|
117
117
|
|
118
|
-
build_expression_storage
|
118
|
+
build_expression_storage
|
119
119
|
#
|
120
120
|
# the engine persistence (persisting the expression instances
|
121
121
|
# that make up process instances)
|
122
122
|
|
123
|
-
build_participant_map
|
123
|
+
build_participant_map
|
124
124
|
#
|
125
125
|
# building the services that maps participant names to
|
126
126
|
# participant implementations / instances.
|
127
127
|
|
128
|
-
build_error_journal
|
128
|
+
build_error_journal
|
129
129
|
#
|
130
130
|
# builds the error journal (keeping track of failures
|
131
131
|
# in business process executions, and an opportunity to
|
@@ -212,22 +212,50 @@ module OpenWFE
|
|
212
212
|
#
|
213
213
|
# This method also accepts LaunchItem instances.
|
214
214
|
#
|
215
|
+
# Since OpenWFEru 0.9.16, this reply method accepts InFlowWorkitem
|
216
|
+
# that don't belong to a process instance (ie whose flow_expression_id
|
217
|
+
# is nil). It will simply notify the participant_map of the reply
|
218
|
+
# for the given participant_name. If there is no participant_name
|
219
|
+
# specified for this orphan workitem, an exception will be raised.
|
220
|
+
#
|
215
221
|
def reply (workitem)
|
216
222
|
|
217
|
-
if workitem.
|
223
|
+
if workitem.is_a?(InFlowWorkItem)
|
218
224
|
|
219
|
-
|
225
|
+
if workitem.flow_expression_id
|
226
|
+
#
|
227
|
+
# vanilla case, workitem coming back
|
228
|
+
# (from listener probably)
|
220
229
|
|
221
|
-
|
230
|
+
return get_expression_pool.reply(
|
231
|
+
workitem.flow_expression_id, workitem)
|
232
|
+
end
|
222
233
|
|
223
|
-
|
234
|
+
if workitem.participant_name
|
235
|
+
#
|
236
|
+
# a workitem that doesn't belong to a process instance
|
237
|
+
# but bears a participant name.
|
238
|
+
# Notify, there may be something listening on
|
239
|
+
# this channel (see the 'listen' expression).
|
224
240
|
|
225
|
-
|
241
|
+
return get_participant_map.onotify(
|
242
|
+
workitem.participant_name, :reply, workitem)
|
243
|
+
end
|
226
244
|
|
227
245
|
raise \
|
228
|
-
"
|
229
|
-
"
|
246
|
+
"InFlowWorkitem doesn't belong to a process instance" +
|
247
|
+
" nor to a participant"
|
230
248
|
end
|
249
|
+
|
250
|
+
return get_expression_pool.launch(workitem) \
|
251
|
+
if workitem.is_a?(LaunchItem)
|
252
|
+
#
|
253
|
+
# launchitem coming from listener
|
254
|
+
# let's attempt to launch a new process instance
|
255
|
+
|
256
|
+
raise \
|
257
|
+
"engine.reply() " +
|
258
|
+
"cannot handle instances of #{workitem.class}"
|
231
259
|
end
|
232
260
|
|
233
261
|
alias :forward :reply
|
@@ -254,7 +282,7 @@ module OpenWFE
|
|
254
282
|
#
|
255
283
|
def get_participant (participant_name)
|
256
284
|
|
257
|
-
get_participant_map.lookup_participant
|
285
|
+
get_participant_map.lookup_participant participant_name
|
258
286
|
end
|
259
287
|
|
260
288
|
#
|
@@ -263,7 +291,7 @@ module OpenWFE
|
|
263
291
|
#
|
264
292
|
def unregister_participant (participant_name)
|
265
293
|
|
266
|
-
get_participant_map.unregister_participant
|
294
|
+
get_participant_map.unregister_participant participant_name
|
267
295
|
end
|
268
296
|
|
269
297
|
#
|
@@ -568,7 +596,11 @@ module OpenWFE
|
|
568
596
|
#
|
569
597
|
def pause_process (wfid)
|
570
598
|
|
571
|
-
|
599
|
+
wfid = extract_wfid(wfid)
|
600
|
+
|
601
|
+
root_expression = get_expression_pool.fetch_root(wfid)
|
602
|
+
|
603
|
+
root_expression.set_variable(VAR_PAUSED, true)
|
572
604
|
end
|
573
605
|
|
574
606
|
#
|
@@ -578,7 +610,47 @@ module OpenWFE
|
|
578
610
|
#
|
579
611
|
def resume_process (wfid)
|
580
612
|
|
581
|
-
|
613
|
+
wfid = extract_wfid wfid
|
614
|
+
|
615
|
+
root_expression = get_expression_pool.fetch_root wfid
|
616
|
+
|
617
|
+
#
|
618
|
+
# remove 'paused' flag
|
619
|
+
|
620
|
+
root_expression.unset_variable(VAR_PAUSED)
|
621
|
+
|
622
|
+
#
|
623
|
+
# replay
|
624
|
+
#
|
625
|
+
# select PausedError instances in separate list
|
626
|
+
|
627
|
+
errors = get_error_journal.get_error_log wfid
|
628
|
+
error_class = PausedError.name
|
629
|
+
paused_errors = errors.select { |e| e.error_class == error_class }
|
630
|
+
|
631
|
+
return if paused_errors.size < 1
|
632
|
+
|
633
|
+
# replay select PausedError instances
|
634
|
+
|
635
|
+
paused_errors.each do |e|
|
636
|
+
replay_at_error e
|
637
|
+
end
|
638
|
+
end
|
639
|
+
|
640
|
+
#
|
641
|
+
# Takes care of removing an error from the error journal and
|
642
|
+
# they replays its process at that point.
|
643
|
+
#
|
644
|
+
def replay_at_error (error)
|
645
|
+
|
646
|
+
get_error_journal.remove_errors(
|
647
|
+
error.fei.parent_wfid,
|
648
|
+
error)
|
649
|
+
|
650
|
+
get_expression_pool.queue_work(
|
651
|
+
error.message,
|
652
|
+
error.fei,
|
653
|
+
error.workitem)
|
582
654
|
end
|
583
655
|
|
584
656
|
#
|
@@ -605,6 +677,46 @@ module OpenWFE
|
|
605
677
|
exp.lookup_variable var_name
|
606
678
|
end
|
607
679
|
|
680
|
+
#
|
681
|
+
# Returns an array of wfid (workflow instance ids) whose root
|
682
|
+
# environment containes the given variable
|
683
|
+
#
|
684
|
+
# If there are no matches, an empty array will be returned.
|
685
|
+
#
|
686
|
+
# Regular expressions are accepted as values.
|
687
|
+
#
|
688
|
+
# If no value is given, all processes with the given variable name
|
689
|
+
# set will be returned.
|
690
|
+
#
|
691
|
+
def lookup_processes (var_name, value=nil)
|
692
|
+
|
693
|
+
# TODO : maybe this would be better in the ExpressionPool
|
694
|
+
|
695
|
+
result = []
|
696
|
+
|
697
|
+
regexp = if value
|
698
|
+
if value.is_a?(Regexp)
|
699
|
+
value
|
700
|
+
else
|
701
|
+
Regexp.compile(value.to_s)
|
702
|
+
end
|
703
|
+
else
|
704
|
+
nil
|
705
|
+
end
|
706
|
+
|
707
|
+
get_expression_storage.each_of_kind(Environment) do |fei, env|
|
708
|
+
|
709
|
+
val = env.variables[var_name]
|
710
|
+
|
711
|
+
next unless val
|
712
|
+
next if regexp and (not regexp.match(val))
|
713
|
+
|
714
|
+
result.push env.fei.wfid
|
715
|
+
end
|
716
|
+
|
717
|
+
result
|
718
|
+
end
|
719
|
+
|
608
720
|
protected
|
609
721
|
|
610
722
|
#--
|
@@ -649,7 +761,7 @@ module OpenWFE
|
|
649
761
|
#
|
650
762
|
def build_expression_pool
|
651
763
|
|
652
|
-
init_service
|
764
|
+
init_service S_EXPRESSION_POOL, ExpressionPool
|
653
765
|
end
|
654
766
|
|
655
767
|
#
|
@@ -661,7 +773,7 @@ module OpenWFE
|
|
661
773
|
#
|
662
774
|
def build_expression_storage
|
663
775
|
|
664
|
-
init_service
|
776
|
+
init_service S_EXPRESSION_STORAGE, InMemoryExpressionStorage
|
665
777
|
end
|
666
778
|
|
667
779
|
#
|
@@ -671,7 +783,7 @@ module OpenWFE
|
|
671
783
|
#
|
672
784
|
def build_participant_map
|
673
785
|
|
674
|
-
init_service
|
786
|
+
init_service S_PARTICIPANT_MAP, ParticipantMap
|
675
787
|
end
|
676
788
|
|
677
789
|
#
|
@@ -680,7 +792,7 @@ module OpenWFE
|
|
680
792
|
#
|
681
793
|
def build_scheduler
|
682
794
|
|
683
|
-
init_service
|
795
|
+
init_service S_SCHEDULER, SchedulerService
|
684
796
|
end
|
685
797
|
|
686
798
|
#
|
@@ -689,7 +801,7 @@ module OpenWFE
|
|
689
801
|
#
|
690
802
|
def build_error_journal
|
691
803
|
|
692
|
-
init_service
|
804
|
+
init_service S_ERROR_JOURNAL, InMemoryErrorJournal
|
693
805
|
end
|
694
806
|
|
695
807
|
#
|
@@ -756,10 +868,16 @@ module OpenWFE
|
|
756
868
|
#
|
757
869
|
attr_reader :errors
|
758
870
|
|
871
|
+
#
|
872
|
+
# The time at which the process got launched.
|
873
|
+
#
|
874
|
+
attr_reader :launch_time
|
875
|
+
|
759
876
|
def initialize
|
760
877
|
@wfid = nil
|
761
878
|
@expressions = []
|
762
879
|
@errors = {}
|
880
|
+
@launch_time = nil
|
763
881
|
end
|
764
882
|
|
765
883
|
#
|
@@ -806,7 +924,7 @@ module OpenWFE
|
|
806
924
|
|
807
925
|
set_wfid fexp.fei.parent_wfid
|
808
926
|
|
809
|
-
|
927
|
+
@launch_time = fexp.apply_time if fexp.fei.expid == '0'
|
810
928
|
|
811
929
|
exps = @expressions
|
812
930
|
@expressions = []
|
@@ -62,7 +62,7 @@ module OpenWFE
|
|
62
62
|
#
|
63
63
|
def build_expression_storage ()
|
64
64
|
|
65
|
-
init_service
|
65
|
+
init_service S_EXPRESSION_STORAGE, YamlFileExpressionStorage
|
66
66
|
end
|
67
67
|
|
68
68
|
#
|
@@ -70,7 +70,7 @@ module OpenWFE
|
|
70
70
|
#
|
71
71
|
def build_error_journal ()
|
72
72
|
|
73
|
-
init_service
|
73
|
+
init_service S_ERROR_JOURNAL, YamlErrorJournal
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -88,7 +88,7 @@ module OpenWFE
|
|
88
88
|
|
89
89
|
def build_expression_storage ()
|
90
90
|
|
91
|
-
@application_context[:expression_cache_size]
|
91
|
+
@application_context[:expression_cache_size] ||= 1000
|
92
92
|
|
93
93
|
init_service(
|
94
94
|
S_EXPRESSION_STORAGE,
|
@@ -42,6 +42,7 @@ require 'fileutils'
|
|
42
42
|
|
43
43
|
require 'openwfe/service'
|
44
44
|
require 'openwfe/omixins'
|
45
|
+
require 'openwfe/rudefinitions'
|
45
46
|
|
46
47
|
|
47
48
|
module OpenWFE
|
@@ -151,9 +152,9 @@ module OpenWFE
|
|
151
152
|
|
152
153
|
super
|
153
154
|
|
154
|
-
get_expression_pool.add_observer
|
155
|
+
get_expression_pool.add_observer :error do |event, *args|
|
155
156
|
#
|
156
|
-
# logs each error
|
157
|
+
# logs each error occurring in the expression pool
|
157
158
|
|
158
159
|
begin
|
159
160
|
|
@@ -163,6 +164,16 @@ module OpenWFE
|
|
163
164
|
lwarn { "*** process error : \n" + args.join("\n") }
|
164
165
|
end
|
165
166
|
end
|
167
|
+
|
168
|
+
get_expression_pool.add_observer :terminate do |event, *args|
|
169
|
+
#
|
170
|
+
# removes error log when a process terminates
|
171
|
+
|
172
|
+
fei = args[0].fei
|
173
|
+
|
174
|
+
remove_error_log fei.wfid \
|
175
|
+
if fei.is_in_parent_process?
|
176
|
+
end
|
166
177
|
end
|
167
178
|
|
168
179
|
#
|
@@ -174,6 +185,9 @@ module OpenWFE
|
|
174
185
|
get_error_log(wfid).size > 0
|
175
186
|
end
|
176
187
|
|
188
|
+
#--
|
189
|
+
#
|
190
|
+
# Commented out : has no real value
|
177
191
|
#
|
178
192
|
# Replays the given process instance (wfid or fei) at its last
|
179
193
|
# recorded error.
|
@@ -185,32 +199,30 @@ module OpenWFE
|
|
185
199
|
#
|
186
200
|
# Will replay a given process instance at its 1 to last error.
|
187
201
|
#
|
188
|
-
def replay_at_last_error (wfid, offset=0)
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
raise "no error for process '#{wfid}' at offset #{offset}" \
|
199
|
-
unless error
|
200
|
-
|
201
|
-
replay_at_error error
|
202
|
-
end
|
202
|
+
#def replay_at_last_error (wfid, offset=0)
|
203
|
+
# wfid = to_wfid(wfid)
|
204
|
+
# log = get_error_log(wfid)
|
205
|
+
# index = (-1 - offset)
|
206
|
+
# error = log[index]
|
207
|
+
# raise "no error for process '#{wfid}' at offset #{offset}" \
|
208
|
+
# unless error
|
209
|
+
# replay_at_error error
|
210
|
+
#end
|
211
|
+
#++
|
203
212
|
|
213
|
+
#--
|
214
|
+
#
|
215
|
+
# Moved to the engine itself.
|
204
216
|
#
|
205
217
|
# Replays at a specific error (fetched with read_error_log()).
|
206
218
|
#
|
207
|
-
def replay_at_error (error)
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
219
|
+
#def replay_at_error (error)
|
220
|
+
# get_expression_pool.queue_work(
|
221
|
+
# error.message,
|
222
|
+
# error.fei,
|
223
|
+
# error.workitem)
|
224
|
+
#end
|
225
|
+
#++
|
214
226
|
|
215
227
|
#
|
216
228
|
# A utility method : given a list of errors, will make sure that for
|
@@ -276,8 +288,12 @@ module OpenWFE
|
|
276
288
|
#
|
277
289
|
# Removes a list of errors from the error journal.
|
278
290
|
#
|
291
|
+
# The 'errors' parameter may be a single error (instead of an array).
|
292
|
+
#
|
279
293
|
def remove_errors (wfid, errors)
|
280
294
|
|
295
|
+
errors = Array(errors)
|
296
|
+
|
281
297
|
log = get_error_log wfid
|
282
298
|
|
283
299
|
errors.each do |e|
|
@@ -313,6 +329,9 @@ module OpenWFE
|
|
313
329
|
def initialize (service_name, application_context)
|
314
330
|
|
315
331
|
require 'openwfe/storage/yamlcustom'
|
332
|
+
# making sure this file has been required at this point
|
333
|
+
# this yamlcustom thing prevents the whole OpenWFE ecosystem
|
334
|
+
# to get serialized :)
|
316
335
|
|
317
336
|
super
|
318
337
|
|
@@ -373,7 +392,9 @@ module OpenWFE
|
|
373
392
|
#
|
374
393
|
def remove_error_log (wfid)
|
375
394
|
|
376
|
-
|
395
|
+
path = get_path wfid
|
396
|
+
|
397
|
+
File.delete(path) if File.exist?(path)
|
377
398
|
end
|
378
399
|
|
379
400
|
#
|
@@ -381,6 +402,8 @@ module OpenWFE
|
|
381
402
|
#
|
382
403
|
def remove_errors (wfid, errors)
|
383
404
|
|
405
|
+
errors = Array(errors)
|
406
|
+
|
384
407
|
# load all errors
|
385
408
|
|
386
409
|
log = get_error_log wfid
|