Breaking the Kubernetes Kill Chain: Host Path Mount
A Simplified Script Syntax for WS-BPEL 2.0
1. 35th Euromicro Conference
Software Engineering and Advanced Applications (SEAA 2009)
A Simplified Script Syntax for WS- BPEL 2.0
Marc Bischof, Oliver Kopp, Tammo van Lessen, Frank Leymann
Institute of Architecture of Application Systems
kopp@iaas.uni-stuttgart.de
2. Overview
Main Motivation
Existing Approaches
BPELscript
Outlook
Presented by Oliver Kopp 2
3. Usual MDD Approach
Graphical Model
transformation
<opaqueActivity>
Abstract BPEL <documentation>
Set approved to "yes"
manual </documentation>
refinement </opaqueActivity>
<assign>
Executable BPEL <copy>
<literal>yes</literal>
deployment </copy>
<to variable="approval" part="accept" />
</assign>
01100111010100100010010001001110110101
Presented by Oliver Kopp BPEL: WS-Business Process Execution Language 3
8. Goals of BPELscript development
Ease development of executable business
processes (AKA “workflows”)
Syntax close to “usual” programming languages
Same semantics as WS-BPEL
… enables two-way transformation
simPEL
Presented by Oliver Kopp 8
9. Interaction With Partners
loanPartnerLT
(nothing) loanRequest loanServicePT
Loan Approval
Client
Process
partnerLink customer =
(lns::loanPartnerLT, loanService, null)
Declares a partnerlink customer
of partner link type lns::loanPartnerLT
with self-role loanService and no partner role
Presented by Oliver Kopp 9
10. Receiving a Message
@createInstance
request = receive(customer, loanRequest);
Annotations for optional attributes in BPEL
Implicit variable declaration
“customer” is the partner link to use
“loanRequest” is the operation
Each statement in BPELscript can be seen as an
activity in BPEL
Presented by Oliver Kopp 10
11. Invoking a Service Operation
risk = invoke(assessor, check, request);
Synchronous service call to risk “assessor”
Operation “check”
Input variable “request”
Result is stored in variable “risk”
Reuse of existing processes is done by using the
processes by invokes, receives, …
BPEL does not allow the definition of new
“procedures”
Presented by Oliver Kopp 11
12. Aynchronous Variant
invoke(assessor, check, request,
{assessorCorrelation});
risk = receive(assessor, checkResult,
{assessorCorrelation});
Optional Parameter lists correlation sets to use
for correlatoin
Presented by Oliver Kopp 12
13. Variable Assignment
approval.accept = "yes";
Default expression language: E4X
ECMAScript for XML
Translated to assign or kept as E4X
T. van Lessen and others: Facilitating Rich Data Manipulation in
BPEL using E4X. In ZEUS 2009
XPath still supported
var = [bpel:doXslTransform("...", $A)];
Presented by Oliver Kopp 13
14. Replying to a Synchronous Call
reply(customer, loanRequest, approval);
Reply message for the “loanRequest” operation
No correlation needed
Presented by Oliver Kopp 14
15. Linking Activities Together
Just as in usual programming languages
@createInstance
request = receive(customer, loanRequest);
risk = invoke(assessor, check, request);
if (risk.level=="high") {
approval.accept = "no";
} else {
approval.accept = "yes";
}
reply(customer, loanRequest, approval);
Presented by Oliver Kopp 15
16. What about Graphs?
Process modeling languages offer
“graph-oriented programming”
BPEL also offers graph-oriented programming
Two alternatives to represent it in BPEL
A) Map to matching block-constructs
B) Use BPEL’s graph capabilities
An activity is a node in the graph
A link representes an edge in the graph
J. Vanhatalo & H. Völzer & J. Koehler: The Refined Process Structure Tree BPM'08
Presented by Oliver Kopp 16
17. Graph-oriented Programming: Alternatives
Goto-inspired syntax
lauto:
risk = invoke(…)
l1=[$risk = 'high']‐>lhuman,
l2=[$risk != 'high']‐>lapp
[l1 and l2] lapp: invoke(…);
Signal and Join Statements
risk = invoke(…)
signal(l1, [$risk.level == 'low']);
signal(l1, [$risk.level != 'low']);
join(l1, l2, [$l1 and $l2]);
Presented by Oliver Kopp 17
18. Resulting Process
parallel {
@createInstance
request = receive(customer, loanRequest);
signal(receive‐to‐assess,
[$request.amount < 10000]);
signal(receive‐to‐approval,
[$request.amount >= 10000]);
} and {
join(receive‐to‐assess);
risk = invoke(assessor, check, request);
...
Presented by Oliver Kopp 18
19. Fault Handling
try {
...
} catch(lns::loanProcessFault) { |error|
@fault unableToHandleRequest
reply(customer, loanRequest, error);
}
Presented by Oliver Kopp 19
22. Overview on the Transformation
ANTLR: ANother Tool for Language Recognition
Parser Generator
ANTXR: ANother Tool for Xml Recognition
XML Processing for ANTLR
Presented by Oliver Kopp 22
23. Future Work
IDE for BPELscript
Enhance the translator to support implicit variable
declaration
Compare efficiency of BPEL development and
BPELscript development
Follow development at
http://www.bpelscript.org/
Presented by Oliver Kopp 23