Structured workflows
Jolie comes with native primitives for structuring workflows, for example in sequences (one after the other) or parallels (go at the same time). This makes the code follow naturally from the requirements, avoiding error-prone bookkeeping variables for checking what happened so far in a computation. For example, the following code says that the operations publish and edit become available at the same time ( | ), but only after ( ; ) operation login is invoked:
login( credentials )() { checkCredentials }; { publish( x ) | edit( y ) }
Dynamic error handling for parallel code
Programming reliable parallel code is challenging because faults may cause side-effects in parallel activities. Jolie comes with a solid semantics for parallel fault handling. Programmers can update the behaviour of fault handlers at runtime, following the execution of activities thanks to the install primitive.