您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Lightweight SOA with jBPM
LightweightSOAwithJBossjBPMKoenAers,LeadDeveloper05/10/2007It'sallthesameWorkflowBusinessProcessManagement(BPM)Orchestration...itallboilsdowntostatemachinesWhatisaProcessLanguage?Informal●Describeshowpeopleand/orsystesworktogetherTypicalexamples●Insuranceclaim,Approvals,LegalcaseMoreformal:DescribesanexecutionflowasgraphicalactivitiesthatcanbewaitstatesWhatisaProcessLanguage?process-definitionname=Damageclaimstart-statename=Usersubmitsclaimtransitionto=Initialscreening“//start-statedecisionname=Initialscreeningtransitionname=Enoughinfoto=Approval“/transitionname=Notenoughdetailsto=Askmoredetails“//decision...WhyaProcessLanguage?SymplifyimplementationbyextractingstatamanagementImprovecommunication●Modelling&Execution●Analyst&DeveloperAutomaticpersistenthistory●BusinessintelligenceWhatisaBPMS?BusinessProcessManagementSystemModellingvsExecutability●Thefree-erthemodeling,thelessexecutableAnalysis&ModellingTechDetailsforExecutabilityAnalystsDevelopersWhatisaBPMS?BusinessProcessManagementSystemExecutesprocessesPersistsexecutionsRecordshistoryE1E2History&AuditTailsWhentouseaProcessLanguage?Anyaspectofsoftwaredevelopment●Diagram●Someformofexecution●LongrunningHistroy&statisticsJBossjBPMOneembeddabletechnologyMultipleprocesslanguagesOperatingSystemJavaVirtualMachineProcessVirtualMachinejPDLBPELPageflowJBossjBPMXPDL...AFirstExampleAdoor4States●Locked●Closed●Open●Openlocked4Operations●unlock●lock●open●closeFirstJavaThenjPDLADoorinJavapublicclassDoor{staticStringOPEN=open;staticStringCLOSED=closed;staticStringLOCKED=locked;staticStringOPEN_LOCKED=open-locked;Stringstate=CLOSED;...ADoorinJavapublicvoidlock(){if((state==LOCKED)||(state==OPEN_LOCKED)){thrownewIllegalStateException(doorisalreadylocked“);}if(state==CLOSED){state=LOCKED;}elseif(state==OPEN){state=OPEN_LOCKED;}}process-definitionname=doorinitial=Closedstatename=Lockedtransitionname=unlockto=Closed//statestatename=Closedtransitionname=lockto=Locked/transitionname=opento=Open//statestatename=Opentransitionname=closeto=Closed/transitionname=lockto=OpenLocked//statestatename=OpenLockedtransitionname=unlockto=Open//state/process-definitionADoorinjPDLADoorinjPDLpublicclassDoorProcessTestextendsTestCase{staticProcessDefinitiondoorProcess=ProcessDefinition.parseXmlInputStream(DoorProcessTest.class.getResourceAsStream(processdefinition.xml));...ADoorinjPDLtokenpublicvoidtestClosedLock(){ProcessInstanceprocessInstance=newProcessInstance(doorProcess);Tokentoken=processInstance.getRootToken();token.signal(lock);assertEquals(Locked,token.getNode().getName());token.signal(“unlock);assertEquals(“Closed,token.getNode().getName());try{token.signal(“unlock);fail();}catch(JbpmExceptione){}}ADoorinjPDLtokenpublicvoidtestClosedLock(){ProcessInstanceprocessInstance=newProcessInstance(doorProcess);Tokentoken=processInstance.getRootToken();token.signal(lock);assertEquals(Locked,token.getNode().getName());token.signal(“unlock);assertEquals(“Closed,token.getNode().getName());try{token.signal(“unlock);fail();}catch(JbpmExceptione){}}ADoorinjPDLtokenpublicvoidtestClosedLock(){ProcessInstanceprocessInstance=newProcessInstance(doorProcess);Tokentoken=processInstance.getRootToken();token.signal(lock);assertEquals(Locked,token.getNode().getName());token.signal(“unlock);assertEquals(“Closed,token.getNode().getName());try{token.signal(“unlock);fail();}catch(JbpmExceptione){}}ADoorinjPDLtokenpublicvoidtestClosedLock(){ProcessInstanceprocessInstance=newProcessInstance(doorProcess);Tokentoken=processInstance.getRootToken();token.signal(lock);assertEquals(Locked,token.getNode().getName());token.signal(“unlock);assertEquals(“Closed,token.getNode().getName());try{token.signal(“unlock);fail();}catch(JbpmExceptione){}}ATaskinjPDLATaskinjPDLtask-nodename=Evaluatepayraisetaskswimlane=Managernotify=yes“priority=highreminderduedate=2businessdaysrepeat=4businesshours/timerduedate=4businessdaystransition=Escalate//tasktransitionname=Approveto=InformHR/transitionname=Rejectto=Notifyrequester/transitionname=Escalateto=Escalaterequest//task-nodejPDLisOpenEndedTraditionalBPM/workflowsystems●FixedprocesslanguagejPDLhasprocessconstructs●Baseprocesslanguagethatcanbeextended●APIforruntimebehaviourjPDLcanincludeJavacodeeasily●Process==structure●CodeasdecorationjPDLAddsFeaturestoJavaUsejPDLforstatemanagementUsetheJaveplatformasyoudonowNaturalbindingBindingProcesstoCodee.g.Action●Calculatenumber●OntransitionpublicinterfaceActionHandlerextendsSerializable{voidexecute(ExecutionContextctx)throwsException;}BindingProcesstoCodepublicclassCalculateNumberimplementsActionHandler{Stringvar;intfactor;publicvoidexecute(ExecutionContextctx){Integervalue=(Integer)ctx.getVariable(var);intnumber=factor*value.intValue();ctx.setVariable(number,number);}}BindingProcesstoCodestatename=InformHRtransitionto=Updatedatabaseactionclass=payraise.CalculateNumbervarSalaryIncrease/varfactor5/factor/action/transition/stateExpr
本文标题:Lightweight SOA with jBPM
链接地址:https://www.777doc.com/doc-6372726 .html