- 浏览: 427135 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
请假流程(备用)
工作中要用到JBPM写工作流,自习的时候找到一篇较好的文章,贴过来共享下!
xml 代码
- <!----><?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Keller (zju) -->
<!DOCTYPE process-definition PUBLIC
"-//jBpm/jBpm Mapping DTD 2.0//EN"
"http://jbpm.org/dtd/processdefinition-2.0.dtd">
<process-definition name="RequestLeave">
<swimlane name="requester">
<description>申请者</description>
</swimlane>
<swimlane name="chief">
<description>部门主管</description>
<delegation class="kellerdu.jbpm.delegation.ChiefSwimlane" />
</swimlane>
<swimlane name="boss">
<description>上级主管</description>
<delegation class="kellerdu.jbpm.delegation.BossSwimlane" />
</swimlane>
<start-state name="request" swimlane="requester">
<transition to="Begin Request" />
</start-state>
<fork name="Begin Request">
<transition to="Requester Cancel" />
<transition to="IsChief" />
</fork>
<decision name="IsChief">
<delegation class="kellerdu.jbpm.delegation.ChiefDecision" />
<transition name="Boss Approve" to="Boss Approve" />
<transition name="Chief Approve" to="Chief Approve" />
</decision>
<state name="Requester Cancel">
<assignment swimlane="requester" />
<transition name="cancel" to="Decided">
<action>
<!-- 将请假的状态改变为“取消”-->
<delegation class="kellerdu.jbpm.action.RequestCancel" />
</action>
</transition>
</state>
<state name="Chief Approve">
<assignment swimlane="chief" />
<transition name="approve" to="NeedBossApprove">
<action>
<!-- 将请假的状态改变为“主管批准”-->
<delegation class="kellerdu.jbpm.action.ChiefApprove" />
</action>
</transition>
<transition name="disapprove" to="Decided">
<action>
<!-- 将请假的状态改变为“主管否决”-->
<delegation
class="kellerdu.jbpm.action.ChiefDisapprove" />
</action>
</transition>
</state>
<state name="Boss Approve">
<assignment swimlane="boss" />
<transition name="approve" to="Decided">
<action>
<!-- 将请假的状态改变为“老板批准”-->
<delegation class="kellerdu.jbpm.action.BossApprove" />
</action>
</transition>
<transition name="disapprove" to="Decided">
<action>
<!-- 将请假的状态改变为“老板否决”-->
<delegation class="kellerdu.jbpm.action.BossDisapprove" />
</action>
</transition>
</state>
<decision name="NeedBossApprove">
<!-- 请假天数大于10天的要老板批准 -->
<delegation
class="kellerdu.jbpm.delegation.NeedBossApproveDecision" />
<transition name="need" to="Boss Approve" />
<transition name="notNeed" to="Decided" />
</decision>
<join name="Decided">
<description>有一个先到达即进行父Token</description>
<delegation class="kellerdu.jbpm.delegation.DecidedJoin" />
<transition to="Do Something" />
</join>
<decision name="Do Something">
<description>
根据请求的状态决定。
(1)“主管或者老板批准”-‘approve’:修改员工休假的总天数,设定发给用户E-Mail的信息。
(2)“主管或者老板否决”-“disapprove”:设定发给用户E-Mail的信息。
(3)“撤销”-"cancel"-设定发给用户E-Mail的信息。如果主管批准,要发给主管消息说明已经撤销。
</description>
<delegation
class="kellerdu.jbpm.delegation.DoSomethingDecision" />
<transition name="disapprove" to="Finished">
<action>
<delegation class="kellerdu.jbpm.action.Disapprove" />
</action>
</transition>
<transition name="approve" to="Finished">
<action>
<delegation class="kellerdu.jbpm.action.Approve" />
</action>
</transition>
<transition name="cancel" to="Finished">
<action>
<delegation class="kellerdu.jbpm.action.Cancel" />
</action>
</transition>
</decision>
<end-state name="Finished" />
<action event-type="process-end">
<!-- 发送E-Mail消息给申请者,记录请假日志 -->
<delegation class="kellerdu.jbpm.action.ProcessEndAction" />
</action>
</process-definition>
Action指明的是当前状态要执行的一些额外的操作,如记录log、发邮件等。
(1)Swimline的delegation要做的就是判别当前Actor的身份。
java 代码
- package kellerdu.jbpm.delegation;
- import org.jbpm.delegation.*;
- import kellerdu.jbpm.LogsFactory;
- import org.apache.commons.logging.Log;
- public class BossSwimlane implements AssignmentHandler {
- public BossSwimlane() {
- }
- /**
- * 当前的状态有哪个actor来具体负责处理,选择是老板的actor来处理。
- *
- * 如果王林是老板,那么他请假可以用他的名称来开始一个请假流程,当他检查他需要批示的
- * 请假时,使用actorId=boss来找出所有的批示。这时selectActor返回的值就是一个常量“boss”
- *
- *
- * @param assignmentContext AssignmentContext
- * @return String
- * @todo Implement this org.jbpm.delegation.AssignmentHandler method
- */
- public String selectActor(AssignmentContext assignmentContext) {
- Log log = LogsFactory.getLogInstance(this.getClass());
- log.info("任务分配给老板");
- return "boss";
- }
- }
- ========================================
- ackage kellerdu.jbpm.delegation;
- import org.jbpm.delegation.*;
- import kellerdu.jbpm.LogsFactory;
- import org.apache.commons.logging.Log;
- public class ChiefSwimlane implements AssignmentHandler {
- public ChiefSwimlane() {
- }
- /**
- * selectActor
- * @see BossSwimlane
- *
- * @param assignmentContext AssignmentContext
- * @return String
- * @todo Implement this org.jbpm.delegation.AssignmentHandler method
- */
- public String selectActor(AssignmentContext assignmentContext) {
- Log log = LogsFactory.getLogInstance(this.getClass());
- log.info("任务分配给上级主管");
- return "chief";
- }
- }
(二)Decision
java 代码
- package kellerdu.jbpm.delegation;
- import org.jbpm.delegation.*;
- import kellerdu.jbpm.LogsFactory;
- import org.apache.commons.logging.Log;
- import kellerdu.jbpm.Constants;
- public class ChiefDecision implements DecisionHandler {
- public ChiefDecision() {
- }
- /**
- * 判断是否需要主管批准,决定下一个要进行的transition
- *
- * @param executionContext ExecutionContext
- * @return String
- * @todo Implement this org.jbpm.delegation.DecisionHandler method
- */
- public String decide(ExecutionContext executionContext) {
- Log log=LogsFactory.getLogInstance(this.getClass());
- String ac=(String)executionContext.getVariable(Constants.USER_NAME);
- if(ac!=null&&(ac.equals("dali")||ac.equals("wang"))){
- log.info(ac+"需要老板批准!");
- return "BossApprove";
- }else{
- log.info(ac+"需要先经主管批准");
- return "ChiefApprove";
- }
- }
- }
=======================
(三)fork
java 代码
- package kellerdu.jbpm.delegation;
- import org.jbpm.*;
- import org.jbpm.delegation.*;
- import org.jbpm.model.execution.*;
- import java.util.*;
- public class DecidedJoin implements JoinHandler {
- public DecidedJoin() {
- }
- /**
- * fork,只要一个分支到达,即可进行下一步操作,同时取消其它同时进行的分支。
- * 这里就是用户如果取消,请假就取消。如果用户请假批准,则用户不能取消。
- *
- * @param forkContext ForkContext
- * @throws ExecutionException
- * @todo Implement this org.jbpm.delegation.ForkHandler method
- */
- public void join(JoinContext joinContext) throws ExecutionException {
- Iterator it=joinContext.getConcurrentTokens().values().iterator();
- Token arrivingToken = joinContext.getToken();
- while(it.hasNext()){
- Token to=(Token)it.next();
- if(to.getId().equals(arrivingToken.getId())){
- //取消其它执行的Token
- joinContext.getExecutionService().cancelToken(to.getId());
- }
- }
- // reactivate the parent token.
- joinContext.reactivateToken( arrivingToken.getParent() );
- }
- }
(一) 开始一个请假流程
java 代码
- //user是请假人的actorId
- ExecutionService es=JbpmServiceFactory.getInstance().openExecutionService(user);
- HashMap vs=new HashMap();
- //一些参数
- vs.put(Constants.REQUEST_STATUS,String.valueOf(0));
- vs.put(Constants.REQUEST_RETURN_INFO,"No info!");
- vs.put(Constants.USER_NAME,EncodeTransfer.toISO(user));
- vs.put(Constants.REQUEST_DAYS,String.valueOf(rea.getDays()));
- try {
- //开启请假流程
- es.startProcessInstance(Constants.WORK_NAME, vs);
- log.info("["+user+"]"+"申请假期开始!请假"+rea.getDays()+"天!");
- return am.findForward("main");
- } catch (ExecutionException ex) {
- ex.printStackTrace();
- log.error("请假进程无法开始!");
- return am.findForward("error");
- }finally{
- es.close();
- }
(二)当前执行任务
对于部门经理或者老板,找到要处理的请假。
java 代码
- String actorId = (String) req.getSession().getAttribute(Constants.USER);
- if(actorId.equals("wang")){
- actorId="boss";
- }else if(actorId.equals("bigli")){
- actorId="chief";
- }
- // get the execution service
- ExecutionService executionService = JbpmServiceFactory.getInstance().
- openExecutionService(actorId);
- // get the tasklist from jbpm for user
- List tasks = new ArrayList();
- // add the jbpm tasks
- tasks.addAll(executionService.getTaskList(actorId));
- // put the tasklist into the form
- mf.setTasks(tasks);
- // get the tasklist from jbpm for user
- List definitions = new ArrayList();
- // add the jbpm definitions
- definitions.addAll(executionService.getLatestDefinitions());
- // put the tasklist into the form
- mf.setRequests(definitions);
- // close the execution service
- executionService.close();
- req.getSession().setAttribute("mainForm",mf);
- log.debug("任务: " + tasks);
- log.debug("当前可以执行的请求: " + definitions);
(三)处理请假
java 代码
- String actorId = (String) reqrest.getSession().getAttribute(Constants.
- USER);
- Long tokenId=new Long(req.getParameter("tokenId"));
- // get the execution service
- ExecutionService executionService = JbpmServiceFactory.getInstance().
- openExecutionService(actorId);
- Map hm=executionService.getVariables(tokenId);//变量
- String act=req.getParameter("action");//进行转换的transition
- executionService.endOfState(tokenId,hm,act);
- executionService.close();
发表评论
-
Android 数字签名学习笔记
2012-04-25 11:03 966在 Android系统中,所有安装到系统的应用程序都必有 ... -
序列化:serializable,hessian,protobuf性能对比
2011-10-31 17:08 1249分布式应用系统中,系统之间的通讯的质量决定了系统的可用性 ... -
JAR 文件揭密
2011-10-18 01:28 888JAR 文件是什么? ... -
SSL双向认证java实现
2011-10-17 23:49 1019本文通过模拟场景,介绍SSL双向认证的java实现默认的情况下 ... -
Benchmark Analysis: Guice vs Spring
2011-04-19 14:35 1045The original link can be found ... -
Java Network Launching Protocol
2011-04-18 17:43 920在java开发的早期,重点被放在了客户端开发。语言中对于app ... -
NIO 包及工作原理
2011-03-11 11:14 1739NIO 包及工作原理 针对 ... -
使用Java NIO编写高性能的服务器
2011-03-11 01:19 797从JDK 1.4开始,Java的标 ... -
RMI, RMI-IIOP,JNDI
2009-05-21 17:31 15081. RMI-IIOP(Java Remote ... -
企业中的 RMI-IIOP
2009-05-21 17:13 1011RMI 和 CORBA 常被视 ... -
JMX
2009-05-21 15:44 983JMX规范 1.1 J ... -
使用Eclipse IDE的技巧
2009-02-24 11:00 1789使用Eclipse IDE的技巧 作 ... -
spring quartz 动态定时任务
2009-01-22 13:31 4488什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
基于struts+spring+ibatis的轻量级
2009-01-12 16:21 1034基于struts+spring+ibatis的轻量级J2 ... -
Log4j配置实例[经典]
2009-01-12 14:53 1285Log4j配置实例[经典] 0 推荐 ... -
jbpm工作流学习心得
2008-09-19 13:59 1302一,装载流程: 第一种: java 代码 JbpmCo ... -
利用JExcel API操作EXCEL文件
2008-09-08 10:52 1472使用Windows操作系统的朋 ... -
jExcel API讲解
2008-09-08 10:51 1491转自:http://jhobby.iteye.com/blog ... -
Tomcat5.0乱码全解决方案
2008-09-02 11:56 1095http://hi.baidu.com/liet2008/bl ... -
Linux_Macintosh 平台下 Eclipse 环境中的 JNI 混合语言调试
2008-08-28 18:27 1488Linux_Macintosh 平台下 Eclipse ...
相关推荐
在"jBPM请假工作流"中,我们可以看到一个全面的任务列表,这个列表涵盖了请假流程中的各个阶段,使得整个请假过程变得规范、高效。 1. **我要请假**: 这是流程的起点,员工通过jBPM发起请假申请。用户在系统中填写...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...
JBPM4是一款强大的工作流管理系统,专为JavaEE开发人员设计,旨在解决复杂流程管理和变更需求。本课程适合对JavaEE开发有经验的技术人员以及流程分析师。JBPM4提供了广泛的应用场景,涵盖了关键业务流程,如订单处理...
**基于JBPM工作流的OA办公系统** JBPM(Java Business Process Management)是Talend公司推出的一款开源的工作流管理系统,主要用于实现业务流程自动化。它提供了全面的工作流解决方案,包括流程设计、执行、监控和...
【JBPM4.3工作流请假流程例子】是基于Myeclipse8.5M和JBPM4.3的集成应用,旨在演示如何构建一个实际的请假流程。在本文中,我们将深入探讨JBPM(Java Business Process Management)的核心概念,以及如何在实际开发...
【jbpm4.4+s2sh请假流程例子】是一个典型的结合了jbpm4.4工作流引擎和Struts2、Spring、Hibernate(S2SH)框架的实战项目,旨在演示如何在企业级应用中实现一个完整的请假流程。在这个例子中,jbpm4.4作为流程管理的...
【jbpm4请假实例代码】是一个基于jbpm4工作流引擎的示例应用,它用于演示如何在实际项目中实现员工请假流程的自动化管理。jbpm4是一个开源的工作流管理系统,它提供了强大的业务流程建模、执行和管理功能,使得...
jbpm工作流请假案例是一个基于jbpm流程引擎的实践项目,旨在帮助用户理解并学习如何在实际场景中应用工作流技术。jbpm是一款开源的工作流管理系统,它提供了强大的流程建模、执行和监控功能,广泛应用于企业级业务...
jbpm请假流程实例通常包括以下几个关键步骤: 1. **流程设计**:首先,开发者会使用jbpm提供的流程建模工具(例如:jBPM Designer)来定义请假流程。这涉及到创建各种活动(如:申请、审批、驳回等)、决策节点...
jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它允许开发者在Java应用程序中实现复杂的业务流程。jBPM4.4是该框架的一个较早版本,但仍然具有广泛的适用性和学习价值。在这个...
学习jbpm 的最佳例子,例子是用orcal10g 做为数据库的项目实例。本项目对jbpm 用户组 的重写 webroot 下 db 文件夹下有 自己用户角色,关系表的 sql 语句,和基本数据 可以帮助测试,流程跟踪的展示!
总结,jbpm请假流程定义发布项目是一个实用的学习和实践案例,涵盖了jbpm的基本使用、数据库集成、流程定义以及流程的监控与管理。通过对该项目的研究,开发者不仅可以了解jbpm的工作原理,还能掌握如何在实际环境中...
【标题】"请假工作流JBPM整合SSH2完整实例"涉及了多个IT领域的关键技术,主要集中在企业级应用开发上。JBPM(Java Business Process Management)是用于业务流程管理的开源框架,而SSH2则指的是Spring、Struts和...
**JBPM5.4工作流例子详解** JBPM(JBoss Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程的自动化。JBPM5.4是该系统的一个版本,它在之前的基础上进行了优化和增强,提供了更为...
【jbpm 请假示例 简易 修改版】是一个基于jbpm工作流引擎的简单应用实例,旨在演示如何在企业级环境中实现一个请假流程。jbpm是一个开源的工作流管理系统,它提供了完整的业务流程自动化解决方案,包括流程设计、...
jbpm是一款开源的工作流管理系统,主要面向Java开发者,它提供了强大的流程定义和执行能力,帮助企业或组织实现自动化的工作流程。jbpm-2.0-beta1是该系统的早期版本,其核心功能包括工作流引擎、流程建模工具以及一...
【基于JBPM的请假系统】是一个使用JBPM工作流引擎,结合MySQL数据库,并集成了Spring、Struts2和Hibernate(SSH框架)的项目实例。这个系统主要是为了实现企业内部员工的请假申请流程自动化,提高工作效率,减少人为...
《jBPM4工作流应用开发指南》是一本深度探讨工作流管理系统的专业书籍,尤其聚焦于jBPM4这一开源工作流引擎的使用与开发。工作流技术,作为企业管理信息化的重要工具,能够自动化和规范业务流程,提高企业效率。本书...
jBPM4.4工作流开发指南 jBPM4.4是一种流行的工作流引擎,它提供了一个强大且灵活的工作流管理系统。本指南将详细介绍jBPM4.4的安装、部署、使用、开发和原理等方面的知识点。 一、开发环境搭建 要开发jBPM4.4工作...