Top Banner
42

jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Jun 12, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer
Page 2: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

jBPM5 in Action:A Quickstart for

Developers

Kris VerlaenenjBPM5 Lead Engineer

Page 3: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Overview

• What is (j)BPM?

• Why BPM?

• Getting started with jBPM5• Testing, debugging, deploying

• Integrating in your architecture• Persistence and transactions

• Console

Page 4: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

What is BPM?

A business process is a process that describesthe order in which a series of steps need to be executed,

using a flow chart.

Business Process Management

Page 5: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Why BPM?

• Visibility

• Monitoring

• Higher-level

• Continuous improvement

• Speed of development

• Increased agility

Page 6: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Getting started with jBPM5 !

Page 7: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Key Characteristics of jBPM5

• Open-source business process management project offering:– generic process engine supporting native

BPMN 2.0 execution– targeting developers and business users– collaboration, management and monitoring

using web-based consoles– powerful rules and event integration

Page 8: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

From Workflow to BPM

• Core engine is a workflow engine in pure Java– state transitions– lightweight– embeddable– generic, extensible

CoreEngine

Page 9: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Core Engine

KnowledgeBase

StatefulKnowledge

Session

ProcessDefinition

ProcessInstance

Page 10: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

BPMN 2.0 Example

<definitions ... >

<process id="com.sample.bpmn.hello" name="Hello World" >

<startEvent id="_1" name="StartProcess" />

<sequenceFlow sourceRef="_1" targetRef="_2" />

<scriptTask id="_2" name="Hello" >

<script>System.out.println("Hello World");</script>

</scriptTask>

<sequenceFlow sourceRef="_2" targetRef="_3" />

<endEvent id="_3" name="EndProcess" />

</process>

</definitions>

<definitions ... >

<process id="com.sample.bpmn.hello" name="Hello World" >

<startEvent id="_1" name="StartProcess" />

<sequenceFlow sourceRef="_1" targetRef="_2" />

<scriptTask id="_2" name="Hello" >

<script>System.out.println("Hello World");</script>

</scriptTask>

<sequenceFlow sourceRef="_2" targetRef="_3" />

<endEvent id="_3" name="EndProcess" />

</process>

</definitions>

Page 11: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Java Interface

ProcessRuntime interface• startProcess(processId)• startProcess(processId, parameters)• signalEvent(type, event)• signalEvent(type, event, instanceId)• abortProcessInstance(instanceId)• getProcessInstance(instanceId)• …

Page 12: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Java Example

// (1) Create knowledge base and add process definition

KnowledgeBuilder kbuilder = ...

kbuilder.add( ..., "sample.bpmn", ResourceType.BPMN2);

KnowledgeBase kbase = kbuilder.newKnowledgeBase();

// (2) Create new stateful knowledge session

StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

// (3) Start a new process instance

ksession.startProcess(“com.sample.bpmn.hello”);

Page 13: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

TITLE SLIDE: HEADLINE

Presenter nameTitle, Red HatDate

Demo

Page 14: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Domain-specific Processes

• Extend palette with domain-specific, declarative service nodes– define input / output parameters– runtime binding

Page 15: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Example: Notification[

[

"name" : "Notification",

"parameters" : [

"Message" : new StringDataType(),

"From" : new StringDataType(),

"To" : new StringDataType(),

"Priority" : new StringDataType(),

],

"displayName" : "Notification",

"icon" : "icons/notification.gif"

]

]

Page 16: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Example: Notification

class NotificationHandler implements WorkItemHandler {

public void executeWorkItem(WorkItem wI,

WorkItemManager manager) {

String from = (String) wI.getParameter("From");

String to = (String) wI.getParameter("To");

String m = (String) wI.getParameter("Message");

// send email

EmailService service = ...;

service.sendEmail(from, to, "Notification", m);

manager.completeWorkItem(wI.getId(), null);

}

}

Page 17: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Human task service

• User task

• Human task service (WS-HT)– Task lists– Task life cycle

• Task clients– Task forms

Page 18: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Human Task Servicepublic void start( long taskId, String userId, .. )

public void stop( long taskId, String userId, .. )

public void release( long taskId, String userId, .. )

public void suspend( long taskId, String userId, .. )

public void resume( long taskId, String userId, .. )

public void skip( long taskId, String userId, .. )

public void delegate( long taskId, String userId, String targetUserId, .. )

public void complete( long taskId, String userId, ContentData outputData, .. )

Page 19: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Testing, debugging, deploying, etc.

Page 20: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Mining

Analysis

Optimization

SimulationTesting

Design

Monitoring

Reporting

Execution

Integration

Deployment

Management Audit

HumanInteraction

Collaboration

Model

Deploy

ExecuteMonitor

Analyze

LifeCycle

Page 21: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

JUnit Testing

public class MyProcessTest extends JbpmJUnitTestCase {

public void testProcess() {

StatefulKnowledgeSession ksession =

createKnowledgeSession("sample.bpmn");

ProcessInstance pI =

ksession.startProcess("com.sample.bpmn.hello");

assertProcessInstanceCompleted(pI.getId(), ksession);

assertNodeTriggered(pI.getId(),

"StartProcess", "Hello", "EndProcess");

}

}

Page 22: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Debugging

Page 23: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

TITLE SLIDE: HEADLINE

Presenter nameTitle, Red HatDate

Demo

Page 24: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Guvnor

• Guvnor as knowledge repository– BPMN2 processes– Task and process forms– Model

• Web-based process editor (Oryx)

• Build, deploy, test, manage and collaboration features

Page 25: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

TITLE SLIDE: HEADLINE

Presenter nameTitle, Red HatDate

Demo

Page 26: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Integrating in your Architecture

Page 27: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Architecture

• From “embedded” to “as a service”

• Command-based

• Different underlying technologies– Java component (embedded, JNDI)– REST service– Web service– EJB

• # of (independent) session

Page 28: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

REST API

Page 29: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Integration

Page 30: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Integration

Page 31: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Integration

Page 32: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Integration

Page 33: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Persistence and Transactions

Page 34: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Persistence and Transactions

• Persistence (JPA, pluggable)– Runtime persistence– History logging– Services

• Transactions (JTA, pluggable)– Command-scoped– User-defined

Page 35: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Persistence

• Create a persistent knowledge session

EntityManagerFactory emf =

Persistence.createEntityManagerFactory( "..." );

Environment env = KnowledgeBaseFactory.newEnvironment();

env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );

StatefulKnowledgeSession ksession = JPAKnowledgeService.

newStatefulKnowledgeSession( kbase, null, env );

JPAWorkingMemoryDbLogger logger = new

JPAWorkingMemoryDbLogger(ksession);

Page 36: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Persistence

InstanceId

LastModificationDate

LastReadDate

ProcessId

ProcessInstanceByteArray

StartDateStateProcessInstanceInfo

OptLock

ProcessInstanceLogProcessInstanceId ProcessId StartDateId EndDate

NodeInstanceLogNodeInstanceId NodeIdId

LogDateProcessInstanceId ProcessId

Type

Page 37: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

User Transactions

Environment env = KnowledgeBaseFactory.newEnvironment();

env.set( EnvironmentName.TRANSACTION_MANAGER,

TransactionManagerServices.getTransactionManager() );

UserTransaction ut = (UserTransaction) new

InitialContext().lookup("java:comp/UserTransaction");

ut.begin();

// do stuff here, e.g. ksession.startProcess(..)

ut.commit();

Page 38: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Console

Page 39: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

Console

• Web-based management

• Business user

• Features– Process instance management– User task lists / forms– Reporting

Page 40: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

TITLE SLIDE: HEADLINE

Presenter nameTitle, Red HatDate

Demo

Page 41: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

jBPM5: What, where?

• jBPM home page

• Source http://github.com/droolsjbpm/jbpm

• Hudson http://hudson.jboss.org/hudson/job/jBPM

• Blog http://kverlaen.blogspot.com/

• #jbpm on irc.codehaus.org

[email protected]

• jBPM user forum

Page 42: jBPM5 in Action: Developers - JBoss€¦ · jBPM5 in Action: A Quickstart for Developers Kris Verlaenen jBPM5 Lead Engineer

jBPM5 in Action:A Quickstart for

Developers

Kris VerlaenenjBPM5 Lead Engineer