J2EE工作流理系统jBPM详解〔〕
jBPM入门简介
概述
工作流业务流程理技术基SOA技术实现核心局部工作流够软件开发业务两层次受益:
1方便开发
工作流理系统够简化企业级软件开发甚维护
◆降低开发风险 通状态动作样术语业务分析师开发员种语言交谈样开发员必户需求转化成软件设计
◆实现集中统 业务流程常变化工作流系统处:业务流程实现代码散落种样系统中
◆加快应开发 软件关注流程参者开发起更快代码更容易维护
2业务流程理 〔BPM〕
动化业务流程前分析规格化件艰苦会回报工作:
◆提高效率 许流程动化程中会必步骤较流程控制 通标准工作方法踪审计提高业务流程理
◆改良客户效劳 流程致性提高客户响应预见性
◆灵活 跨越流程软件控制流程业务需重新设计
◆业务流程改良 流程关注趋流畅简单
长远角度工作流流程理技术研究两阶段进行:1目前解决华研新工程中复杂业务流程工作流引擎技术进行实现问题
2升面效劳体系架构实现效劳间业务流程
jBPM全称Java Business Process Management种基J2EE轻量级工作流理系统jBPM公开源代码工程遵循 Apache License
jBPM2004年10月18日发布20版天参加JBoss成JBoss企业中间件台组成局部名称改成JBoss jBPM着jBPM参加JBoss组织jBPM进入全新开展时代前景十分光明
JBoss jBPM 倚赖性容易作java库然访问量J2EE 群应效劳器环境中 JBoss jBPM 数库配置部署应效劳器
jBPM 特色商务逻辑定义没采目前标准WfMC XPDL BPML ebXML BPEL4WS等采定义JBoss jBPM Process definition language 〔jPdl〕jPdl认商务流程作UML状态图jPdl详细定义状态图局部起始结束状态状态间转换等
jBPM特色Hibernate理数库Hibernate目前Java领域种数持久层解决方案通HibernatejBPM数理职离出专注商务逻辑处理〔具体选型报告参考工作流技术选型评估报告〕
文档工作流研究组关开源工作流引擎jbpm研究成果总结容包括工作流研究场景介绍jbpm环境配置包括六研究题:
◆JBPM开发结合保持独立性应系统设计实现什样制约
◆户角色应系统结合变化处理
◆流程中活动动态指定执行者
◆类似传阅功实现
◆子流程实现
◆流程执行步骤耗时阀值动提醒设置
◆jBPM前版稳定性评估
术语定义缩略语
应场景
场景房产营销系统需求中提取出房产工程中客户选户购房程非常典型工作流场景程提取出作jbpm技术研究场景
购房程中会员参
客户:购房体
销售员:购房程中指导房购房
销售理:确定认购信息
财务员:收取定金
客服员:印收印客户认购书
客户购房程描述
◆客户售楼中心销售员进行接
◆客户销售员提供预先申请效劳号
◆销售员确认效劳号否效果效现场出新效劳号
◆销售员引导客户选房
◆客户确定户型房号
◆销售员录入客户认购资料
◆销售员确认认购资料填写完整
◆销售员认购资料提交销售理审批
◆确定否获优惠果客户次交清房款获01优惠
◆交级理审批
◆销售员引导客户财务处交纳定金
◆交纳定金客服员印收
◆客服员印认购书
研究场景更代表性揉合典型工作流应场景面流程作删改
客户认购流程改:
◆客户确定购房销售员录入认购资料
◆提交认购资料必须保证录入资料完整性
◆提交审核总金额进行分类审核果金额50万销售理审核50万级理两时审核通
◆审批完成客户财务处交纳定金
◆客服员客户印收印认购书认购完成
面流程中异常情况(流程中分支)里先作考虑客户交纳定金前时放弃认购
客户认购录入资料容包括:客户姓名房号定金总金额流程号等里仅选取重数作保存象保存录入资料时动取流程号时候根流程号踪流程状态保存认购资料时记录流程号
通标准标准
jBPM 功全面Workflow Engine融合4功:WorkflowBPMBPELPageFlowBPEL扩展采jboss Hibernate实现定义定义标准jpdl支持目前公开工作流〔业务流程〕标准
◆JCP
◆JSR208 Java Business Integration
◆JSR207 Process Definition for Java
◆OASIS
◆WSBPEL
◆Workflow Management Coalition(WFMC)
◆WFMC XPDL
◆Business Process Management Initiative (BPMI)
◆BPMN
◆Object Management Group (OMG)
◆State Chart XML (SCXML)
处理测试阶段JBoss jBPM BPEL扩展准备支持BPEL 11标准(非标准组织通标准)
技术方案
公司采取架构ejb3+tapestry4架构场景实现架构基架构进行实现〔tapestry4+ejb3+jbpm32〕采取jbpm版32目前jbpm新版里jboss作web效劳器
开发环境
里采eclipse32开发工具进行开发Tapestry4+ejb3开发环境配置工程配置根保持致里进行详细介绍关键jbpm32配置方法
jBoss官方网站( jbossorg)载jbpmjpdlsuite32GAzip新版32GA包括
◆jbpmserver 预先配置jboss 应效劳器
◆jbpmdesigner jBPM流程图形化设计器eclipse 插件
◆jbpmdb jBPM 数库兼容包 (参面)
◆jbpm 核心jbpm组件包括库户手册
◆jbpmbpel JBoss jBPM BPEL 扩展参考
预配置JBoss 应效劳器安装组件
核心jBPM 组件 包作JBoss效劳档案
包括jBPM 表格完整数库 默认 hypersonic 数库包含jBPM 表格已定义流程
jBPM 控制台web应程序 jBPM理员
jBPM调度程序 定时器执行 调度程序新手工具箱里配置成servletServlet会产生线程监视定时器执行
流程例子 已发布进jBPM 数库关jbpmjpdlsuite32套件包具体介绍参考JBoss jBPM Cookbook手册
JBoss jBPM Java库 java环境方web 应程序Swing应程序EJBWeb Service等等JBoss jBPM 核心组件包成简单Java库文件赖功性 库 jbpmjpdljar相关第三方库方 hibernate32 dom4j 等等
实现场景中jbpm首先需jbpm32包导入工程中 jbpm32包括两包jbpmjpdljarjbpmidentityjarjbpmjpdljarjbpm核心包jbpmidentityjarjbpm带户角色权限理包两包导入工程中〔具体参考jbpm户手册〕
jbpm中流程定义编写xml文件中需具体业务流程xml中定义需工程根目录新建源目录里命名processes〞该目录保存流程定义xml文件
JBoss jBPM 包括图形化流程设计工具 设计器创作商业流程该图形设计器Eclipse插件图形化设计工具重特性时支持业务分析员技术开发员 样业务流程建模实际执行间滑转换该插件通界面拖拉描绘业务流程需手写编码设计该插件位jbpmjpdlsuite32GAzip中插件安装方法参考elipse插件安装方法安装完毕面通该插件新建流程设计文件
步骤:1processes目录中右建选择New〞—other〞
2选择Process Definition〞点击Next〞
输入Process name点击完成翻开设计界面面根业务设计工作流流程文件
Jbpm身包含jbpm数库表jBPM部hibernate理数库通HibernatejBPM数理职离出专注商务逻辑处理jBPM移植数库进行步流程操作保存jbpm数表中通调jbpm提供接口jBPM数库进行存储更新检索流程信息效劳里Mysql50数库面工程中新建源目录configfiles〞名字意该目录建立hibernatecfgxml文件:
<xml version'10' encoding'utf8'>
<DOCTYPE hibernateconfiguration PUBLIC
HibernateHibernate Configuration DTD 30EN
hibernatesourceforgenethibernateconfiguration30dtd>
<hibernateconfiguration>
<sessionfactory>
< hibernate dialect >
<property namehibernatedialect>orghibernatedialectHSQLDialect<property>
<property namehibernatedialect>
<property>
< JDBC connection properties (begin)
<property namehibernateconnectiondriver_class>orghsqldbjdbcDriver<property>
<property namehibernateconnectionurl>jdbchsqldbmemjbpm<property>
<property namehibernateconnectionusername>sa<property>
<property namehibernateconnectionpassword><property>
JDBC connection properties (end) >
< JDBC connection for MySQL database >
<property nameconnectiondriver_class>
<property>
<property nameconnectionurl>
jdbcmysqllocalhostmyjbpm
<property>
<property nameconnectionusername>root<property>
<property nameconnectionpassword>1234<property>
< JDBC connection pool (use the builtin) >
<property nameconnectionpool_size>1<property>
<property namehibernatecacheprovider_class>
<property>
< use data source >
< DataSource properties (begin)
<property namehibernateconnectiondatasource>
javacompenvJbpmDS<property>
DataSource properties (end) >
< Drop and recreate the database schema on startup >
<property namehbm2ddlauto>create<property>
< JTA transaction properties (begin)
<property namehibernatetransactionfactory_class>
orghibernatetransactionJTATransactionFactory<property>
<property namehibernatetransactionmanager_lookup_class>
onJBossTransactionManagerLookup<property>
JTA transaction properties (end) >
< CMT transaction properties (begin)
<property namehibernatetransactionfactory_class>
orghibernatetransactionCMTTransactionFactory<property>
<property namehibernatetransactionmanager_lookup_class>
orghibernatetransactionJBossTransactionManagerLookup<property>
CMT transaction properties (end) >
< logging properties (begin)
<property namehibernateshow_sql>true<property>
<property namehibernateformat_sql>true<property>
<property namehibernateuse_sql_comments>true<property>
logging properties (end) >
< ############################################ >
< # mapping files with external dependencies # >
< ############################################ >
< following mapping file has a dependendy on>
< 'bsh{version}jar' >
< uncomment this if you don't have bsh on your >
< classpath you won't be able to use the >
< script element in process definition files>
<mapping resourceorgjbpmgraphactionScripthbmxml >
< following mapping files have a dependendy on >
< 'jbpmidentityjar' mapping files>
< of the pluggable jbpm identity component >
< Uncomment the following 3 lines if you >
< want to use the jBPM identity mgmgt >
< component>
< identity mappings (begin) >
<mapping resourceorgjbpmidentityUserhbmxml >
<mapping resourceorgjbpmidentityGrouphbmxml >
<mapping resourceorgjbpmidentityMembershiphbmxml >
< identity mappings (end) >
< following mapping files have a dependendy on >
< the JCR API >
< jcr mappings (begin)
<mapping resourceorgjbpmcontextexevariableinstanc
JcrNodeInstancehbmxml>
jcr mappings (end) >
< ###################### >
< # jbpm mapping files # >
< ###################### >
< hql queries and type defs >
<mapping resourceorgjbpmdbhibernatequerieshbmxml >
< graphdef mapping files >
<mapping
resourceorgjbpmgraphdefProcessDefinitionhbmxml >
<mapping resourceorgjbpmgraphdefNodehbmxml >
<mapping resourceorgjbpmgraphdefTransitionhbmxml >
<mapping resourceorgjbpmgraphdefEventhbmxml >
<mapping resourceorgjbpmgraphdefActionhbmxml >
<mapping resourceorgjbpmgraphdefSuperStatehbmxml >
<mapping resourceorgjbpmgraphdefExceptionHandlerhbmxml >
<mapping resourceorgjbpminstantiationDelegationhbmxml >
< graphnode mapping files >
<mapping resourceorgjbpmgraphnodeStartStatehbmxml >
<mapping resourceorgjbpmgraphnodeEndStatehbmxml >
<mapping resourceorgjbpmgraphnodeProcessStatehbmxml >
<mapping resourceorgjbpmgraphnodeDecisionhbmxml >
<mapping resourceorgjbpmgraphnodeForkhbmxml >
<mapping resourceorgjbpmgraphnodeJoinhbmxml >
<mapping resourceorgjbpmgraphnodeStatehbmxml >
<mapping resourceorgjbpmgraphnodeTaskNodehbmxml >
< contextdef mapping files >
<mapping
resourceorgjbpmcontextdefContextDefinitionhbmxml >
<mapping resourceorgjbpmcontextdefVariableAccesshbmxml >
< taskmgmtdef mapping files >
<mapping
resourceorgjbpmtaskmgmtdefTaskMgmtDefinitionhbmxml >
<mapping resourceorgjbpmtaskmgmtdefSwimlanehbmxml >
<mapping resourceorgjbpmtaskmgmtdefTaskhbmxml >
<mapping
resourceorgjbpmtaskmgmtdefTaskControllerhbmxml >
< moduledef mapping files >
<mapping
resourceorgjbpmmoduledefModuleDefinitionhbmxml >
< bytes mapping files >
<mapping resourceorgjbpmbytesByteArrayhbmxml >
< filedef mapping files >
<mapping resourceorgjbpmfiledefFileDefinitionhbmxml >
< schedulerdef mapping files >
<mapping
resourceorgjbpmschedulerdefCreateTimerActionhbmxml >
<mapping
resourceorgjbpmschedulerdefCancelTimerActionhbmxml >
< graphexe mapping files >
<mapping resourceorgjbpmgraphexeCommenthbmxml >
<mapping resourceorgjbpmgraphexeProcessInstancehbmxml >
<mapping resourceorgjbpmgraphexeTokenhbmxml >
<mapping resourceorgjbpmgraphexeRuntimeActionhbmxml >
< moduleexe mapping files >
<mapping resourceorgjbpmmoduleexeModuleInstancehbmxml >
< contextexe mapping files >
<mapping
resourceorgjbpmcontextexeContextInstancehbmxml >
<mapping
resourceorgjbpmcontextexeTokenVariableMaphbmxml >
<mapping
resourceorgjbpmcontextexeVariableInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceByteArrayInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceDateInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceDoubleInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceHibernateLongInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceHibernateStringInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceLongInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceNullInstancehbmxml >
<mapping
resourceorgjbpmcontextexevariableinstanceStringInstancehbmxml >
< job mapping files >
<mapping resourceorgjbpmjobJobhbmxml >
<mapping resourceorgjbpmjobTimerhbmxml >
<mapping resourceorgjbpmjobExecuteNodeJobhbmxml >
<mapping resourceorgjbpmjobExecuteActionJobhbmxml >
< taskmgmtexe mapping files >
<mapping
resourceorgjbpmtaskmgmtexeTaskMgmtInstancehbmxml >
<mapping resourceorgjbpmtaskmgmtexeTaskInstancehbmxml >
<mapping resourceorgjbpmtaskmgmtexePooledActorhbmxml >
<mapping
resourceorgjbpmtaskmgmtexeSwimlaneInstancehbmxml >
< logging mapping files >
<mapping resourceorgjbpmlogginglogProcessLoghbmxml >
<mapping resourceorgjbpmlogginglogMessageLoghbmxml >
<mapping resourceorgjbpmlogginglogCompositeLoghbmxml >
<mapping resourceorgjbpmgraphlogActionLoghbmxml >
<mapping resourceorgjbpmgraphlogNodeLoghbmxml >
<mapping
resourceorgjbpmgraphlogProcessInstanceCreateLoghbmxml >
<mapping
resourceorgjbpmgraphlogProcessInstanceEndLoghbmxml >
<mapping resourceorgjbpmgraphlogProcessStateLoghbmxml >
<mapping resourceorgjbpmgraphlogSignalLoghbmxml >
<mapping resourceorgjbpmgraphlogTokenCreateLoghbmxml >
<mapping resourceorgjbpmgraphlogTokenEndLoghbmxml >
<mapping resourceorgjbpmgraphlogTransitionLoghbmxml >
<mapping resourceorgjbpmcontextlogVariableLoghbmxml >
<mapping
resourceorgjbpmcontextlogVariableCreateLoghbmxml >
<mapping
resourceorgjbpmcontextlogVariableDeleteLoghbmxml >
<mapping
resourceorgjbpmcontextlogVariableUpdateLoghbmxml >
<mapping
resourceorgjbpmcontextlogvariableinstanceByteArrayUpdateLoghbmxml >
<mapping
resourceorgjbpmcontextlogvariableinstanceDateUpdateLoghbmxml >
<mapping
resourceorgjbpmcontextlogvariableinstanceDoubleUpdateLoghbmxml >
<mapping
resourceorgjbpmcontextlogvariableinstanceHibernateLongUpdateLoghbmxml >
<mapping
resourceorgjbpmcontextlogvariableinstanceHibernateStringUpdateLoghbmxml >
<mapping
resourceorgjbpmcontextlogvariableinstanceLongUpdateLoghbmxml >
<mapping
resourceorgjbpmcontextlogvariableinstanceStringUpdateLoghbmxml >
<mapping resourceorgjbpmtaskmgmtlogTaskLoghbmxml >
<mapping resourceorgjbpmtaskmgmtlogTaskCreateLoghbmxml >
<mapping resourceorgjbpmtaskmgmtlogTaskAssignLoghbmxml >
<mapping resourceorgjbpmtaskmgmtlogTaskEndLoghbmxml >
<mapping resourceorgjbpmtaskmgmtlogSwimlaneLoghbmxml >
<mapping
resourceorgjbpmtaskmgmtlogSwimlaneCreateLoghbmxml >
<mapping
resourceorgjbpmtaskmgmtlogSwimlaneAssignLoghbmxml >
<sessionfactory>
<hibernateconfiguration>
web应工程webxml文件中定义JbpmContextFilter滤类实现JBPMCONTEXT 初始化
<filter>
<filtername>JbpmContextFilter<filtername>
<filterclass>orgjbpmwebJbpmContextFilter<filterclass>
<filter>
<filtermapping>
<filtername>JbpmContextFilter<filtername>
<urlpattern>*<urlpattern>
<filtermapping>
里jbpm配置已根完成关jbpm详细资料家参考jbpm户指南里说
子流程
成果介绍
详细阐述开发成果
评审标准:清楚介绍开发成果
流程业务逻辑非常复杂时候考虑子流程子流程流程相独立
设计思路
描述设计思路开发方法技术点
评审标准:清晰表达设计思路技术点
jbpm中复杂业务流程文件根业务逻辑划分父流程子流程样方面令流程定义文件会设计太臃肿二方便维护需修改流程进行修改影响流程
阐述结合工程需应成果进行开发局部需详细描述开发员成果报告够进行般简单开发具较强操作性
评审标准:开发员说明根应成果进行开发
里介绍关jbpm子流程里定义两流程定义xml文件父流程定义文件子流程定义文件里想执行完Payfirst务时候jbpm流程动子流程文件中执行边定义务
里父流程processdefinitionxml
<xml version10 encodingUTF8>
<processdefinition xmlnsurnjbpmorgjpdl32 namemyapp>
<tasknode namePayFirst>
<task namePayFirstTask swimlanefinance><task>
<transition nameget house contract tosubprocess>
<action nameaction
classcommyappactionMessageActionHandler>
<message>
Has pay first bulk of money Print constract now
<message>
<action>
<transition>
<tasknode>
<processstate namesubprocess>
<subprocess namesubprocessdefinition>
<transition toend><transition>
<processstate>
<tasknode namepass round for perusal
signallastwait createtasksfalse>
<task nameperusal>
<assignment actorid#{processStarter}>
<assignment>
<task>
<event typenodeenter>
<action namecreateInstance
classcommyappactionCreateTaskInstanceAction><action>
<event>
<transition namebackto toOnePersonAudit>
<transition>
<tasknode>
<processdefinition>
面jbpm中processstate标签代表引子流程里接着定义子流程文件
子流程subprocessdefinition定义文件
<xml version10 encodingUTF8>
<processdefinition xmlnsurnjbpmorgjpdl32
namesubprocessdefinition>
<swimlane nameservice>
<assignment actoridservice1 >
<swimlane>
<startstate namesubStart>
<transition toPrintContract><transition>
<startstate>
<tasknode namePrintContract>
<task namePrintContractTask swimlaneservice><task>
<transition namePrintContract toend>
<action nameaction
classcommyappactionMessageActionHandler>
<message>Finish the process instance now<message>
<action>
<transition>
<tasknode>
<endstate nameend><endstate>
<processdefinition>
例实现
结合工程需实现采开发成果开发简单应例链接文档例实现工程工程
评审标准:简单展示开发成果开发应
面定义两XML文件父流程子流程面说两文件首先先部署两文件子流程注意部署时候定先部署子流程然部署父流程
ProcessDefinition subProcess ProcessDefinitionparseXmlResource
(subprocessdefinitionprocessdefinitionxml)
jbpmContextdeployProcessDefinition(subProcess)
ProcessDefinition processDefinition ProcessDefinition
parseXmlResource(processdefinitionxml)
jbpmContextdeployProcessDefinition(processDefinition)
部署完jbpm会两流程定义文件保存jbpm_processinstance表中调中单流程文件调没区调PrintContract 务end()方法jbpm会根流程文件动找子流程文件定义务进行执行
标准
描述该技术标准〔接口设计接口实现框架设计数结构设计等〕约定约束等
评审标准:清晰详细描述出应标准
考前须知
描述配置开发等需注意问题包括种关键点难点逐步补充
评审标准:开发程中遇关应开发成果开发问题局部里找答案
子流程注意:
先部署子流程然部署流程否流成执行时候会报找子流程异常
直接查jbpm_Token者jbpm_log法找流程间关系需查jbpm_processinstance表找父流程 Token离开process state时候会删subprocessid直接jbpm_log法出两token间关系
应系统jBPM结合
成果介绍
实际开发jBPM采jBPM系统业务系统完全离策略jBPM系统负责流程监控执行业务重心然实际业务需求
设计思路
客户端访问系统时切业务相关操作业务系统中实现需流程监控业务jBPM流程系统中建立相关流程提供相关流程监控执行接口客户端通接口流程进行操作
启动流程实例时首先访问流程系统取新流程实例ID业务系统中保存ID
进行流程监控执行时根ID流程实例进行操作
面购房流程例说明客户购房程Order中进行处理
客户登记房启动流程实例取流程ID保存Order中
销售员销售理财务员通流程系统提供API查找前务执行务时方面执行流程方面修改Order记录
例实现
Order记录流程ID
public class Order implements Serializable {
private Long id
private Long processId
}
流程业务系统接口OrderManager BpmManager
客户房登录时先启动流程
BpmManager bpmManger
Long processIdbpmManagercreateProcess()
Order ordernew Order()
ordersetProcessId(processId)
sessionsave(order)
面步骤中根OrderprocessId取流程ID执行流程务
bpmManagerexecuteProcessTask()
sessionupdate(order)
考前须知
应系统中户角色jBPM结合
成果介绍
应系统中户应该jBPM流程系统中致必须统起方面采户帐号步策略业务系统复制必户信息jBPM流程系统中方面户账号策略保持根户账号独立性业务系统根户账号扩展户信息
设计思路
两系统中户需求定差异益Hibernate映射机制户账号表映射文件保持系统相独立性
jBPM中户identity模块提供实际开发中jBPM中提供户表根底应系统较详细户信息面扩展
建立根底户帐号jBPM中户应系统中户根底扩展
例实现
jBPM中User提供根字段
public class User extends Entity implements Principal {
private static final long serialVersionUID 1L
protected String password null
protected String email null
protected Set memberships null
public User() {
}
public User(String name) {
super(name)
}
}
Hibernate映射文件容:
<xml version10>
<DOCTYPE hibernatemapping PUBLIC
HibernateHibernate Mapping DTD 30EN
hibernatesourceforgenethibernatemapping30dtd>
<hibernatemapping autoimportfalse defaultaccessfield>
<class nameorgjbpmidentityUser
tableJBPM_ID_USER
discriminatorvalueU>
<id nameid columnID_><generator classnative ><id>
<discriminator typechar columnCLASS_>
<property namename columnNAME_>
<property nameemail columnEMAIL_>
<property namepassword columnPASSWORD_>
<set namememberships cascadeall>
<key columnUSER_ >
<onetomany classorgjbpmidentityMembership >
<set>
<set namepermissions cascadeall tableJBPM_ID_PERMISSIONS>
<key columnENTITY_ foreignkeynone >
<element typeorgjbpmidentityhibernatePermissionUserType>
<column nameCLASS_>
<column nameNAME_>
<column nameACTION_>
<element>
<set>
<class>
<hibernatemapping>
里应系统户CustomUser里采jBPM中User中继承策略出字段carId
public class CustomUser extends User {
private String cardId
public String getCardId() {
return cardId
}
public void setCardId(String cardId) {
thiscardId cardId
}
}
映射文件:
<xml version10>
<DOCTYPE hibernatemapping PUBLIC
HibernateHibernate Mapping DTD 30EN
hibernatesourceforgenethibernatemapping30dtd>
<hibernatemapping autoimportfalse defaultaccessfield>
<subclass namecomsamplemodelCustomUser
extendsorgjbpmidentityUser discriminatorvalueU>
<join tableCUSTOM_USER>
<key columnID_><key>
<property namecardId columnCARDID_ >
<join>
<subclass>
<hibernatemapping>
里CustomUserjBPM中User继承
jBPM前版稳定性评估
成果介绍
通官方jbpmRoadMapjbpm jira面写方案出目前jbpm版更新速度会拟频繁方案说年年底完成jbpm40目前版已更新jb版jira发现jbpm33版快速开发中jira目前版升级bug修改功完善
流程执行步骤耗时阀值动提醒设置
成果介绍
Jbpm置调度功 jbpm调度局部分2块timer流程设计员工作timer放置流程中schedulerjbpm维护需台进行调
设计思路
流程执行建立删定时器 定时器存放timer store里 定时器运行必须先timer store里面取根指定时间启动该定时器
Jbpm时间理思路整体说实现非常清晰:
1引擎解析流程定义xml时相应事件挂接createtimer canceltimer动作
2流程实例实际运转时createtimer动作相应事件触发时执行
3createtimerjob表里插入相应时间job记录该job记录附计算完毕执行时间
4JobExecutorServlet台启动JobExecutorThread线程
5JobExecutorThread线程停隔段时间job表扫描次找出需执行job记录执行
6执行次job记录执行完毕删重复执行job记录写入新执行时间更新
7相应事件触发canceltimer动作应job记录job表里删
jBPM通定时器〔timer〕实现日程调度node中参加timer元素实现基定时器节点执行监控实现动提醒功
jbpm提供2种调scheduler方法:
种web应采orgjbpmschedulerimplSchedulerServlet具体方法类javadoc例需webxml中加载行
种针cs程序jbpm提供例
orgjbpmschedulerimplSchedulerMain参编写Scheduler
实例实现
容易方法指定定时器节点里参加定时器元素
运actiontimer例子
<state name'catch crooks'>
<timer name'reminder' duedate'3 business hours' repeat'10 business minutes'
transition'timeouttransition' >
<action class'theremainderactionclassname' >
timer>
state>
运scripttimer例子
<state name'catch crooks'>
<timer name'reminder' duedate'3 business hours' repeat'10 business minutes'
transition'timeouttransition' >
<script>Systemoutprintln(new Date())script>
timer>
state>
例中旦流程实例运行进入state 'catch crooks'定时器reminder创立该定时器延迟3 business hours开始执行动作10 business minutes重复执行次期马执行action类中Java代码然实施timeouttransition(script印时间)迁移
通事件action中参加createtimercanceltimer动作分实现事件定时器创立取消
定时器timerdecision fork join node processstate state superstate tasknode等节点设置开始时间duedate频率repeat定时器动作支持动作元素actionscript会运行设置动作定时器通动作创立取消两动作元素createtimercanceltimer事实默认定时器元素createtimer动作附nodeenter事件canceltimer动作附nodeleave事件简略表示
说说整程:
1令牌进入节点catch crooks
2timer触发〔实际时执行createtimer动作〕
33 business hours timer 事件触发
4定义action执行
5令牌着timeouttransition路径离开catch crooks节点
6canceltimer动作执行timer终止〔没repeat时机〕
注: 运timer先启动scheduler果web工程webxml中配置JbpmThreadsServlet样工程启动会动开启scheduler
JbpmThreadsServlet配置:
< JbpmThreadsServlet >
<servlet>
<servletname>JbpmThreadsServletservletname>
<servletclass>orgjbpmwebJbpmThreadsServletservletclass>
<loadonstartup>1loadonstartup>
servlet>
<servletmapping>
<servletname>JbpmThreadsServletservletname>
<urlpattern>threadsurlpattern>
servletmapping>
考前须知
time节点说 namerepeattransition选属性流程定义说time节点name必须唯果定义name属性引擎会默认node节点name赋timer面例子里果定义timer节点namename会catch crooks说说repeat属性果定义timer会执行次动作会重复执行transition属性果定义属性流程令牌会timer执行动作完毕着路径离开node节点面例子里定义repeat属性action会执行次
action节点选timer节点时间时执行动作意action类型包括script注意时间关两种action类型:createtimer canceltimer实timer节点引擎解释时分解createtimer canceltimer两actioncreatetimer挂接nodeenter事件中canceltimer挂接node leave事件中action节点挂
传阅功实现
成果介绍
传阅功理系统中拟常见功里jbpm实现该功
设计思路
里通jbpmtransition实现传阅功
关jbpmtransition简单家参考jbpm户指南
例实现
<tasknode nameCoding>
<task nameCoding swimlaneprogrammer>
<transition nameto_CodeReview toCode Review>
<transition>
<transition nameto_IntegratedTest toIntegratedTest>
<transition>
<tasknode>
<tasknode nameCode Review>
<task nameReview Code swimlanemanager>
<task>
<transition nameto_Coding toCoding><transition>
<tasknode>
面代码检查〞类似传阅流程程序员编写完代码需传manager进行代码审查manager审查完毕需发回程序员
动态指定执行者
成果介绍
面讲传阅功实现家发现面例子传阅流程定义xml文件面指定阅读吸纳动态指定传阅果动态指定执行者面实现意义实际操作中操作充满确定性执行者会常改变里介绍务动态指定执行者
设计思路
里通jbpmActionHandler操作动态指定执行者操作进入该务节点时候通该务指定action操作该操作根业务规进行务执行者动态指定
务task节点assignment标签指定运行该务执行者果没指定执行该务外通action操作程序中动态设置assignment中执行实现里执行
例实现
首先流程processdefinitionxml定义例:
<xml version10 encodingUTF8>
<processdefinition xmlnsurnjbpmorgjpdl32 namemyapp>
<tasknode nameOnePersonAudit>
<task nameOnePersonAuditTask swimlanemanager>
<controller>
<variable namepass accessreadwriterequired><variable>
<controller>
<task>
< event typenodeleave>
<action namecreateInstance
classcommyappactionCreateTaskInstanceAction>
<action>
<event>
<transition nameOnePersonAduit toIsAgreeAduit >
<transition nameperusaltoone topass round for
perusal><transition>
<tasknode>
<tasknode namepass round for perusal
signallastwait createtasksfalse>
<task nameperusal>
<assignment actorid#{processStarter}><assignment>
<task>
<event typenodeenter>
<action namecreateInstance
classcommyappactionCreateTaskInstanceAction>
<action>
<event>
<transition namebackto toOnePersonAudit><transition>
<tasknode>
<processdefinition>
面务OnePersonAudit里面transitionperusaltoone指务pass round for perusal里传阅流程pass round for perusal务节点中指定该务执行者 该务中
<event typenodeenter>
<action namecreateInstance
classcommyappactionCreateTaskInstanceAction><action>
<event>
事件类型nodeenter〞表示进入该务时执行CreateTaskInstanceAction类操作该类中动态设定该务执行者
CreateTaskInstanceAction代码:
public class CreateTaskInstanceAction implements ActionHandler {
public void execute(ExecutionContext executionContext) throws Exception {
TODO Autogenerated method stub
Systemoutprintln(************************************)
Systemoutprintln( CreateTaskInstanceAction )
Systemoutprintln(************************************)
Token token executionContextgetToken()
TaskMgmtInstance tmi executionContextgetTaskMgmtInstance()
TaskNode taskNode (TaskNode) executionContextgetNode()
Task task taskNodegetTask(perusal)
tmicreateTaskInstance(task token)setActorId(mytest1)
tmicreateTaskInstance(task token)setActorId(mytest2)
tmicreateTaskInstance(task token)setActorId(mytest3)
}
}
SSH框架整合
SSH(Struts+Spring+Hibernate)种流行web开发框架SSHjBPM考虑springmodules提供集成方案类理会带便利
Spring配置文件中声明jbpm
< jBPM Configuration >
<bean idjbpmConfiguration
jbpm31LocalJbpmConfigurationFactoryBean>
< pass in existing sessionFactory >
<property namesessionFactory refsessionFactory >
<property nameconfiguration
valueclasspathorgappfusejbpmjbpmcfgxml >
<property nameprocessDefinitions>
<list>
<ref localtestProcess >
<list>
<property>
<property namecreateSchema valuetrue >
<bean>
<bean idtestProcess
definitionProcessDefinitionFactoryBean>
<property namedefinitionLocation
valueclasspathorgappfusejbpmprocesstestprocessxml >
<bean>
<bean idjbpmTemplate
classorgspringmodulesworkflowjbpm31JbpmTemplate>
<constructorarg index0 refjbpmConfiguration >
<constructorarg index1 reftestProcess >
<bean>
jbpmConfigration赖sessionFactorySSH中配置sessionFactory
现Hibernate样jBPM
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档