ruote 0.9.18 → 0.9.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.txt +2 -0
- data/examples/about_state.rb +29 -29
- data/examples/bigflow.rb +9 -9
- data/examples/csv_weather.rb +4 -4
- data/examples/engine_template.rb +141 -129
- data/examples/flowtracing.rb +8 -8
- data/examples/homeworkreview.rb +15 -15
- data/examples/kotoba.rb +9 -9
- data/examples/mano_tracker.rb +63 -63
- data/examples/openwferu.rb +22 -20
- data/examples/quotereporter.rb +79 -79
- data/lib/openwfe/contextual.rb +72 -72
- data/lib/openwfe/def.rb +21 -21
- data/lib/openwfe/engine.rb +19 -19
- data/lib/openwfe/engine/engine.rb +578 -614
- data/lib/openwfe/engine/expool_methods.rb +144 -115
- data/lib/openwfe/engine/file_persisted_engine.rb +77 -77
- data/lib/openwfe/engine/participant_methods.rb +96 -96
- data/lib/openwfe/engine/status_methods.rb +271 -247
- data/lib/openwfe/engine/update_exp_methods.rb +69 -69
- data/lib/openwfe/exceptions.rb +25 -25
- data/lib/openwfe/expool/errorjournal.rb +334 -348
- data/lib/openwfe/expool/expool_pause_methods.rb +98 -0
- data/lib/openwfe/expool/expressionpool.rb +793 -800
- data/lib/openwfe/expool/expstorage.rb +284 -313
- data/lib/openwfe/expool/history.rb +193 -105
- data/lib/openwfe/expool/journal.rb +163 -163
- data/lib/openwfe/expool/journal_replay.rb +228 -228
- data/lib/openwfe/expool/parser.rb +178 -142
- data/lib/openwfe/{orest/exception.rb → expool/paused_error.rb} +49 -32
- data/lib/openwfe/expool/representation.rb +59 -59
- data/lib/openwfe/expool/threadedexpstorage.rb +137 -134
- data/lib/openwfe/expool/wfidgen.rb +289 -287
- data/lib/openwfe/expool/yamlexpstorage.rb +154 -154
- data/lib/openwfe/expressions/condition.rb +175 -168
- data/lib/openwfe/expressions/environment.rb +165 -165
- data/lib/openwfe/expressions/expressionmap.rb +135 -131
- data/lib/openwfe/expressions/fe_cancel.rb +68 -68
- data/lib/openwfe/expressions/fe_command.rb +190 -190
- data/lib/openwfe/expressions/fe_concurrence.rb +531 -531
- data/lib/openwfe/expressions/fe_cron.rb +152 -197
- data/lib/openwfe/expressions/fe_cursor.rb +152 -186
- data/lib/openwfe/expressions/fe_define.rb +118 -118
- data/lib/openwfe/expressions/fe_do.rb +109 -109
- data/lib/openwfe/expressions/fe_equals.rb +219 -219
- data/lib/openwfe/expressions/fe_filter.rb +98 -98
- data/lib/openwfe/expressions/fe_filter_definition.rb +122 -122
- data/lib/openwfe/expressions/fe_fqv.rb +203 -203
- data/lib/openwfe/expressions/fe_http.rb +212 -0
- data/lib/openwfe/expressions/fe_if.rb +214 -214
- data/lib/openwfe/expressions/fe_iterator.rb +91 -91
- data/lib/openwfe/expressions/fe_listen.rb +268 -268
- data/lib/openwfe/expressions/fe_losfor.rb +73 -73
- data/lib/openwfe/expressions/fe_misc.rb +343 -351
- data/lib/openwfe/expressions/fe_participant.rb +206 -206
- data/lib/openwfe/expressions/fe_reserve.rb +153 -142
- data/lib/openwfe/expressions/fe_save.rb +226 -226
- data/lib/openwfe/expressions/fe_sequence.rb +66 -56
- data/lib/openwfe/expressions/fe_set.rb +80 -80
- data/lib/openwfe/expressions/fe_sleep.rb +132 -125
- data/lib/openwfe/expressions/fe_step.rb +113 -111
- data/lib/openwfe/expressions/fe_subprocess.rb +139 -136
- data/lib/openwfe/expressions/fe_timeout.rb +74 -78
- data/lib/openwfe/expressions/fe_wait.rb +48 -49
- data/lib/openwfe/expressions/fe_when.rb +106 -106
- data/lib/openwfe/expressions/filter.rb +60 -60
- data/lib/openwfe/expressions/flowexpression.rb +618 -612
- data/lib/openwfe/expressions/iterator.rb +158 -158
- data/lib/openwfe/expressions/merge.rb +53 -53
- data/lib/openwfe/expressions/raw.rb +396 -397
- data/lib/openwfe/expressions/rprocdef.rb +261 -266
- data/lib/openwfe/expressions/time.rb +238 -243
- data/lib/openwfe/expressions/timeout.rb +135 -135
- data/lib/openwfe/expressions/value.rb +55 -55
- data/lib/openwfe/extras/engine/db_persisted_engine.rb +94 -0
- data/lib/openwfe/extras/expool/dberrorjournal.rb +189 -0
- data/lib/openwfe/extras/expool/dbexpstorage.rb +355 -0
- data/lib/openwfe/extras/expool/dbhistory.rb +135 -0
- data/lib/openwfe/extras/listeners/sqslisteners.rb +146 -0
- data/lib/openwfe/extras/misc/activityfeed.rb +264 -0
- data/lib/openwfe/extras/misc/basecamp.rb +485 -0
- data/lib/openwfe/extras/participants/activeparticipants.rb +749 -0
- data/lib/openwfe/extras/participants/atomfeed_participants.rb +173 -0
- data/lib/openwfe/extras/participants/atompub_participants.rb +267 -0
- data/lib/openwfe/extras/participants/basecamp_participants.rb +87 -0
- data/lib/openwfe/extras/participants/csvparticipants.rb +127 -0
- data/lib/openwfe/extras/participants/sqsparticipants.rb +125 -0
- data/lib/openwfe/extras/participants/twitterparticipants.rb +176 -0
- data/lib/openwfe/filterdef.rb +191 -191
- data/lib/openwfe/flowexpressionid.rb +271 -269
- data/lib/openwfe/listeners/listener.rb +61 -61
- data/lib/openwfe/listeners/listeners.rb +81 -81
- data/lib/openwfe/listeners/socketlisteners.rb +189 -189
- data/lib/openwfe/logging.rb +74 -74
- data/lib/openwfe/omixins.rb +55 -54
- data/lib/openwfe/orest/definitions.rb +90 -90
- data/lib/openwfe/orest/osocket.rb +91 -91
- data/lib/openwfe/orest/xmlcodec.rb +471 -459
- data/lib/openwfe/participants.rb +19 -19
- data/lib/openwfe/participants/enoparticipants.rb +187 -187
- data/lib/openwfe/participants/participant.rb +100 -100
- data/lib/openwfe/participants/participantmap.rb +170 -170
- data/lib/openwfe/participants/participants.rb +316 -316
- data/lib/openwfe/participants/soapparticipants.rb +90 -90
- data/lib/openwfe/participants/socketparticipants.rb +143 -143
- data/lib/openwfe/participants/storeparticipants.rb +198 -198
- data/lib/openwfe/rexml.rb +44 -0
- data/lib/openwfe/rudefinitions.rb +87 -91
- data/lib/openwfe/service.rb +65 -65
- data/lib/openwfe/storage/yamlcustom.rb +71 -71
- data/lib/openwfe/storage/yamlfilestorage.rb +190 -190
- data/lib/openwfe/tools/flowtracer.rb +41 -45
- data/lib/openwfe/util/dollar.rb +125 -139
- data/lib/openwfe/util/irb.rb +42 -42
- data/lib/openwfe/util/observable.rb +93 -99
- data/lib/openwfe/util/ometa.rb +36 -36
- data/lib/openwfe/util/treechecker.rb +122 -0
- data/lib/openwfe/util/workqueue.rb +73 -73
- data/lib/openwfe/util/xml.rb +285 -279
- data/lib/openwfe/utils.rb +415 -442
- data/lib/openwfe/version.rb +1 -1
- data/lib/openwfe/workitem.rb +444 -437
- data/lib/openwfe/worklist/oldrest.rb +161 -161
- data/lib/openwfe/worklist/storelocks.rb +218 -218
- data/lib/openwfe/worklist/storeparticipant.rb +19 -19
- data/lib/openwfe/worklist/worklist.rb +223 -223
- data/test/back_0916_test.rb +57 -59
- data/test/bm/bm_1_xml_vs_prog.rb +25 -22
- data/test/bm/bm_2_step.rb +81 -81
- data/test/bm/ft_0f_5ms.rb +13 -13
- data/test/bm/ft_26_load.rb +177 -179
- data/test/bm/ft_26b_load.rb +57 -59
- data/test/bm/ft_26c_load.rb +70 -65
- data/test/bm/ft_recu.rb +51 -51
- data/test/clone_test.rb +145 -99
- data/test/concurrence_test.rb +41 -41
- data/test/condition_test.rb +104 -90
- data/test/description_test.rb +46 -45
- data/test/eno_test.rb +36 -36
- data/test/expmap_test.rb +26 -26
- data/test/extras/README.txt +5 -0
- data/test/extras/active_connection.rb +48 -0
- data/test/extras/active_with_engine_test.rb +140 -0
- data/test/extras/activityfeed_test.rb +85 -0
- data/test/extras/ap_0_test.rb +287 -0
- data/test/extras/ap_1_test.rb +53 -0
- data/test/extras/ap_test_base.rb +24 -0
- data/test/extras/atomfeedp_test.rb +113 -0
- data/test/extras/atompubp_test.rb +91 -0
- data/test/extras/basecamp_test.rb +53 -0
- data/test/extras/db_errorjournal_utest.rb +75 -0
- data/test/extras/db_expstorage_utest.rb +171 -0
- data/test/extras/db_history_0_test.rb +58 -0
- data/test/extras/ft_19_csv.rb +58 -0
- data/test/extras/ft_71_b14008.rb +85 -0
- data/test/extras/sqs_test.rb +57 -0
- data/test/extras/twitter_test.rb +62 -0
- data/test/fe_lookup_att_test.rb +41 -41
- data/test/fei_test.rb +131 -131
- data/test/file_persisted_engine_test.rb +30 -30
- data/test/file_persistence_test.rb +112 -111
- data/test/filep_cancel_test.rb +58 -58
- data/test/filter_test.rb +67 -67
- data/test/flowtestbase.rb +207 -219
- data/test/ft_0.rb +35 -35
- data/test/ft_0b_sequence.rb +15 -15
- data/test/ft_0c_testname.rb +12 -12
- data/test/ft_0d_participant.rb +9 -9
- data/test/ft_0e_multibody.rb +11 -11
- data/test/ft_10_loop.rb +103 -104
- data/test/ft_11_ppd.rb +285 -289
- data/test/ft_11b_ppd.rb +26 -26
- data/test/ft_12_blockparticipant.rb +57 -57
- data/test/ft_13_eno.rb +31 -31
- data/test/ft_14_subprocess.rb +45 -45
- data/test/ft_14b_subprocess.rb +107 -107
- data/test/ft_14c_subprocess.rb +33 -33
- data/test/ft_15_iterator.rb +127 -127
- data/test/ft_15b_iterator.rb +41 -41
- data/test/ft_16_fqv.rb +44 -44
- data/test/ft_17_condition.rb +48 -48
- data/test/ft_18_pname.rb +26 -26
- data/test/ft_1_unset.rb +140 -140
- data/test/ft_1b_unset.rb +17 -17
- data/test/ft_20_cron.rb +33 -33
- data/test/ft_21_cron.rb +51 -51
- data/test/ft_21b_cron_pause.rb +41 -41
- data/test/ft_22_history.rb +45 -41
- data/test/ft_23_when.rb +51 -51
- data/test/ft_23b_when.rb +43 -43
- data/test/ft_23c_wait.rb +48 -48
- data/test/ft_23d_cww.rb +28 -28
- data/test/ft_24_def.rb +15 -15
- data/test/ft_25_cancel.rb +57 -54
- data/test/ft_27_getflowpos.rb +79 -83
- data/test/ft_28_fileparticipant.rb +25 -25
- data/test/ft_29_httprb.rb +57 -57
- data/test/ft_2_concurrence.rb +99 -97
- data/test/ft_2b_concurrence.rb +132 -132
- data/test/ft_2c_concurrence.rb +37 -37
- data/test/ft_30_socketlistener.rb +133 -133
- data/test/ft_31_flowname.rb +15 -16
- data/test/ft_32_journal.rb +48 -48
- data/test/ft_32c_journal.rb +54 -54
- data/test/ft_32d_journal.rb +43 -46
- data/test/ft_33_description.rb +62 -62
- data/test/ft_34_cancelwfid.rb +37 -37
- data/test/ft_35_localdefs.rb +36 -34
- data/test/ft_36_subprocids.rb +61 -61
- data/test/ft_37_pnames.rb +33 -33
- data/test/ft_38_tag.rb +82 -82
- data/test/ft_38b_tag.rb +97 -97
- data/test/ft_38c_tag.rb +50 -50
- data/test/ft_38d_tag.rb +53 -0
- data/test/ft_39_reserve.rb +33 -33
- data/test/ft_39b_reserve.rb +59 -59
- data/test/ft_3_equals.rb +131 -131
- data/test/ft_3b_lookup_vf.rb +43 -43
- data/test/ft_40_defined.rb +33 -33
- data/test/ft_41_case.rb +80 -80
- data/test/ft_42_environments.rb +48 -48
- data/test/ft_43_pat10.rb +51 -51
- data/test/ft_44_save.rb +37 -37
- data/test/ft_44b_restore.rb +151 -151
- data/test/ft_45_citerator.rb +149 -149
- data/test/ft_45b_citerator.rb +77 -0
- data/test/ft_46_pparams.rb +27 -27
- data/test/ft_47_filter.rb +100 -100
- data/test/ft_48_fe_filter.rb +41 -41
- data/test/ft_49_condition.rb +101 -94
- data/test/ft_4_misc.rb +185 -190
- data/test/ft_50_xml_attribute.rb +101 -104
- data/test/ft_51_stack.rb +30 -30
- data/test/ft_52_obs_participant.rb +73 -73
- data/test/ft_53_null_noop_participant.rb +31 -31
- data/test/ft_54_listen.rb +183 -183
- data/test/ft_54b_listen.rb +32 -32
- data/test/ft_54c_listen.rb +60 -60
- data/test/ft_55_ptimeout.rb +29 -30
- data/test/ft_56_timeout.rb +29 -29
- data/test/ft_57_a.rb +105 -102
- data/test/ft_58_ejournal.rb +83 -80
- data/test/ft_58b_ejournal.rb +82 -0
- data/test/ft_59_ps.rb +148 -86
- data/test/ft_5_time.rb +77 -77
- data/test/ft_60_ecancel.rb +98 -98
- data/test/ft_61_elsub.rb +23 -23
- data/test/ft_62_procparticipant.rb +46 -46
- data/test/ft_63_pause.rb +82 -69
- data/test/ft_64_alias.rb +56 -57
- data/test/ft_65_stringlaunch.rb +29 -29
- data/test/ft_66_subforget.rb +42 -42
- data/test/ft_67_schedlaunch.rb +58 -59
- data/test/ft_68_ifparticipant.rb +39 -39
- data/test/ft_69_cancelmissing.rb +23 -21
- data/test/ft_6_lambda.rb +37 -37
- data/test/ft_70_lookupvar.rb +25 -25
- data/test/ft_71_log.rb +35 -35
- data/test/ft_72_lookup_processes.rb +43 -40
- data/test/ft_73_cancel_sub.rb +79 -79
- data/test/ft_74_block_and_workitem_dup.rb +42 -42
- data/test/ft_75_ruby_attributes.rb +53 -51
- data/test/ft_76_merge_isolate.rb +57 -57
- data/test/ft_77_segments.rb +13 -13
- data/test/ft_78_eval.rb +94 -94
- data/test/ft_79_tticket.rb +79 -79
- data/test/ft_79b_tticket.rb +73 -73
- data/test/ft_79c_outcome.rb +36 -36
- data/test/ft_7_lose.rb +73 -73
- data/test/ft_7b_lose.rb +49 -49
- data/test/ft_80_spname.rb +65 -65
- data/test/ft_81_exp.rb +30 -30
- data/test/ft_82_trecu.rb +30 -24
- data/test/ft_83_badpause.rb +35 -35
- data/test/ft_84_updateexp.rb +118 -118
- data/test/ft_84b_subrepr.rb +72 -0
- data/test/ft_85_dolhash.rb +18 -18
- data/test/ft_86_dollar_fv.rb +33 -33
- data/test/ft_87_define.rb +47 -47
- data/test/ft_88_http.rb +100 -0
- data/test/ft_8_forget.rb +25 -25
- data/test/ft_9_cursor.rb +119 -110
- data/test/ft_9b_cursor.rb +70 -70
- data/test/ft_tests.rb +6 -0
- data/test/hash_test.rb +52 -34
- data/test/hparticipant_test.rb +92 -88
- data/test/lookup_att_test.rb +70 -70
- data/test/lookup_vf_test.rb +52 -52
- data/test/misc_test.rb +55 -51
- data/test/obs_test.rb +82 -82
- data/test/param_test.rb +181 -181
- data/test/participant_test.rb +46 -46
- data/test/pending.rb +12 -12
- data/test/ps_representation.rb +70 -70
- data/test/rake_ltest.rb +2 -2
- data/test/rake_qtest.rb +11 -11
- data/test/raw_prog_test.rb +303 -308
- data/test/restart_cron_test.rb +74 -74
- data/test/restart_paused_test.rb +52 -47
- data/test/restart_sleep_test.rb +80 -80
- data/test/restart_when_test.rb +64 -64
- data/test/ruby_procdef_test.rb +71 -71
- data/test/rutest_utils.rb +32 -32
- data/test/sec_test.rb +143 -142
- data/test/slock_test.rb +41 -41
- data/test/storage_test.rb +15 -15
- data/test/timeout_test.rb +53 -53
- data/test/treechecker_test.rb +111 -0
- data/test/util_xml_test.rb +57 -57
- data/test/wfid_test.rb +93 -93
- data/test/wi_test.rb +58 -58
- metadata +64 -19
- data/examples/scheduler_cron_usage.rb +0 -48
- data/examples/scheduler_usage.rb +0 -56
- data/lib/openwfe/orest/controlclient.rb +0 -119
- data/lib/openwfe/orest/oldrestservlet.rb +0 -279
- data/lib/openwfe/orest/restclient.rb +0 -176
- data/lib/openwfe/orest/workitem.rb +0 -206
- data/lib/openwfe/orest/worklistclient.rb +0 -272
- data/test/bm/ft_26d_load.rb +0 -97
- data/test/ft_59b_ps_for_pat.rb +0 -58
- data/test/ft_64_clone.rb +0 -69
- data/test/orest_test.rb +0 -251
data/README.txt
CHANGED
data/examples/about_state.rb
CHANGED
|
@@ -14,15 +14,15 @@ require 'openwfe/participants'
|
|
|
14
14
|
engine = OpenWFE::Engine.new
|
|
15
15
|
|
|
16
16
|
alice = engine.register_participant(
|
|
17
|
-
|
|
17
|
+
:alice, OpenWFE::HashParticipant)
|
|
18
18
|
bob = engine.register_participant(
|
|
19
|
-
|
|
19
|
+
:bob, OpenWFE::HashParticipant)
|
|
20
20
|
|
|
21
21
|
class MyDefinition < OpenWFE::ProcessDefinition
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
sequence do
|
|
23
|
+
alice
|
|
24
|
+
bob
|
|
25
|
+
end
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# later ...
|
|
@@ -30,7 +30,7 @@ end
|
|
|
30
30
|
#fei = engine.launch MyDefinition
|
|
31
31
|
#
|
|
32
32
|
#sleep 0.050
|
|
33
|
-
#
|
|
33
|
+
# # it's asynchronous, so...
|
|
34
34
|
#
|
|
35
35
|
#puts "alice holds #{alice.size} workitem(s)"
|
|
36
36
|
#puts "bob holds #{bob.size} workitem(s)"
|
|
@@ -39,19 +39,19 @@ end
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class My2ndDefinition < OpenWFE::ProcessDefinition
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
42
|
+
sequence do
|
|
43
|
+
at :state => "redaction"
|
|
44
|
+
alice
|
|
45
|
+
at :state => "correction"
|
|
46
|
+
bob
|
|
47
|
+
alice
|
|
48
|
+
at :state => "approval"
|
|
49
|
+
charly
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
process_definition :name => "at" do
|
|
53
|
+
set :var => "/state", :val => "${state}"
|
|
54
|
+
end
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
#fei = engine.launch My2ndDefinition
|
|
@@ -59,17 +59,17 @@ end
|
|
|
59
59
|
#sleep 0.050
|
|
60
60
|
#
|
|
61
61
|
#puts "state : " + engine.lookup_variable(
|
|
62
|
-
#
|
|
62
|
+
# 'state', fei.workflow_instance_id)
|
|
63
63
|
|
|
64
64
|
class My3rdDefinition < OpenWFE::ProcessDefinition
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
end
|
|
71
|
-
charly :tag => "approval"
|
|
65
|
+
sequence do
|
|
66
|
+
alice :tag => "redaction"
|
|
67
|
+
sequence :tag => "correction" do
|
|
68
|
+
bob
|
|
69
|
+
alice
|
|
72
70
|
end
|
|
71
|
+
charly :tag => "approval"
|
|
72
|
+
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
fei = engine.launch My3rdDefinition
|
|
@@ -77,5 +77,5 @@ fei = engine.launch My3rdDefinition
|
|
|
77
77
|
sleep 0.050
|
|
78
78
|
|
|
79
79
|
puts "state : " + engine.process_status(
|
|
80
|
-
|
|
80
|
+
fei.workflow_instance_id).tags.inspect
|
|
81
81
|
|
data/examples/bigflow.rb
CHANGED
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
class BigFlow0 < OpenWFE::ProcessDefinition
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
sequence do
|
|
8
|
+
alpha
|
|
9
|
+
concurrence do
|
|
10
|
+
bravo
|
|
11
|
+
cursor do
|
|
8
12
|
alpha
|
|
9
|
-
concurrence do
|
|
10
|
-
bravo
|
|
11
|
-
cursor do
|
|
12
|
-
alpha
|
|
13
|
-
bravo
|
|
14
|
-
end
|
|
15
|
-
alpha :activity => "brush teeth"
|
|
16
|
-
end
|
|
17
13
|
bravo
|
|
14
|
+
end
|
|
15
|
+
alpha :activity => "brush teeth"
|
|
18
16
|
end
|
|
17
|
+
bravo
|
|
18
|
+
end
|
|
19
19
|
end
|
data/examples/csv_weather.rb
CHANGED
|
@@ -8,11 +8,11 @@ $table = CsvTable.new("http://spreadsheets.google.com/pub?key=pCkopoeZwCNsMWOVeD
|
|
|
8
8
|
|
|
9
9
|
def decide (hash)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
$table.transform hash
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
puts " weather : #{hash['weather']}, month : #{hash['month']}"
|
|
14
|
+
puts " => take umbrella ? #{hash['take_umbrella?']}"
|
|
15
|
+
puts
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
puts
|
data/examples/engine_template.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
require 'rubygems'
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
#
|
|
4
|
+
# if OpenWFEru was installed via 'gem'
|
|
5
5
|
|
|
6
6
|
#
|
|
7
7
|
# setting up an OpenWFEru engine, step by step
|
|
@@ -18,128 +18,140 @@ require 'openwfe/participants/participants'
|
|
|
18
18
|
#application_context = {}
|
|
19
19
|
|
|
20
20
|
#application_context[:engine_name] = "my_engine"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
#
|
|
22
|
+
# the default value for the name of an engine is 'engine'
|
|
23
|
+
# this parameter is important when multiple engines do share some
|
|
24
|
+
# communication channel (message queue for example)
|
|
25
|
+
#
|
|
26
|
+
# This value appears in the FlowExpressionId of all the expressions
|
|
27
|
+
# and workitems of the engine.
|
|
28
28
|
|
|
29
29
|
#application_context[:work_directory] = "work"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
#
|
|
31
|
+
# OpenWFEru engines take one optional argument : application_context
|
|
32
|
+
#
|
|
33
|
+
# the following engine constructions do not use this argument,
|
|
34
|
+
# but you can make them use it
|
|
35
|
+
#
|
|
36
|
+
# engine = OpenWFE::Engine.new(application_context)
|
|
37
|
+
#
|
|
38
|
+
# ...
|
|
39
|
+
#
|
|
40
40
|
|
|
41
41
|
#application_context[:remote_definitions_allowed] = true
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
#
|
|
43
|
+
# unless this parameter is set to true, the engine will not accept
|
|
44
|
+
# to launch processes whose definition is given by a URL, only
|
|
45
|
+
# local process definitions (file:) or direct process definitions
|
|
46
|
+
# will be allowed.
|
|
47
47
|
|
|
48
48
|
#application_context[:ruby_eval_allowed] = true
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
#
|
|
50
|
+
# if this parameter is set to true, evaluation of ruby code in process
|
|
51
|
+
# definition strings will be allowed as well as the ruby version of
|
|
52
|
+
# certain expression attributes like :
|
|
53
|
+
#
|
|
54
|
+
# <participant name="${ruby:LDAP::lookup(customer_id)" />
|
|
55
|
+
# or
|
|
56
|
+
# <if rtest="var % 2 == 0"> ...
|
|
57
|
+
#
|
|
58
|
+
|
|
59
|
+
#application_context[:use_ruby_treechecker] = true
|
|
60
|
+
#
|
|
61
|
+
# by default, external ruby code (process definitions, ${r:...} snippets)
|
|
62
|
+
# are checked before evaluation.
|
|
63
|
+
# Turning this parameter to false, will disable that check.
|
|
64
|
+
#
|
|
65
|
+
# Turn this to false only if you have absolute trust in the ruby fragment
|
|
66
|
+
# coming into the engine. But as they say in the armed forces
|
|
67
|
+
#
|
|
68
|
+
# "trusting is good, checking is better"
|
|
69
|
+
#
|
|
58
70
|
|
|
59
71
|
#application_context[:dynamic_eval_allowed] = true
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
72
|
+
#
|
|
73
|
+
# by default, :dynamic_eval_allowed is not set to true, it means
|
|
74
|
+
# that the "eval" expression cannot be used.
|
|
75
|
+
#
|
|
76
|
+
# don't set that unless you're sure you'll need this 'eval' expression.
|
|
65
77
|
|
|
66
78
|
#application_context[:definition_in_launchitem_allowed] = true
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
79
|
+
#
|
|
80
|
+
# by default (since 0.9.18), it's not allowed to launch processes whose
|
|
81
|
+
# definitions is embedded in the launchitem. You have to explicitely
|
|
82
|
+
# set this parameter to true
|
|
71
83
|
|
|
72
84
|
|
|
73
85
|
#engine = OpenWFE::Engine.new
|
|
74
86
|
#engine = OpenWFE::Engine.new(application_context)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
87
|
+
#
|
|
88
|
+
# an in-memory, totally transient engine
|
|
89
|
+
#
|
|
90
|
+
# might be ideal for an embedded workflow engine with short lived
|
|
91
|
+
# process definitions to run
|
|
80
92
|
|
|
81
93
|
#engine = OpenWFE::FilePersistedEngine.new
|
|
82
94
|
#engine = OpenWFE::FilePersistedEngine.new(application_context)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
95
|
+
#
|
|
96
|
+
# a file persisted engine, slow, used only within unit tests
|
|
97
|
+
# do not use
|
|
86
98
|
|
|
87
99
|
engine = OpenWFE::CachedFilePersistedEngine.new
|
|
88
100
|
#engine = OpenWFE::CachedFilePersistedEngine.new(application_context)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
101
|
+
#
|
|
102
|
+
# a file persisted engine, with an in-memory cache.
|
|
103
|
+
# use that
|
|
104
|
+
#
|
|
105
|
+
# persistence is done by default under ./work/
|
|
94
106
|
|
|
95
107
|
at_exit do
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
108
|
+
#
|
|
109
|
+
# making sure that the engine gets properly stopped when
|
|
110
|
+
# Ruby exits.
|
|
111
|
+
#
|
|
112
|
+
engine.stop
|
|
101
113
|
end
|
|
102
114
|
|
|
103
115
|
# -- a console
|
|
104
116
|
|
|
105
117
|
#engine.enable_irb_console
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
118
|
+
#
|
|
119
|
+
# by enabling the IRB console, you can jump into the engine object
|
|
120
|
+
# with a CTRL-C hit on the terminal that runs hit.
|
|
121
|
+
#
|
|
122
|
+
# Hit CTRL-D to get out of the IRB console.
|
|
111
123
|
|
|
112
124
|
# -- process history
|
|
113
125
|
|
|
114
126
|
#require 'openwfe/expool/history'
|
|
115
127
|
|
|
116
128
|
#engine.init_service("history", InMemoryHistory)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
129
|
+
#
|
|
130
|
+
# keeps all process history in an array in memory
|
|
131
|
+
# use only for test purposes !
|
|
120
132
|
|
|
121
133
|
#engine.init_service("history", FileHistory)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
134
|
+
#
|
|
135
|
+
# dumps all the process history in a file name "history.log"
|
|
136
|
+
# in the work directory
|
|
125
137
|
|
|
126
138
|
# -- process journaling
|
|
127
139
|
|
|
128
140
|
#require 'openwfe/expool/journal'
|
|
129
141
|
#engine.init_service("journal", Journal)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
142
|
+
#
|
|
143
|
+
# activates 'journaling',
|
|
144
|
+
#
|
|
145
|
+
# see http://openwferu.rubyforge.org/journal.html
|
|
146
|
+
#
|
|
147
|
+
# Journaling has a cost in terms of performace.
|
|
148
|
+
# Journaling should be used only in case you might want to migrate
|
|
149
|
+
# [segments of] running processes.
|
|
150
|
+
#
|
|
139
151
|
#engine.application_context[:keep_journals] = true
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
152
|
+
#
|
|
153
|
+
# if set to true, the journal of terminated processes will be kept
|
|
154
|
+
# (but moved by default to ./work/journal/done/)
|
|
143
155
|
|
|
144
156
|
|
|
145
157
|
#
|
|
@@ -152,82 +164,82 @@ end
|
|
|
152
164
|
#require 'openwfe/listeners/listeners'
|
|
153
165
|
|
|
154
166
|
#sl = OpenWFE::SocketListener.new(
|
|
155
|
-
#
|
|
167
|
+
# "socket_listener", @engine.application_context, 7008)
|
|
156
168
|
#engine.add_workitem_listener(sl)
|
|
157
|
-
|
|
158
|
-
|
|
169
|
+
#
|
|
170
|
+
# adding a simple SocketListener on port 7008
|
|
159
171
|
|
|
160
172
|
#require 'openwfe/listeners/socketlisteners'
|
|
161
173
|
#
|
|
162
174
|
#engine.add_workitem_listener(OpenWFE::SocketListener)
|
|
163
|
-
|
|
164
|
-
|
|
175
|
+
#
|
|
176
|
+
# adding a SocketListener on the default port 7007
|
|
165
177
|
|
|
166
178
|
#engine.add_workitem_listener(OpenWFE::FileListener, "500")
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
179
|
+
#
|
|
180
|
+
# listening for workitems (coming as within YAML files dropped in the
|
|
181
|
+
# default ./work/in directory)
|
|
182
|
+
#
|
|
183
|
+
# check for new files every 500 ms
|
|
172
184
|
|
|
173
185
|
#require 'openwfe/listeners/sqslisteners'
|
|
174
186
|
#
|
|
175
187
|
#engine.add_workitem_listener(
|
|
176
|
-
#
|
|
177
|
-
#
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
188
|
+
# OpenWFE::SqsListener.new(:wiqueue, engine.application_context),
|
|
189
|
+
# "2s")
|
|
190
|
+
#
|
|
191
|
+
# adds a listener polling an Amazon Simple Queue Service (SQS)
|
|
192
|
+
# named 'wiqueue' every 2 seconds
|
|
193
|
+
#
|
|
194
|
+
# http://jmettraux.wordpress.com/2007/03/13/openwferu-over-amazon-sqs/
|
|
195
|
+
# http://aws.amazon.com/sqs
|
|
184
196
|
|
|
185
197
|
|
|
186
198
|
#
|
|
187
199
|
# === the PARTICIPANTS
|
|
188
200
|
#
|
|
189
|
-
# to learn more about participants :
|
|
201
|
+
# to learn more about participants :
|
|
190
202
|
# http://openwferu.rubyforge.org/participants.html
|
|
191
203
|
#
|
|
192
204
|
|
|
193
205
|
# you can use indifferently symbols or strings for participant names
|
|
194
206
|
|
|
195
207
|
# It's perhaps better to separate the participant registration and put
|
|
196
|
-
# it in its own .rb file, but anyway, here are some participant registration
|
|
208
|
+
# it in its own .rb file, but anyway, here are some participant registration
|
|
197
209
|
# examples :
|
|
198
210
|
|
|
199
211
|
engine.register_participant(:toto) do |workitem|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
212
|
+
puts "toto received a workitem..."
|
|
213
|
+
puts "lots of work..." if workitem.attributes.size > 3
|
|
214
|
+
sleep 4
|
|
215
|
+
puts "done."
|
|
204
216
|
end
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
217
|
+
#
|
|
218
|
+
# an example of a "block participant", binding Ruby code to a
|
|
219
|
+
# participant in a business process
|
|
208
220
|
|
|
209
221
|
#require 'openwfe/participants/sqsparticipants'
|
|
210
222
|
#
|
|
211
223
|
#engine.register_participant(:sqs, OpenWFE::SqsParticipant.new(:wiqueue2))
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
224
|
+
#
|
|
225
|
+
# registers a participant named 'sqs', workitems for it will get placed
|
|
226
|
+
# on the SQS queue named "wiqueue2"
|
|
215
227
|
|
|
216
228
|
#require 'openwfe/participants/socketparticipants'
|
|
217
229
|
#
|
|
218
230
|
#engine.register_participant(
|
|
219
|
-
#
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
231
|
+
# "away", OpenWFE::SocketParticipant.new("target.host.co.jp", 7009))
|
|
232
|
+
#
|
|
233
|
+
# the participant "away" listens for workitems on port 7009 of
|
|
234
|
+
# host 'target.host.co.jp', our SocketParticipant will dispatch
|
|
235
|
+
# the workitem to it over TCP
|
|
224
236
|
|
|
225
237
|
|
|
226
238
|
engine.reschedule
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
239
|
+
#
|
|
240
|
+
# this method has to be called after all the participants have been
|
|
241
|
+
# added, it looks for temporal expressions (sleep, cron, ...) to
|
|
242
|
+
# reschedule.
|
|
231
243
|
|
|
232
244
|
|
|
233
245
|
#
|
|
@@ -237,11 +249,11 @@ engine.reschedule
|
|
|
237
249
|
#
|
|
238
250
|
|
|
239
251
|
engine.join
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
252
|
+
#
|
|
253
|
+
# you don't need to 'join' if the engine uses a listener, the thread of
|
|
254
|
+
# the listener will prevent the Ruby interpreter from exiting.
|
|
255
|
+
#
|
|
256
|
+
# hit CTRL-C to quit (or maybe engine.enable_irb_console has been called,
|
|
257
|
+
# in which case CTRL-C will bring you into a IRB console within the
|
|
258
|
+
# engine itself).
|
|
247
259
|
|