Download - Activiti in action - Tom Bayens dec 14, 2010
Activiti in Action
Tom Baeyens & Joram Barrez
Activiti in Action
Tom Baeyens & Joram Barrez
14 december 2010
BPMN 2.0BPMN 2.0
● OMG standard● Shapes● Execution
semantics● File format
● Membership
● First pure play BPM standard
● General endorsement● General endorsement
4
Activiti & JavaActiviti & Java
● Out-of-the-box● Control flow● Functional
activity types● Everything you
exect in a typical BPM SystemBPM System
● But…● Not limited to out of the box● Not limited to out of the box
6
Activiti is an Embeddable Process Engine
Activiti is an Embeddable Process Enginegg
.jarAny JavaEnvironmentEnvironment
Oracle || MySQL || PostgreSQL || Any DB…
Executions HistoryProcesses
7
Executions HistoryProcesses
Your Domain Tables
Activiti Embeds In Your AppActiviti Embeds In Your App
● Embeds in • Your database• Your transaction
Your domain model• Your domain model• Your tests• Your Spring configurationYour Spring configuration
TomcatJDK 5
Activiti YourApp
JBoss…
Oracle, MySQL, PostgreSQLpp
Spring
8
Not only the engine?Not only the engine?
Activiti Modeler
Java ApplicationsJava Applications
Activiti Designer
Activiti Probe
Activiti EngineActiviti Engine
Activiti Explorer
EngineEngine
Activiti Cycle
p
REST interfaceCycle
iPhoneExploreriPhoneExplorer
AndroidExplorerAndroidExplorer
14
Activiti ProbeActiviti Probe
● System admin functionality y y
● Status overview, stuck jobs, exception inspection, logs, …
1717
Activiti Eclipse designerActiviti Eclipse designer
• Activiti extension support, BPMN 2.0 validation, hierarchical modeling
20
Activiti & IPhoneActiviti & IPhone
• Mobile BPM == natural evolution of doing work• Android client coming up!
22
Activiti Grails integrationActiviti Grails integration
• Grails convience capabilitiesT i l fi i• Typical configuration
• Easy business archive deploymentG t t ll / i / l• Generate controllers/view/example app
23
Hello WorldHello World
Activiti Modeler, MS Visio,MS Visio,Aris, (Oracle)
<process id=”helloWorldProcess" name=“My first process">
<startEvent id="theStart" /><sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" />sequenceFlow id flow1 sourceRef theStart targetRef theTask /<userTask id="theTask" name="my task" /> <sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd" /><endEvent id="theEnd" />
</process>
ProcessEngine engine= new ProcessEngineBuilder()ProcessEngine engine= new ProcessEngineBuilder().configureFromResource(“activiti.cfg.xml”).buildProcessEngine();
engine getRuntimeService() startProcessInstanceByKey(“helloWorldProcess”);
24
engine.getRuntimeService().startProcessInstanceByKey( helloWorldProcess );Task task = engine.getTaskService().createTaskQuery().singleResult();Engine.getTaskService().complete(task.getId());
Real‐life demoReal‐life demo
• Use case: banks shouldn’t lend money to just anybody• Thorough analysis is needed• All steps needs to be recorded in official documents• Decisions are done based on Excel decision tables
25
The power of JavaThe power of Java
public class CreateLoanApplicationDocument implements JavaDelegation {
public void execute(DelegateExecution execution) {p ( g ) {
Session session = CmisUtil.createCmisSession("admin", "admin", Constants.ALFRESCO_URL); Folder folder = CmisUtil.getFolder(session, Constants.LOAN_APPLICATION_STORAGE_FOLDER);
Document document = createWordDocument(session, folder, execution); storeDocumentReferencesAsProcessVariables(execution, folder, document);
session save();
30
session.save();}
The cool stuffThe cool stuff
• That didn’t make it in the demo• But is just too cool not to show you
• Unit test supportUnit test support• Query API
Spring integration• Spring integration• Method expressions• JPA integration
31
Unit testing your processesUnit testing your processes
• With Activiti, business processes• Live and breath along your regular app code• Should be tested just the same!Should be tested just the same!
• Typical BPM vendor & testing
• Activiti supports Junit 3 & 4 and offers lots of ct t suppo ts Ju t 3 & a d o e s ots oconvience while testing
32
Query APIQuery API
• No need to learn the intern data model P f l d if API• Powerful and uniform query API
• Deployments and process definitionsrepositoryService createProcessDefinitionQuery keyLike(“%mortgage%”) latest();
• Process instances and executionsrepositoryService.createProcessDefinitionQuery.keyLike( %mortgage% ).latest();
runtimeService createProcessInstanceQuery
• History
runtimeService.createProcessInstanceQuery.processDefinitionKey(“mortgage-process)”.orderByProcessInstanceId().desc();
historyService.createHistoricActivityQuery().processDefinitionId(procDefId)
• Variables
historyService.createHistoricActivityQuery().processDefinitionId(procDefId).activityType(“userTask”).orderByDuration().asc();
runtimeService.createProcessInstanceQuery()
• Tasks jobs users groups historic activities/process
Q y().variableValueGreaterThan(“amount”, 50000);
• Tasks, jobs, users, groups, historic activities/process instances/variables, …
Spring integrationSpring integration
• ProcessEngine as a Spring bean
• Delegate to Spring beansg p g
<bean id=“printer” …
34
Method expressions & JPAMethod expressions & JPA
Decision based on JPA entity property
Spring beanJPA entity property
Process variables
35