用户手册指引模板_第1页
用户手册指引模板_第2页
用户手册指引模板_第3页
用户手册指引模板_第4页
用户手册指引模板_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

jBPM用户手册目录TOC\o"1-3"\h\u1426jBPM用户手册 -1-8608第一章概述 -3-19384第二章安装 -8-23196第三章步骤 -10-11930第四章BPMN2.0 -21-30736第五章API -22-13584第六章人工任务 -23-13524第七章领域-规范步骤 -33-18539第八章持久化 -34-28523第九章控制台 -39-17871第十章监视 -42-概述本章节将介绍jBPM5多种组件。组件将带您快速了解业务步骤生命周期和阶段。这些阶段包含建模、布署、实施和监视。建模jBPM许可用户经过图形方法修改业务步骤。用户和开发者可经过三种方法修改BPMN2.0业务步骤定义。DroolsFlowforeclipse插件DroolsFlow支持创建,调试步骤。jBPM5foreclipse插件现在仍在开发中,仅支持创建步骤。完成后版本将完全支持BPMN2.0规范。基于WEBOryx编辑器(EXT实现)Oryx编辑器整合到Guvnor,它是一个存放步骤知识库。Oryx编辑器支持查看、更新和创建步骤。布署Guvnor是一个知识库,用来存放步骤、域模型、业务规则等。它提供一个基于WEB控制台用来查找、修改和测试你知识库内容。实施步骤引擎步骤引擎是一个基于JAVA语言开发轻量级工作流引擎。内置支持BPMN2.0规范步骤插件化数据持久层和事务配置审计和历史日志统计基于通用步骤引擎现在步骤引擎还没有实现BPMN2.0全部结点类型和属性,但大部分通用结点类型已支持。下图列出全部jBPM5已支持元素:下面列出全部BPMN2.0定义元素:步骤对象事件*StartEvent(None,Conditional,Signal,Message,Timer)*EndEvent(None,Terminate,Error,Escalation,Signal,Message,Compensation)*IntermediateCatchEvent(Signal,Timer,Conditional,Message)立即捕捉事件*IntermediateThrowEvent(None,Signal,Escalation,Message,Compensation)*Non-interruptingBoundaryEvent(Escalation,Timer)非中止边界事件*InterruptingBoundaryEvent(Escalation,Error,Timer,Compensation)活动*ScriptTask(Java、MVEL)JAVA或MVEL脚本表示式语言*Task*ServiceTask*UserTask*BusinessRuleTask*ManualTask*SendTask*ReceiveTask*ReusableSub-Process(CallActivity)可复用子步骤*EmbeddedSub-Process嵌入子步骤*Ad-HocSub-Process点对点子步骤*Data-Object关口*分支*Exclusive(Java,MVELorXPathexpressionlanguage)排斥*Inclusive(Java,MVELorXPathexpressionlanguage)包含*Parallel并行*Event-Based*合并*Exclusive排斥*Parallel并行*Lanes数据*Javatypelanguage*Processproperties*EmbeddedSub-Processproperties*活动properties连接对象*Sequenceflow时序流人工任务服务WS-HT人工任务服务是BPM业务步骤管理处理方案一个关键组成部分。一些任务能够自动实施而不需要和人交互,但有些任务需要和人交互。jBPM5中actors代表人抽象,也就是说不一定是人,能够是阿猫阿狗。jBPM5默认提供了一个和actors交互实现,WS-HT。WS-HT也支持组设置,升级,分配规则等。监视步骤监听器Processlisteners可监听步骤引擎运行时环境发生多种事件,如步骤实例开启、结点实例完成等。这些信息可用来创建历史日志进行报表静态分析或供BAM业务活动监控进行动态分析。基于WEB步骤管理控制台.localhost:8080/jbpm-console用户名/密码:krisv/krisv经过此控制台能够管理步骤实例。进入步骤Overview能够开启步骤,查看步骤,停止步骤。进入个人任务能够进行步骤操作。进入报表能够查看步骤报表。安装参考./blog/998431Guvnor使用:.localhost:8080/drools-guvnor使用视频:./kverlaen/install-guvnor-jbpm.swf若有安装问题,可这么子:Email:IRC:#jbpmatjBPM用户论坛./en/jbpm?view=discussionsFAQ:脚本不能下载组件?检验网络,或直接手动下载后放到jbpm-installer/lib文件夹。下载组件不能解压?文件有问题,重新下载。清除安装?antclean.demo重新开启报异常?手感人工服务结束进程,再重新开启。这是脚本缺点造成。控制台或Guvroy报错?检验${jboss.home}/server/default/log。如不能处理,发到论坛。步骤业务步骤是一张步骤图表,描述一系列实施步骤次序。它由多个结点组成,结点之间相互连接。结点代表总步骤一个步骤,箭头代表结点之间连接,它指定怎样从一个结点流向另外一个结点。BMPN2.0已经预定义了一组结点元素。本章节介绍怎样定义和使用结点。创建步骤创建步骤有三种方法:EclipseBPMN2.0图形编辑器插件文本编辑器直接创建经过步骤API步骤文件扩展名:bpmnbpmn2。图形编辑器插件需要打开属性面板配置元素属性。XML形式:<?xmlversion="1.0"encoding="UTF-8"?>expressionLanguage=".../2.0"xmlns=".../spec/BPMN/0524/MODEL"RuleTaskxmlns:xsi="...//XMLSchema-instance"xsi:schemaLocation=".../spec/BPMN/0524/MODELBPMN2xmlns:g=".../drools/flow/gpd"xmlns:bpmndi=".../spec/BPMN/0524/DI"xmlns:dc=".../spec/DD/0524/DC"xmlns:di=".../spec/DD/0524/DI"xmlns:tns=".../drools"><processprocessType="Private"isExecutable="true"id="com.sample.hello"name=Process"><!--nodes--><startEventid="_1"name="Start"/><scriptTaskid="_2"name="Hello"><script>System.out.println("HelloWorld");</script></scriptTask><endEventid="_3"name="End"><terminateEventDefinition/></endEvent><!--connections--><sequenceFlowid="_1-_2"sourceRef="_1"targetRef="_2"/><sequenceFlowid="_2-_3"sourceRef="_2"targetRef="_3"/></process><bpmndi:BPMNDiagram><bpmndi:BPMNPlanebpmnElement="com.sample.hello"><bpmndi:BPMNShapebpmnElement="_1"><dc:Boundsx="16"y="16"width="48"height="48"/></bpmndi:BPMNShape><bpmndi:BPMNShapebpmnElement="_2"><dc:Boundsx="96"y="16"width="80"height="48"/></bpmndi:BPMNShape><bpmndi:BPMNShapebpmnElement="_3"><dc:Boundsx="208"y="16"width="48"height="48"/></bpmndi:BPMNShape><bpmndi:BPMNEdgebpmnElement="_1-_2"><di:waypointx="40"y="40"/><di:waypointx="136"y="40"/></bpmndi:BPMNEdge><bpmndi:BPMNEdgebpmnElement="_2-_3"><di:waypointx="136"y="40"/><di:waypointx="232"y="40"/></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram></definitions>API方法:为了屏蔽内部API,不推荐使用。关键步骤已经定义在org.jbpm.workflow.core和org.jbpm.workflow.core.node包中。你能够经过工厂来创建步骤。示例在源码包junittests中。packagecess;importorg.jbpm.JbpmTestCase;importorg.jbpm.ruleflow.core.RuleFlowProcessFactory;publicclassProcessFactoryTestextendsJbpmTestCase{ publicvoidtestProcessFactory(){ RuleFlowProcessFactoryfactory=RuleFlowProcessFactory.createProcess("cess"); factory //header .name("Myprocess").packageName("org.drools") //nodes .startNode(1).name("Start").done() .actionNode(2).name("Action") .action("java","System.out.println(\"Action\");").done() .endNode(3).name("End").done() //connections .connection(1,2) .connection(2,3); factory.validate().getProcess(); }}更多代码:./krisv/jbpm/tree/master/jbpm-bpmn2/src/test/resources/使用步骤创建知识库KnowledgeBuilderkbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();kbuilder.add(ResourceFactory.newClassPathResource("MyProcess.bpmn2"),ResourceType.BPMN2);KnowledgeBasekbase=kbuilder.newKnowledgeBase();创建会话开启步骤步骤开启需要显式调用startProcess方法。StatefulKnowledgeSessionksession=kbase.newStatefulKnowledgeSession();ksession.startProcess("com.sample.hello");参数com.sample.hello代表步骤ID。startProcess(StringprocessId,Mapparameters)方法Map参数可传入额外参数,这些参数是键值对。注意这些参数将被复制到步骤实例,作为步骤顶级变量。顶级变量是指变量作用或是顶级。结点类型细节解释步骤有以下属性:ID:惟一NAME:显示名称VERSION:版本Package:命名空间Variables:变量,用于传输数据Swimlanes:泳道(专用通道),指定实施人工任务actorConnectionLayout连接布局Manual:人工Shortestpath:最短路径Manhattan:曼哈顿BMPN支持结点类型以下:开始事件和结束事件,一个步骤必需有一个开始事件,一个或多个结束事件。结束事件Terminate假如为TRUE,那么将结束整个步骤,不然若有多个结束事件只会结束对应结束事件路径。如T2-E2.|-T1-E1(Terminate=false)S-+ |-T2-E2(Terminate=false)RuleTask代表需要实施一组规则集。规则定义在多个分离文件中,格式要求为Droolsruleformat。规则能够成为标准规则流组一部分经过在头部使用ruleflow-group属性。ruleflow-group实施可认为是一个队列。新来必需等前面实施完才会实施。DivergingGateway分支结点,一进多出。Gateway不好翻译,所以省略。ANDparallel和,并行,两个全部要满足(同时)XORorexclusive异或,排斥,只选择其中一个ORorinclusive或,包含,最少只要有一个满足即可(不一样时)ConvergingGateway合并结点,多进一出。ANDparallel和,并行,两个全部要满足(同时)XORorexclusive异或,排斥,只选择其中一个ReusableSub-Process可复用子步骤Waitforcompletion等候完成On-entryandon-exitactions:绑定入口和出品action.Parameterin/outmapping:in表示输入参数out表示输入参数和返回,只有当Waitforcompletion为true时,out才能够使用。ScriptTask代表一个可实施脚本。支持Java,MVEL方言。脚本绑定到Action.Action:绑定Action.TimerEvent定时器事件Timerdelay延迟时间msErrorEvent异常事件FaultName异常处理器名FaultVariable异常变量.MessageEvent消息事件,没有输入EventType监听事件类型VariableName事件数据Scopeinternal步骤内部事件external外部事件.UserTask用户任务(人工任务)ActorId责任人,多个人用逗号“,”分隔GroupId组,多个组用逗号“,”分隔Skippable表示这个任务是否可忽略,即不实施就结束。Swimlane泳道On.entry/on-exitactions:绑定入口、出口ActionParametermapping传入参数Resultmapping返回结果Content:任务数据.Sub-Process子步骤.MultipleInstances多实例子步骤,特殊子步骤,许可实施数次ServiceTask(WorkItemnode)代表一个抽象任务。可经过它扩展任务。Additionalparameters扩展参数定义Data变量,顶级、子级,继承树约束:包含代码约束和规则约束ActionsAction能够访问全局,步骤变量,知识库上下文预定义变量,访问运行时,开启步骤,分发事件,插入数据。Events事件类型-事件监听(消息事件)-事件处理(action)事件分发:内部事件步骤管理外部事件actionTimers定时器更新步骤//createthesessionandstarttheprocess"cess"KnowledgeBuilderkbuilder=...StatefulKnowledgeSessionksession=...ProcessInstanceprocessInstance=ksession.startProcess("cess");//addanewversionoftheprocess"cess2"kbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();kbuilder.add(...,ResourceType.BPMN2);kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());//migrateprocessinstancetonewversionMap<String,Long>mapping=newHashMap<String,Long>();//toplevelnode2ismappedtoanewnodewithid3mapping.put("2",3L);//node2,whichispartofcompositenode5,ismappedtoanewnodewithid4mapping.put("5.2",4L);WorkflowProcessInstanceUpgrader.upgradeProcessInstance(ksession,processInstance.getId(),"cess2",mapping);BPMN2.0现在jBPM5没有完全实现BPMN2.0规范。所以本章略过。API本章是代码,前面已经贴过,不再多说。讲解了知识库、会话、步骤关系及怎样创建。人工任务人工任务规范./ibmdl/pub/software/dw/specs/ws-bpel4people/WS-HumanTask_v1.pdfjBPM5使用UserTask结点表示人工任务(需要和actor交互任务)。UserTask任务结点支持定义任务类型、actors和任务关联数据。经过TaskService可管理UserTask。为了使用人工任务,你必需定义UserTask结点。一个UserTask表示一个需要actor实施自动化任务。人工任务其实能够简单认为是任何类型外部服务。外部服务需要被调用,可看成特殊类型workitem实现。人工任务惟一特色是支持泳道来简化给用户分配任务。UserTask结点属性:*Id:结点惟一标识*Name:结点名称*TaskName:任务名称*Priority:优先级(整数)*Comment:任务注释*ActorId:actor,多个使用逗号","分隔*Skippable:任务可跳过(不实施就结束)*Content:任务关联数据*Swimlane:泳道,能够简化分配多个人工任务给同一个actor*Waitforcompletion:是否等候人工任务实施完成,若为False,则创建完人工任务后继续步骤。*On-entryandon-exitactions:绑定入口、出品事件处理器-action*Parametermapping:参数*Resultmapping:结果*Timers:定时器*ParentId:父人工服务ID泳道说明:这个译法对于大家来讲,不明白怎么回事?但名词而已,纯靠前辈误导,慢慢误导就了解了。使用泳道前必需在步骤定义属性中配置泳道集合。多个人工任务使用同一泳道,第一个人工任务实施时,将会指定一个actorId.后面人工任务即使显式指定actorId,,也不会起作用,而是使用第一个人工任务actorId。当然我们使用泳道就没必需再指定actorId,第一个除外。试想,有这么一个场景,企业有2个部门,HR部和IT部;步骤定义了2个泳道HR、IT;步骤定义中包含4个人工任务,前两个人工任务需要和HR部经理交互,后两个人工任务需要和IT部经理交互。当我们指定前两个人工任务actorId时,需要分配两次。后面两个也是如此。现在极端情况发生了,HR经理和HT经理调岗,我们是不是得去修改步骤定义下全部些人工服务actorId?而经过使用泳道,只需要修改第一个和第三个actorId。泳道和actorId是一对多关系,也就是说,一个人工任务可指定给多个actor来处理。泳道实质是什么,实质就是把人工任务进行分类,并绑定actor列表。人工任务管理组件人工任务和其它外部服务类似,可作为workitme扩展被实现和调用。步骤仅包含人工任务实施所必需抽象描述。workitemhandler是这个抽象描述标准实现。用户使用我们可拔插workitemhandler方法完成底层实现。我们也提供了一个WS-HumanTask规范管理组件。经过它来管理任务生命周期(创建,获取,完成,任务状态持久化)。同时也支持国际化、日历、多种分配类型,代理和生死线。人工任务生命周期当一个步骤实例人工任务结点被触发,人工任务实例将被创建。当创建完成后,人工任务进入Created状态。当人工任务Waitforcompletion属性为False时,步骤会立即继续实施,不然要等候任务完成或终止。进入Created状态,任务将显示全部负责实施actors。等候她们来获取任务。一旦有一个actor获取任务,任务进入Reserved状态。用户决定开始实施任务,此时任务进入InProgress状态。任务开始实施,实施完成后,用户必需完成任务。此时用户进入Completed状态。用户也能够决定任务已经失败,此时任务进入Failed状态。上面介绍正常生命周期,其它包含:Delegating/forwarding任务,分配任务给另外一个actor来处理Revoking回滚任务Temporarlysuspendingandresuming临时挂起或继续任务Stoppingataskinprogress停止正在实施任务Skipping跳过(不实施)链接人工任务管理组件和引擎注册workitemhandlerworkitemhandler功效是翻译抽象workitem(如人工任务)为规范调用。我们已经实现了个workitemhandler,它在包jbpm-human-task中:cess.workitem.wsht.WSHumanTaskHandler注册代码示例:StatefulKnowledgeSessionksession=...;ksession.getWorkItemManager().registerWorkItemHandler("HumanTask",newWSHumanTaskHandler());若需要持久化会话内容,应该使用cess.workitem.wsht.CommandBasedWSHumanTaskHandler它们全部默认使用Mina来提供C/S通信传输。.愈加快速实现HornetQ也是可行。人工任务用户端使用以下生命周期管理方法:开启人工任务管理组件前提:数据表users,groups中数据已经配置好。你可能经过以下代码来添加用户和组:taskSession.addUser(user)taskSession.addGroup(group)确保数据库相关表中最少有一个Administrator用户和administrator角色。我们提供evaluation评审示例中会自动加载两个用户和组配置文件:jbpm-installer\task-service\resources\org\jbpm\LoadUsers.mvelLoadGroups.mvel开启任务管理组件示例:EntityManagerFactoryemf=Persistence.createEntityManagerFactory("org.jbpm.task");TaskServicetaskService=newTaskService(emf,SystemEventListenerFactory.getSystemEventListener());MinaTaskServerserver=newMinaTaskServer(taskService);Threadthread=newThread(server);thread.start();任务管理组件使用JPA来存放任务数据,所以需要配置persistence.xml下面是任务管理组件使用Hibernate和H2数据库存示例:<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><persistenceversion="1.0"xsi:schemaLocation="./xml/ns/persistence./xml/ns/persistence/persistence_1_0.xsd./xml/ns/persistence/orm./xml/ns/persistence/orm_1_0.xsd"xmlns:orm="./xml/ns/persistence/orm"xmlns:xsi="...//XMLSchema-instance"xmlns="./xml/ns/persistence"><persistence-unitname="org.drools.task"><provider>org.hibernate.ejb.HibernatePersistence</provider><class>org.jbpm.task.Attachment</class><class>org.jbpm.task.Content</class><class>org.jbpm.task.BooleanExpression</class><class>org.jbpm.task.Comment</class><class>org.jbpm.task.Deadline</class><class>org.jbpm.task.Comment</class><class>org.jbpm.task.Deadline</class><class>org.jbpm.task.Delegation</class><class>org.jbpm.task.Escalation</class><class>org.jbpm.task.Group</class><class>org.jbpm.task.I18NText</class><class>org.jbpm.task.Notification</class><class>org.jbpm.task.EmailNotification</class><class>org.jbpm.task.EmailNotificationHeader</class><class>org.jbpm.task.PeopleAssignments</class><class>org.jbpm.task.Reassignment</class><class>org.jbpm.task.Status</class><class>org.jbpm.task.Task</class><class>org.jbpm.task.TaskData</class><class>org.jbpm.task.SubTasksStrategy</class><class>org.jbpm.task.OnParentAbortAllSubTasksEndStrategy</class><class>org.jbpm.task.OnAllSubTasksEndParentEndStrategy</class><class>org.jbpm.task.User</class><properties><propertyname="hibernate.dialect"value="org.hibernate.dialect.H2Dialect"/><propertyname="hibernate.connection.driver_class"value="org.h2.Driver"/><propertyname="hibernate.connection.url"value="jdbc:h2:mem:mydb"/><propertyname="hibernate.connection.username"value="sa"/><propertyname="hibernate.connection.password"value="sasa"/><propertyname="hibernate.connection.autocommit"value="false"/><propertyname="hibernate.max_fetch_depth"value="3"/><propertyname="hibernate.hbm2ddl.auto"value="create"/><propertyname="hibernate.show_sql"value="true"/></properties></persistence-unit></persistence>H2数据库实际上是hsqldb2.0+版本.你也能够经过jbpm-human-task源码包src/test/java目录下org.jbpm.task.RunTaskService类来开启任务服务器,它会自动加载LoadUsers.mvel和LoadGroups.mvel配置文件。和任务管理组件交互最终用户不可能直接经过底层AP来管理任务,所以开发者需要使用API来实现和任务管理组件交互。示例:TaskClientclient=newTaskClient(newMinaTaskClientConnector("client1",newMinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener())));client.connect("",9123);//addingataskBlockingAddTaskResponseHandleraddTaskResponseHandler=newBlockingAddTaskResponseHandler();Tasktask=...;client.addTask(task,null,addTaskResponseHandler);longtaskId=addTaskResponseHandler.getTaskId();//gettingtasksforuser"bobba"BlockingTaskSummaryResponseHandlertaskSummaryResponseHandler=newBlockingTaskSummaryResponseHandler();client.getTasksAssignedAsPotentialOwner("bobba","en-UK",taskSummaryResponseHandler);List<TaskSummary>tasks=taskSummaryResponseHandler.getResults();//startingataskBlockingTaskOperationResponseHandlerresponseHandler=newBlockingTaskOperationResponseHandler();client.start(taskId,"bobba",responseHandler);//completingataskresponseHandler=newBlockingTaskOperationResponseHandler();plete(taskId,users.get("bobba").getId(),null,responseHandler);人工任务管理接口1)Eclipse插件配置URL、端口:Window->PreferencesandselectDroolsTask:91232)基于WEB控制台领域-规范步骤本章讲解怎样开发领域规范步骤服务-邮件通知。这个示例应该自己去动手实践。不翻译原因是让英文有难度尝试去挑战下,其实并没有想象这么难。而且内容也不是很多。持久化jBPM5许可持久存放部分信息,如步骤运行时状态、历史信息等。运行时状态jBPM支持插件化持久策略。jBPM默认不会持久化步骤运行时状态。运行时步骤实例仅包含实施所必需信息,不包含历史信息。jBPM支持binarypersistencemechanism二进制数据持久机制。SafePoints安全点,当步骤从一个状态转换到另个状态,叫做安全点,它将触化步骤和受其影响其它步骤进行持久化。配置持久化使用Hibernate来作为JPA持久层实现和H2数据库,你也能够选择其它方案。1)配置依靠包Droolsruntime其它:1.jbpm-persistence-jpa(org.jbpm)2.drools-persistence-jpa(org.drools)3.persistence-api(javax.persistence)4.hibernate-entitymanager(org.hibernate)5.hibernate-annotations(org.hibernate)6.hibernate-commons-annotations(org.hibernate)7.hibernate-core(org.hibernate)8.dom4j(dom4j)9.jta(javax.transaction)10.btm(org.codehaus.btm)11.javassist(javassist)12.slf4j-api(org.slf4j)13.slf4j-jdk14(org.slf4j)14.h2(com.h2database)15.commons-collections(commons-collections)2)配置引擎//createtheentitymanagerfactoryandregisteritintheenvironmentEntityManagerFactoryemf=Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");Environmentenv=KnowledgeBaseFactory.newEnvironment();env.set(EnvironmentName.ENTITY_MANAGER_FACTORY,emf);//createanewknowledgesessionthatusesJPAtostoretheruntimestateStatefulKnowledgeSessionksession=JPAKnowledgeService.newStatefulKnowledgeSession(kbase,null,env);intsessionId=ksession.getId();//invokemethodsonyourmethodhereksession.startProcess("MyProcess");ksession.dispose();重新创建Session//recreatethesessionfromdatabaseusingthesessionIdksession=JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId,kbase,null,env);3)配置persistence.xml<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><persistenceversion="1.0"xsi:schemaLocation="./xml/ns/persistence./xml/ns/persistence/persistence_1_0.xsd./xml/ns/persistence/orm./xml/ns/persistence/orm_1_0.xsd"xmlns:orm="./xml/ns/persistence/orm"xmlns:xsi="...//XMLSchema-instance"xmlns="./xml/ns/persistence"><persistence-unitname="org.jbpm.persistence.jpa"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>jdbc/processInstanceDS</jta-data-source><class>org.drools.persistence.session.SessionInfo</class><class>cessinstance.ProcessInstanceInfo</class><class>cessinstance.WorkItemInfo</class><properties><propertyname="hibernate.dialect"value="org.hibernate.dialect.H2Dialect"/><propertyname="hibernate.max_fetch_depth"value="3"/><propertyname="hibernate.hbm2ddl.auto"value="update"/><propertyname="hibernate.show_sql"value="true"/><propertyname="hibernate.transaction.manager_lookup_class"value="org.hibernate.transaction.BTMTransactionManagerLookup"/></properties></persistence-unit></persistence>布署到包META-INF目录4)配置数据源h2.ds<?xmlversion="1.0"encoding="UTF-8"?><datasources><local-tx-datasource><jndi-name>jdbc/testDS1</jndi-name><connection-url>jdbc:h2:file:/NotBackedUp/data/process-instance-db</connection-url><driver-class>org.h2.jdbcx.JdbcDataSource</driver-class><user-name>sa</user-name><password>sasa</password></local-tx-datasource></datasources>5)配置事务边界每个请求一个事务,默认行为。自定义事务//createtheentitymanagerfactoryandregisteritintheenvironmentEntityManagerFactoryemf=Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");Environmentenv=KnowledgeBaseFactory.newEnvironment();env.set(EnvironmentName.ENTITY_MANAGER_FACTORY,emf);env.set(EnvironmentName.TRANSACTION_MANAGER,TransactionManagerServices.getTransactionManager());//createanewknowledgesessionthatusesJPAtostoretheruntimestateStatefulKnowledgeSessionksession=JPAKnowledgeService.newStatefulKnowledgeSession(kbase,null,env);//startthetransactionUserTransactionut=(UserTransaction)newInitialContext().lookup("java:comp/UserTransaction");ut.begin();//performmultiplecommandsinsideonetransactionksession.insert(newPerson("JohnDoe"));ksession.startProcess("MyProcess");//committhemit();历史日志历史运行日志是引擎实施时基于事件生成。jbpm-bam模板包含事件监听器和存放步骤相关信息到数据库。数据库包含两张表:ProcessInstanceLog:包含步骤实例ID,步骤定义ID,步骤实例开始结束时间NodeInstanceLog:步骤实例节点为实施信息。启用历史日志StatefulKnowledgeSessionksession=...;JPAWorkingMemoryDbLoggerlogger=newJPAWorkingMemoryDbLogger(ksession);//invokemethodsoneyoursessionherelogger.dispose();addFilter:过滤日志内容配置persistence.xml<persistence-unitname="org.jbpm.persistence.jpa"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>jdbc/processInstanceDS</jta-data-source><class>org.drools.persistence.session.SessionInfo</class><class>cessinstance.ProcessInstanceInfo</class><class>cessinstance.WorkItemInfo</class><class>cess.audit.ProcessInstanceLog</class><class>cess.audit.NodeInstanceLog</class><class>cess.audit.VariableInstanceLog</class><properties><propertyname="hibernate.dialect"value="org.hibernate.dialect.H2Dialect"/><propertyname="hibernate.max_fetch_depth"value="3"/><propertyname="hibernate.hbm2ddl.auto"value="update"/><propertyname="hibernate.show_sql"value="true"/><propertyname="hibernate.transaction.manager_lookup_class"value="org.hibernate.transaction.BTMTransactionManagerLookup"/></properties></persistence-unit>控制台.localhost:8080/jbpm-consolekrisv/krisv添加步骤/任务表单表单能够完成步骤开启,人工交互。经过使用freema

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论