• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
20061122 JBoss-World Experiences with JBoss jBPM
 

20061122 JBoss-World Experiences with JBoss jBPM

on

  • 1,845 views

 

Statistics

Views

Total Views
1,845
Views on SlideShare
1,837
Embed Views
8

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 8

http://www.slideshare.net 8

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

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

    20061122 JBoss-World Experiences with JBoss jBPM 20061122 JBoss-World Experiences with JBoss jBPM Presentation Transcript

    • experiences with JBoss jBPM camunda GmbH Bernd Rücker CEO camunda GmbH / Consultant [email_address]
    • Who we are
      • camunda GmbH, near Stuttgart, Germany
      • small company (3 developer / consultants)
      • Main focus is consulting and developing in the fields of
        • enterprise software with Java EE
        • business process engines
        • business rules
      • Very good experiences with open source tools
        • JBoss jBPM
        • Jboss Rules (aka Drools)
        • Hibernate
        • Jack-Rabbit (Java Content Repository / JCR)
        • Pentaho (Open Source BI-Suite)
      • I am comitter in the JBoss jBPM project
      • contact: bernd.ruecker@camunda.com
    • Agenda
      • Projects examples with jBPM
        • ERP-System for retail company www.mad-moxx.de
        • Order Management System for german telco
      • Typical problems
        • Understanding of jPDL
        • Transactions
        • Pageflows in web-application / JBoss seam
      • Good practices in our projects
        • Generic Java Swing GUI
        • Java Swing Admin-Client
        • Generated documentation website
        • Test framework
        • Generate code to support development
    • Project 1
      • customer: „mad-moxx“, the graphics cards specialist
        • webshop (>3000 vistors and > 150 orders per day, 9 employees)
        • wholesale for graphics cards
        • service handling
      • complicated serial number handling
      • used cards stock and sellings
      •  special business processes
      • Our tasks
      • optimizing grown business processes
      • replace the not matching erp system
    • Architecture mySQL ejb container Swing-GUI Session Bean Session Bean business logic jBPM JDO local interface remote interface mySQL Hibernate other services
    • Architecture - process is a facade! mySQL mySQL Swing-GUI Session Bean Session Bean business logic Hibernate JDO local interface remote interface
      • Accessing / changing business objects directly
      • Reports
      • starting processes
      • work on tasks
      jBPM other services
    • Association with process context
    • Architecture - transactions mySQL Swing-GUI Session Bean Session Bean business logic jBPM JDO local interface remote interface 1 XA transaction mySQL Hibernate other services
    • It‘s a SOA  Source: Sun presentation at the Java Forum Stuttgart, 2005
    • Environment
      • JBoss 4 Cluster (2 Server for failover)
      • JDO for persistence of business objects
      • Hibernate as persistence mechanism of jBPM
      • mySQL 5 Cluster (2 Server), XA capable JDBC driver
      • Java 5 (client & server)
      • Java Swing and Java Webstart
    • Project 2
      • customer: german telco
      • handling of complicated order process
      • many dependencies to other systems
      • subsystems are controlled by the process
    • 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
    • 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
    • Environment
      • JBoss 4 Cluster (2 Server)
      • EJB 3 Entity & Session Beans (JBoss preview)
      • jbpm 3.1
      • Oracle 10g Cluster
      • Java 1.5
      • Java Swing and Java Webstart
    • Agenda
      • Projects examples with jBPM
        • ERP-System for retail company www.mad-moxx.de
        • Order Management System for german telco
      • Typical problems
        • Understanding of jPDL
        • Transactions
        • Pageflows in web-application / JBoss seam
      • Good practices in our projects
        • Generic Java Swing GUI
        • Java Swing Admin-Client
        • Generated documentation website
        • Test framework
        • Generate code to support development
    • node, task-nodes & states Keep in mind: if you forget a task-assignment in a task-node it is a node!
    • Think about transactions!
    • So what to do?
      • patterns can be arbitrary complex
      • typically can not be handled by a business guy
      • asynchronism is the general solution
      •  compare to BPEL
      commit transaction (since jbpm 3.1: async=„true“)
    • 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
    • process / workflow / pageflow
      • Sample webapp / Seam can mislead to mix them
      • pageflow: html-pages to fullfill a certain use case
      • workflow: typically automated, maybe one step in a business process
      • business process: not focused on a application but on the business process as a whole, consider the context
      • A clear seperation is important
      • Maybe a solution with sub-processes and a naming schema is feasible
    • More topics to think about
      • process variables
        • store objects? Serialization?
        • store keys only?
        • task controller misleads to use only primary types
      • compensation actions
      state 1 state 2 state 3 action compensating action equivalent states
    • long lasting transactions processes action compensating action Business services Failed action Anwendung 1 commit begin T1 Anwendung 1 commit begin T1
    • Agenda
      • Projects examples with jBPM
        • ERP-System for retail company www.mad-moxx.de
        • Order Management System for german telco
      • Typical problems
        • Understanding of jPDL
        • Transactions
        • Pageflows in web-application / JBoss seam
      • Good practices in our projects
        • Generic Java Swing GUI
        • Java Swing Admin-Client
        • Generated documentation website
        • Test framework
        • Generate code to support development
    • Java Swing GUI node-name token-id process data / variables possible transitions documentation website
    • Documentation website
      • example
      • generated image map (simple xslt)
      • short documentation html-page
      • links to wiki
    • Admin-Client 1
    • Admin-Client 2 variables log
      • tokens / tasks
      • Commands:
      • Signal tokens
      • end tasks
      • cancel processes
    • Admin Client 3 object inspector included
    • 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));
    • 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();
    • code-generation
      • some ideas
      • Data-Binding for GUI
      • constants or enums for variables, process-, state- and transition-names (at least for unit tests)
      • superclass for actions or decisions
      public abstract static class GeneratedDecideIdentifiedGoodsHandler implements DecisionHandler { public String decide(ExecutionContext executionContext) { try { return decide(new ProcurementProcessModel(executionContext)); } catch (BusinessException ex) { throw new ProcessDefinitionException("BusinessException during decision", ex); } } public abstract String decide(ProcurementProcessModel model) throws BusinessException; protected static final transient String RESULT_identified = "identified"; protected static final transient String RESULT_unidentified = "unidentified"; }
    • upcoming book
      • Including 3 chapters on integration:
      • Integration in Java EE
      • JBoss jBPM
      • BPEL with Oracle
      • available in december 2006
    • Thank you for listening! Q & A