WebWorkFlow
Upcoming SlideShare
Loading in...5
×
 

WebWorkFlow

on

  • 1,480 views

Our domain-specific language for defining workflows in WebDSL.

Our domain-specific language for defining workflows in WebDSL.

Statistics

Views

Total Views
1,480
Views on SlideShare
1,268
Embed Views
212

Actions

Likes
0
Downloads
13
Comments
0

2 Embeds 212

http://zef.me 208
http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

WebWorkFlow WebWorkFlow Presentation Transcript

  • WebWorkFlow An Object-Oriented Workflow Modeling Language Zef Hemel, Ruben Verhaaf, Eelco Visser Delft University of Technology, The Netherlands
  • WebWorkFlow coordination
  • BPEL
  • BPEL Petri nets
  • BPEL YAWL Petri nets
  • BPEL YAWL Petri nets ✘ do not describe full applications ✘ separate language, not nicely integrated ✘ ignore user interface ✘ all or nothing
  • WebWorkFlow 3 design principles
  • Linguistic integration
  • abstraction layers
  • Process Expressions Procedural Workflow WebDSL
  • concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • Full application generation
  • JBoss Seam Google Java AppEngine Servlet
  • Scenario
  • hank
  • his employees
  • preparation
  • meeting
  • manager write report
  • write report employee approve comment
  • write report approve comment manager finalize
  • sue
  • WebWorkFlow
  • concise Process Expressions (less flexible) Workflow Procedures more verbose WebDSL (more flexible)
  • ... WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • Data models User Interface Logic Access control
  • entity User { username :: String password :: Secret name :: String manager -> User employees -> Set<User> }
  • 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(); } } }
  • define page editUser(u : User) { derive editPage from u for (name, manager, employees) }
  • access control rules page editUser(u : User) { principal == u.manager }
  • Data models User Interface Logic Access control
  • Data models User Interface Logic Access control Workflow
  • Workflows revolve around objects entity Meeting { employee -> User employeeView :: Text managerView :: Text report :: Text approved :: Bool comment :: Text }
  • Workflows revolve around objects entity Meeting { employeePrepare employee -> User managerPrepare employeeView :: Text writeReport managerView :: Text approveReport report :: Text commentReport finalizeReport approved :: Bool comment :: Text } and operations (procedures) performed on them
  • module workflow procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }
  • part of a WebDSL module module workflow procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }
  • part of a WebDSL module 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 module workflow procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } } access control expression language view page language
  • concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • 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 } }
  • actor who { principal == m.employee }
  • condition when { now() > m.startDate }
  • user interface view { derive procedurePage from m for (employeePreparation) }
  • action do { email(organizeMeetingMail(m)); }
  • events done { m.writeReport.enable(); } enabled disabled done
  • concise Process Expressions (less flexible) Workflow Procedures more verbose WebDSL (more flexible)
  • procedure meetingWorkflow(m : Meeting) { process { (employeePrepare(m) and managerPrepare(m)); repeat { writeReport(m); (approveReport(m) xor commentReport(m)) } until finalizeReport(m) } }
  • sequence ;
  • sequence ; parallel and
  • sequence ; parallel and deferred choice +
  • sequence ; parallel and parallel xor deferred choice +
  • sequence ; parallel and parallel xor deferred choice + repeat ... until loops
  • sequence ; parallel and parallel xor deferred choice + repeat ... until loops conditional if ... else
  • Transforming Procedures
  • WebWorkFlow User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • concise WebWorkFlow (high-level) User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events compilation by WebDSL normalization Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface verbose Web Application (low-level)
  • concise WebWorkFlow (high-level) User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events compilation by WebDSL normalization Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface verbose Web Application (low-level)
  • concise WebWorkFlow (high-level) User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events compilation by WebDSL normalization Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface verbose Web Application (low-level)
  • state user interface access control
  • Example procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } }
  • procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } } Procedure (=workflow) state is kept extend entity Meeting { writeReport -> WriteReportProcedureStatus } in the object it operates on
  • entity WriteReportProcedureStatus : ProcedureStatus { ... } entity ProcedureStatus { isEnabled :: Bool function enable() { isEnabled := true; } function disable() { isEnabled := false; } }
  • procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } } 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(); } } 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(); } } extend entity WriteReportProcedureStatus { m -> Meeting function done() { m.approveReport.enable(); m.commentReport.enable(); } } control logic
  • WebWorkFlow User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • WebWorkFlow User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • encode control flow
  • encode control flow in procedure events enabled disabled done
  • procedure p(o : O) { process { a(o); b(o) } }
  • procedure p(o : O) { process { a(o); b(o) } } extend procedure a(o : O) { done { o.b.enable(); } }
  • procedure p(o : O) { process { a(o); b(o) } } extend procedure a(o : O) { done { o.b.enable(); } } ...right?
  • procedure p(o : O) { process { a(o); b(o); a(o) } }
  • procedure p(o : O) { process { a(o); b(o); a(o) } } extend procedure a(o : O) { done { ?? } }
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } + transition function
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [1] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done [1]
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [1] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [2] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done [2]
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 [2] b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [3] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) [3] b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [3] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • next function for sequencing entity SeqProcedureStatus : ... { o -> O function next(state : Int) { if(state == 0) { procedure p(o : O) { o.a.enable(this, 1); process { } a(o)[1]; if(state == 1) { b(o)[2]; o.b.enable(this, 2); a(o)[3] } } if(state == 2) { } o.a.enable(this, 3); } if(state == 3) { processed(); } } }
  • next function for parallel and entity ParProcedureStatus : ... { o -> O counter :: Int function next(state : Int) { if(state == 0) { o.a.enable(this, 1); o.b.enable(this, 2); procedure par(o : O) { } process { if(state == 1) { a(o)[1] and b(o)[2] counter := counter + 1; if(counter == 2) { } processed(); } } } if(state == 2) { counter := counter + 1; if(counter == 2) { processed(); } } } }
  • Encoding Patterns
  • concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • WebWorkFlow linguistic integration
  • WebWorkFlow linguistic integration abstraction layers
  • WebWorkFlow linguistic integration abstraction layers full application generation
  • WebWorkFlow linguistic integration abstraction layers full application generation compilation by normalization
  • www.webdsl.org www.strategoxt.org
  • state tracking
  • state tracking task pages
  • state tracking task pages navigation
  • state tracking task pages navigation task lists
  • state tracking task pages navigation task lists workflow status
  • state tracking task pages navigation task lists workflow status access control rules
  • state tracking task pages navigation task lists workflow status access control rules the rest