[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
20061122 JBoss-World Experiences with JBoss jBPM
1. experiences with JBoss jBPM camunda GmbH Bernd Rücker CEO camunda GmbH / Consultant [email_address]
2.
3.
4.
5. Architecture mySQL ejb container Swing-GUI Session Bean Session Bean business logic jBPM JDO local interface remote interface mySQL Hibernate other services
8. Architecture - transactions mySQL Swing-GUI Session Bean Session Bean business logic jBPM JDO local interface remote interface 1 XA transaction mySQL Hibernate other services
9. It‘s a SOA Source: Sun presentation at the Java Forum Stuttgart, 2005
10.
11.
12. Architecture RMI / Web-Services App-Server / RMI processes IF Subsystem: A UseCase: doSth Token: 0815 Data: … System A UseCase: doSth Data: … ETR Subsystem: A UseCase: doSth Token: 0815 Result: … Order-System System … jbpm actions jbpm actions
13. Architecture RMI / Web-Services App-Server / RMI processes IF Subsystem: A UseCase: doSth Token: 0815 Data: … System A UseCase: doSth Daten: … ETR Subsystem: A UseCase: doSth Token: 0815 Result: … Order-System System … jbpm actions jbpm actions compare to Enterprise-Service-Bus
14.
15.
16. node, task-nodes & states Keep in mind: if you forget a task-assignment in a task-node it is a node!
19. Sequence diagram Application Server Client jBPM-Facade (SLSB) jBPM Action 1. Transaktion Businesslogik SLSB start process get definition create process instance set variables signal execute do something end task get task end execute do something 2. Transaktion
20.
21.
22. long lasting transactions processes action compensating action Business services Failed action Anwendung 1 commit begin T1 Anwendung 1 commit begin T1
23.
24. Java Swing GUI node-name token-id process data / variables possible transitions documentation website
29. Testframework ProcessTestRunner testRunner = new ProcessTestRunner("Testprozess"); testRunner.addInputVariable(ProzessVariablesEnum.CustomerAddress, address); //////////////// // confiugure Path to the next task node / end ProcessTestRunner subTestRunner = testRunner.addExpectedSubprocesses( "CustomerCreation" ); subTestRunner.addExpectedState("Node1"); subTestRunner.addExpectedState("Node2"); subTestRunner.addExpectedOutputVariable(ProzessVariables.ResultCustomerCreation, Boolean.valueOf(true)); //.... subTestRunner.subprocessFinished(); //////////////// // confiugure Path to the next task node / end testRunner.addExpectedNode("xy"); testRunner.addInputVariable("xy", new Integer(0));
30. Testframework (continued) testRunner.startFork(); testRunner.useForkPath(1); testRunner.addExpectedNode("xy"); testRunner.addJoin(); testRunner.useForkPath(2); testRunner.addJoin(); testRunner.addExpectedTask("XXX"); long taskId = testRunner.runToNextTaskNode(5); services.continueAdresseKorrigieren(taskId, new Address()); testRunner.taskEnded(); testRunner.useForkPath(3); testRunner.addExpectedNode("xy"); testRunner.addExpectedTask("XXX"); long taskId = testRunner.runToNextTaskNode(5); testRunner.finishFork(); // run until end of process testRunner.runToEnd(7); testRunner.assertFinished(); testRunner.assertPath();