This repository has been archived by the owner on Mar 31, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
Activity Execution
Robert Mikes edited this page Jan 2, 2019
·
7 revisions
-
createTables
currently disabled, has to be run separately
- For each item an
ItemImplementation
instance is created in the memory. - When a CORBA call is received, Cristal finds the
ItemImplementation
object for the item and callsdelegatedAction
on it
ItemImplementation.delegatedAction()
is invoked for all actions and predefined steps
The original idea behind delegated
was that if an authorized agent goes on vacation, he delegates his duties to someone else.
- get the Workflow of the item
-
Workflow.requestAction()
- find the Activity (vertex)
- call
Activity.request()
using itself as alocker
object -
Activity.request()
- find requested Transition
- check authorization
- check that outcome was given if needed
- get new state
-
Activity.runActivityLogic
- run extra logic in predefined steps (overridden method in predefined steps)
- set new state and reservation
- unmarshal Outcome
-
History.addEvent()
->RemoteMap.put()
called for theevent
-
TransactionManager.put()
- caches the
put()
call (as a "pending transaction"), but only in an internal cache, does not invoke theClusterStorage
- calls are grouped by the
locker
object (basically used as a transaction ID)
- caches the
-
-
Gateway.getStorage().put()
called for theoutcome
-
Gateway.getStorage().put()
called for theattachment
-
Gateway.getStorage().put()
called for theviewpoint
-
Gateway.getStorage().put()
called for thelast
viewpoint
Activity.updateItemProperties()
runNext
pushJobsToAgents
- store the new workflow if state changed
- handle
Erase
-
TransactionManager.commit()
- called for the Workflowlocker
object: commits all the previousput()
changes- for each "pending transaction"
-
ClusterStorageManager.put()
- call
put()
on all ClusterStorages -
JooqClusterStorage.put()
- calls
JooqHandler.put()
on theJooqHandler
corresponding to theClusterType
- calls
DomainHandler.put()
on all registered domain handlers to update domain specific tables - this sees ALL the changes done with the samelocker
object (i.e. in the same transaction) because of the get() implementation
- calls
- call
For example, if a DomainHandler
executes a script (for example aggregate script) which reads a viewpoint (details schema):
Script.evaluate()
- get the ItemProxy
- set the
locker
as atransactionKey
on theItemProxy
execute()
- then in the script, for example:
ItemProxy.getViewpoint()
-
locker == null ?
transactionKey
: locker
-
ItemProxy.getObject()
-
Gateway.getStorage().get()
=
TransactionManager.get()
- HISTORY and JOB
ClusterType
s are handled in a special way -
if this
locker
has been modifying thisitemPath
, read the object from the cache -
else read the object from the
ClusterStorage
usingClusterStorageManager.get()
- HISTORY and JOB
-
-
- Getting started
- Key features
- Documentation
- Tutorials
- Basic: Create Patient
- Adv: Patient Tracking
- Selected papers
- Maven Deploy Travis
- Maven-Deploy-Travis-GPG2