WebWorkFlow

115
WebWorkFlow Zef Hemel, Ruben Verhaaf, Eelco Visser Delft University of Technology, The Netherlands An Object-Oriented Workflow Modeling Language

description

Our domain-specific language for defining workflows in WebDSL.

Transcript of WebWorkFlow

Page 1: WebWorkFlow

WebWorkFlow

Zef Hemel, Ruben Verhaaf, Eelco VisserDelft University of Technology, The Netherlands

An Object-Oriented Workflow Modeling Language

Page 2: WebWorkFlow

coordination

WebWorkFlow

Page 3: WebWorkFlow

BPEL

Page 4: WebWorkFlow

BPEL

Petri nets

Page 5: WebWorkFlow

BPEL

Petri nets

YAWL

Page 6: WebWorkFlow

BPEL

Petri nets

YAWL

✘ do not describe full applications✘ separate language, not nicely integrated✘ ignore user interface✘ all or nothing

Page 7: WebWorkFlow
Page 8: WebWorkFlow

WebWorkFlow

3 design principles

Page 9: WebWorkFlow

Linguistic integration

Page 10: WebWorkFlow

layersabstraction

Page 11: WebWorkFlow

WebDSL

Procedural Workflow

Process Expressions

Page 12: WebWorkFlow

WebDSL

Procedural Workflow

Process Expressionsconcise(less flexible)

more verbose(more flexible)

Page 13: WebWorkFlow

Full application generation

Page 14: WebWorkFlow

JBoss Seam

GoogleAppEngine

JavaServlet

Page 15: WebWorkFlow

Scenario

Page 16: WebWorkFlow

hank

Page 17: WebWorkFlow

his employees

Page 18: WebWorkFlow

preparation

Page 19: WebWorkFlow

meeting

Page 20: WebWorkFlow

write report

manager

Page 21: WebWorkFlow

write report

approve comment

employee

Page 22: WebWorkFlow

write report

approve comment

finalize

manager

Page 23: WebWorkFlow

sue

Page 24: WebWorkFlow
Page 25: WebWorkFlow
Page 26: WebWorkFlow
Page 27: WebWorkFlow
Page 28: WebWorkFlow
Page 29: WebWorkFlow
Page 30: WebWorkFlow
Page 31: WebWorkFlow

WebWorkFlow

Page 32: WebWorkFlow

Workflow Procedures

WebDSL

Process Expressionsconcise(less flexible)

more verbose(more flexible)

Page 33: WebWorkFlow

Core WebDSL

Core Data Model Core User Interface

WebDSL

Data Model User Interface Access Control

Web Application

...

Page 34: WebWorkFlow

User Interface LogicData models Access control

Page 35: WebWorkFlow

entity User { username :: String password :: Secret name :: String manager -> User employees -> Set<User> }

Page 36: WebWorkFlow

define page editUser(u : User) { form { table { row { "Name: " input(u.name) } row { "Manager: " input(u.manager) } row { "Employees: " input(u.employees) } } action("Save", save())

action save() { u.save(); return home(); } }}

Page 37: WebWorkFlow

define page editUser(u : User) { derive editPage from u for (name, manager, employees) }

Page 38: WebWorkFlow

access control rules page editUser(u : User) { principal == u.manager }

Page 39: WebWorkFlow

User Interface LogicData models Access control

Page 40: WebWorkFlow

User Interface LogicData models Access control Workflow

Page 41: WebWorkFlow

Workflows revolve around objects

entity Meeting { employee -> User employeeView :: Text managerView :: Text report :: Text approved :: Bool comment :: Text }

Page 42: WebWorkFlow

Workflows revolve around objects

and operations (procedures)performed on them

entity Meeting { employee -> User employeeView :: Text managerView :: Text report :: Text approved :: Bool comment :: Text }

employeePreparemanagerPreparewriteReportapproveReportcommentReportfinalizeReport

Page 43: WebWorkFlow

module workflow

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }

Page 44: WebWorkFlow

module workflow

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }

part of a WebDSL module

Page 45: WebWorkFlow

module workflow

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }

access control expression language

part of a WebDSL module

Page 46: WebWorkFlow

module workflow

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }

access control expression languageview page language

part of a WebDSL module

Page 47: WebWorkFlow

WebDSL

Procedural Workflow

Process Expressionsconcise(less flexible)

more verbose(more flexible)

Page 48: WebWorkFlow

procedure procedureName(o : Entity) { who { who can perform } when { additional condition } view { view page } enabled { action code } disabled { action code } do { action code } done { action code }}

Page 49: WebWorkFlow

actorwho { principal == m.employee }

Page 50: WebWorkFlow

conditionwhen { now() > m.startDate }

Page 51: WebWorkFlow

user interfaceview { derive procedurePage from m for (employeePreparation) }

Page 52: WebWorkFlow

actiondo { email(organizeMeetingMail(m));}

Page 53: WebWorkFlow

enableddisableddone

eventsdone { m.writeReport.enable();}

Page 54: WebWorkFlow

WebDSL

Process Expressions

Workflow Procedures

concise(less flexible)

more verbose(more flexible)

Page 55: WebWorkFlow

procedure meetingWorkflow(m : Meeting) { process { (employeePrepare(m) and managerPrepare(m)); repeat { writeReport(m); (approveReport(m) xor commentReport(m)) } until finalizeReport(m) }}

Page 56: WebWorkFlow

sequence ;

Page 57: WebWorkFlow

parallel and

sequence ;

Page 58: WebWorkFlow

parallel and

sequence ;

deferred choice +

Page 59: WebWorkFlow

parallel and parallel xor

sequence ;

deferred choice +

Page 60: WebWorkFlow

parallel and parallel xor

sequence ;

deferred choice + repeat ... until loops

Page 61: WebWorkFlow

parallel and parallel xor

sequence ;

deferred choice + repeat ... until loops

conditional if ... else

Page 62: WebWorkFlow

Transforming Procedures

Page 63: WebWorkFlow

Core WebDSL

Core Data Model Core User Interface

WebDSL

Data Model User Interface Access Control

Procedural WebWorkFlow

Data Model User InterfaceAccess

Control

Procedure

Events

Web Application

WebWorkFlow

Data ModelUser

Interface

Access

Control

Procedure

EventsProcess

Expressions

Page 64: WebWorkFlow

compilationbynormalization

Core WebDSL

Core Data Model Core User Interface

WebDSL

Data Model User Interface Access Control

Procedural WebWorkFlow

Data Model User InterfaceAccess

Control

Procedure

Events

Web Application

WebWorkFlow

Data ModelUser

Interface

Access

Control

Procedure

EventsProcess

Expressions

concise(high-level)

verbose(low-level)

Page 65: WebWorkFlow

compilationbynormalization

Core WebDSL

Core Data Model Core User Interface

WebDSL

Data Model User Interface Access Control

Procedural WebWorkFlow

Data Model User InterfaceAccess

Control

Procedure

Events

Web Application

WebWorkFlow

Data ModelUser

Interface

Access

Control

Procedure

EventsProcess

Expressions

concise(high-level)

verbose(low-level)

Page 66: WebWorkFlow

compilationbynormalization

Core WebDSL

Core Data Model Core User Interface

WebDSL

Data Model User Interface Access Control

Procedural WebWorkFlow

Data Model User InterfaceAccess

Control

Procedure

Events

Web Application

WebWorkFlow

Data ModelUser

Interface

Access

Control

Procedure

EventsProcess

Expressions

concise(high-level)

verbose(low-level)

Page 67: WebWorkFlow

stateuser interfaceaccess control

Page 68: WebWorkFlow

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); }}

Example

Page 69: WebWorkFlow

extend entity Meeting { writeReport -> WriteReportProcedureStatus}

Procedure (=workflow) state is kept

in the object it operates on

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); }}

Page 70: WebWorkFlow

entity ProcedureStatus { isEnabled :: Bool function enable() { isEnabled := true; } function disable() { isEnabled := false; }}

entity WriteReportProcedureStatus : ProcedureStatus { ...}

Page 71: WebWorkFlow

define page writeReport(m : Meeting) { derive procedurePage from m for (employeeView)}

user interface

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); }}

Page 72: WebWorkFlow

access control rules rule page writeReport(m : Meeting) { principal == m.employee.manager && m.writeReport.isEnabled }

access control

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); }}

Page 73: WebWorkFlow

extend entity WriteReportProcedureStatus { m -> Meeting

function done() { m.approveReport.enable(); m.commentReport.enable(); }}

control logic

procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); }}

Page 74: WebWorkFlow

Core WebDSL

Core Data Model Core User Interface

WebDSL

Data Model User Interface Access Control

Procedural WebWorkFlow

Data Model User InterfaceAccess

Control

Procedure

Events

Web Application

WebWorkFlow

Data ModelUser

Interface

Access

Control

Procedure

EventsProcess

Expressions

Page 75: WebWorkFlow

Core WebDSL

Core Data Model Core User Interface

WebDSL

Data Model User Interface Access Control

Procedural WebWorkFlow

Data Model User InterfaceAccess

Control

Procedure

Events

Web Application

WebWorkFlow

Data ModelUser

Interface

Access

Control

Procedure

EventsProcess

Expressions

Page 76: WebWorkFlow

encode control flow

Page 77: WebWorkFlow

enableddisableddone

encode control flowin procedure events

Page 78: WebWorkFlow

procedure p(o : O) { process { a(o); b(o) }}

Page 79: WebWorkFlow

procedure p(o : O) { process { a(o); b(o) }}

extend procedure a(o : O) { done { o.b.enable(); }}

Page 80: WebWorkFlow

procedure p(o : O) { process { a(o); b(o) }}

extend procedure a(o : O) { done { o.b.enable(); }}

...right?

Page 81: WebWorkFlow

procedure p(o : O) { process { a(o); b(o); a(o) }}

Page 82: WebWorkFlow

procedure p(o : O) { process { a(o); b(o); a(o) }}

extend procedure a(o : O) { done { ?? }}

Page 83: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

+ transition function

Page 84: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 85: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 86: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

[1]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 87: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)[1]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 88: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

[1]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 89: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

[2]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 90: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)[2]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 91: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

[2]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 92: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

[3]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 93: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)[3]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 94: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

[3]

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 95: WebWorkFlow

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

a(o) b(o)

state next0 a.enable(this, 1)

1 b.enable(this, 2)

2 a.enable(this, 3)

3 done

p(o)

Page 96: WebWorkFlow

entity SeqProcedureStatus : ... { o -> O function next(state : Int) { if(state == 0) { o.a.enable(this, 1); } if(state == 1) { o.b.enable(this, 2); } if(state == 2) { o.a.enable(this, 3); } if(state == 3) { processed(); } }}

procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] }}

next function for sequencing

Page 97: WebWorkFlow

entity ParProcedureStatus : ... { o -> O counter :: Int function next(state : Int) { if(state == 0) { o.a.enable(this, 1); o.b.enable(this, 2); } if(state == 1) { counter := counter + 1; if(counter == 2) { processed(); } } if(state == 2) { counter := counter + 1; if(counter == 2) { processed(); } } }}

procedure par(o : O) { process { a(o)[1] and b(o)[2] }}

next function for parallel and

Page 98: WebWorkFlow

Encoding Patterns

Page 99: WebWorkFlow
Page 100: WebWorkFlow
Page 101: WebWorkFlow
Page 102: WebWorkFlow

WebDSL

Procedural Workflow

Process Expressionsconcise(less flexible)

more verbose(more flexible)

Page 103: WebWorkFlow

WebDSL

Procedural Workflow

Process Expressionsconcise(less flexible)

more verbose(more flexible)

Page 104: WebWorkFlow

WebWorkFlow

linguistic integration

Page 105: WebWorkFlow

WebWorkFlow

linguistic integration

abstraction layers

Page 106: WebWorkFlow

WebWorkFlow

linguistic integration

full application generation

abstraction layers

Page 107: WebWorkFlow

WebWorkFlow

linguistic integration

full application generation

abstraction layers

compilation by normalization

Page 109: WebWorkFlow

state tracking

Page 110: WebWorkFlow

state tracking task pages

Page 111: WebWorkFlow

state tracking task pages navigation

Page 112: WebWorkFlow

state tracking task pages

task lists

navigation

Page 113: WebWorkFlow

state tracking task pages

task lists

navigation

workflow status

Page 114: WebWorkFlow

state tracking task pages

task lists

navigation

workflow status access controlrules

Page 115: WebWorkFlow

state tracking task pages

task lists

navigation

workflow status access controlrules

the rest