`
yuanyao
  • 浏览: 147229 次
  • 性别: Icon_minigender_1
  • 来自: 就那小山沟
社区版块
存档分类
最新评论

jBPM3.2.2源码分析---org.jbpm.taskmgmt*包&&org.jbpm.web*

    博客分类:
  • Jbpm
阅读更多
org.jbpm.taskmgmt.def包:
-def
--AssignmentHandler.java
--Swimlane.hbm.xml
--Swimlane.java
--Task.hbm.xml
--Task.java
--TaskController.hbm.xml
--TaskController.java
--TaskControllerHandler.java
--TaskMgmtDefinition.hbm.xml
--TaskMgmtDefinition.java


AssignmentHandler一个接口,定义了assign()方法.

Swimlane.java、Swimlane.hbm.xml与jbpm数据库的JBPM_SWIMLANE相对应,起作用是把某任务分配到某个人上.泳道的代码很简单,找里不多介绍了.

Task.java、Task.hbm.xml与jbpm数据库的JBPM_TASK相对应
下面看一看Task的parePriority()方法,根据字符串比较,返回任务的优先级(Task分为5个优先级),任务事件类型数组有四个元素,分别是:
EVENTTYPE_TASK_CREATE,EVENTTYPE_TASK_ASSIGN,EVENTTYPE_TASK_START,EVENTTYPE_TASK_END.

TaskController.java、TaskController.hbm.xml与jbpm数据库的JBPM_TASKCONTROLLER相对应,TaskController是一个任务控制器.

TaskMgmtDefinition.java、TaskMgmtDefinition.hbm.xml与jbpm数据库的JBPM_TASKMGMTDEFINITION相对应,一个流程定义有一个TaskMgmtDefinition,
一个TaskMgmtDefinition对应多个swimlane,同时对应多个task;一个swimlane有多个task,可以从TaskMgmtDefinition中通过task的名称直接获取相应的task;



org.jbpm.taskmgmt.exe包:
-exe
--Assignable.java
--PooledActor.hbm.xml
--PooledActor.java
--SwimlaneInstance.hbm.xml
--SwimlaneInstance.java
--TaskInstance.hbm.xml
--TaskInstance.java
--TaskMgmtInstance.hbm.xml
--TaskMgmtInstance.java


Assignable接口定义了setActorId()和setPooledActors()两个方法.

PooledActor.java、PooledActor.hbm.xml与jbpm数据库的JBPM_POOLEDACTOR相对应.
来重点看一下PooledActor的createPool()方法:

public static Set createPool(String[] actorIds, SwimlaneInstance swimlaneInstance, TaskInstance taskInstance) {
    Set pooledActors = new HashSet();
    for (int i=0; i<actorIds.length; i++) {
    	//循环创建PooledActor
      PooledActor pooledActor = new PooledActor(actorIds[i]);
      if (swimlaneInstance!=null) {
      	//设置PooledActor的泳道实例
        pooledActor.setSwimlaneInstance(swimlaneInstance);
      }
      if (taskInstance!=null) {
        //为PooledActor添加任务实例
        pooledActor.addTaskInstance(taskInstance);
      }
      //把PooledActor添加到PooledActors Set中
      pooledActors.add(pooledActor);
    }
    return pooledActors;
  }

 
SwimlaneInstance.java、SwimlaneInstance.hbm.xml与jbpm数据库的JBPM_SWIMLANE想对应,泳道实例实现了Assignable借口。

TaskInstance.java、TaskInstance.hbm.xml与jbpm数据库的JBPM_TASKINSTANCE相对应


org.jbpm.web下有三个类:
CloseJbpmConfigurationServlet.java
JbpmContextFilter.java
ProcessUploadServlet.java

ProcessUploadServlet,这个servlet负责上传、部署流程定义文件,主要代码如下:
jbpm用Apache commons项目的commons fileupload实现上传文件的操作

try {
            DiskFileUpload fileUpload = new DiskFileUpload();
	    //从request中解析出FileItem实例的一个List
            List list = fileUpload.parseRequest(request);
            log.debug("Upload from GPD");
            Iterator iterator = list.iterator();
            if (!iterator.hasNext()) {
                log.debug("No process file in the request");
                return "No process file in the request";
            }
            FileItem fileItem = (FileItem) iterator.next();
            if (fileItem.getContentType().indexOf("application/x-zip-compressed") == -1) {
                log.debug("Not a process archive");
                return "Not a process archive";
            }
            try {
                log.debug("Deploying process archive " + fileItem.getName());
		//从FileItem中获得输入流,由此创建zip输入流
                ZipInputStream zipInputStream = new ZipInputStream(fileItem.getInputStream());
		//获取jbpm上下文
                JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
                log.debug("Preparing to parse process archive");
		//从zip输入流中解析流程定义
                ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
                log.debug("Created a processdefinition : " + processDefinition.getName());
		//部署流程定义到数据库中
                jbpmContext.deployProcessDefinition(processDefinition);
                zipInputStream.close();
                return "Deployed archive " + processDefinition.getName() + " successfully";
            } catch (IOException e) {
                return "IOException";
            }

jbpmContextFilter是jbpm的一个过滤器,部分代码如下:

//doFilter()方法:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    String actorId = null;
    if (servletRequest instanceof HttpServletRequest) {
      HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
      Principal userPrincipal = httpServletRequest.getUserPrincipal();
      if (userPrincipal != null) {
        actorId = userPrincipal.getName();
      }
    }
    //根据初始化时得到的jbpmContextName创建JbpmContext
    JbpmContext jbpmContext = getJbpmConfiguration().createJbpmContext(jbpmContextName);
    try {
      if (isAuthenticationEnabled) {
         //设置actor
        jbpmContext.setActorId(actorId);
      }
      filterChain.doFilter(servletRequest, servletResponse);
    } finally {
      jbpmContext.close();
    }
  }


CloseJbpmConfigurationServlet很简单,init()、destroy()、getInitParameter()在三个方法。
分享到:
评论

相关推荐

    jbpm-jpdl-suite-3.2.3安装配置.doc

    JBPM,全称为Java Business Process Management,是一款基于J2EE平台的轻量级工作流管理系统。作为开源项目,jbpm遵循Apache License,提供了一个灵活且功能丰富的框架,用于设计、执行和管理业务流程。该系统旨在...

    jbpm-jpdl-src.rar

    5. **org.jbpm.taskmgmt**:任务管理模块,处理任务的分配、完成、委托等操作,与工作流中的任务活动紧密相关。 6. **org.jbpm.process**:这部分可能包含流程实例的生命周期管理,如启动、暂停、恢复、结束等操作...

    JBPM-----PPT

    **JBPM——工作流管理系统详解** JBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于管理和执行业务流程。这个PPT集合提供了一套完整的教程,旨在帮助用户快速理解并掌握JBPM的核心...

    jbpm-7.3.0.Final-bin 工作流

    jbpm-7.3.0.Final-bin是一个包含jBPM框架核心组件的压缩包,jBPM是一个全面的开源业务流程管理系统,专注于提供企业级的流程自动化和管理能力。这个版本是7.3.0.Final,代表了该框架在特定时间点的稳定版本。 jBPM...

    jbpm-5.4.0.Final

    8. **jbpm-bam-5.4.0.Final.jar**:业务活动监控(Business Activity Monitoring)模块,允许收集和分析流程执行的数据,以便进行性能监控和改进。 9. **jbpm-test-5.4.0.Final.jar**:提供了测试框架,帮助开发者...

    jBPM5 用户手册-中文版.zip

    **jBPM5 用户手册-中文版** jBPM5 是一个开源的工作流管理系统,它提供了业务流程管理(BPM)和工作流解决方案,帮助企业或组织实现自动化的工作流程。这个用户手册是专为中文使用者设计的,旨在帮助他们更好地理解...

    jbpm3.2.3 要用jar包

    9. **jbpm-gwt-console-server.jar**/ **jbpm-gwt-console-client.jar**:这两者是jbpm的Web控制台组件,用于图形化展示和管理流程,客户端库用于浏览器端,服务器端库则部署在应用服务器上。 10. **依赖的第三方库...

    jbpm-jpdl-designer-3.1.3.zip

    "jbpm-jpdl-designer-3.1.3.zip" 是一个压缩包,其中包含的是JBPMP项目中的JPDL设计器的相关资源。这个版本号3.1.3表明这是一个特定的历史版本。JBPMP(Java Business Process Management Suite)是用于业务流程管理...

    jbpm-5.1.0.Final-bin

    【jbpm-5.1.0.Final-bin】是一个包含jbpm5.1.0版本所有必需组件的压缩包,适用于进行基于Java的企业流程管理(Business Process Management, BPM)开发。该版本提供了全面的工具和服务,使开发者能够设计、执行和...

    jbpm-jpdl-3.2.2.zip

    总的来说,jbpm-jpdl-3.2.2.zip是一个用于创建和管理业务流程的工具包,包含了必要的文件和文档,使得开发人员和业务分析师能够有效地定义和实现复杂的业务流程,而jbpm-jpdl-designer则是这个过程中的重要辅助工具...

    jbpm项目源码项目源码

    jbpm(Java Business Process Management)是一个开源的工作流和业务流程管理框架,主要用于设计、执行和管理业务...此外,如果你是开发者,源码分析还能帮助你定制自己的jbpm实现,或者在现有项目中更有效地集成jbpm。

    jbpm3.2.2 web工程框架

    【jbpm3.2.2 Web工程框架】是企业级工作流程管理(Business Process Management,BPM)系统jbpm的一个特定版本,适用于构建基于Web的应用程序。jbpm是一款开源的BPM解决方案,它允许开发者设计、执行、管理和监控...

    jbpm-bpmn2-5.1.0.Final.jar

    jbpm-bpmn2-5.1.0.Final.jar jbpm5

    jbpm-jpdl-suite-3.2.GA.zip-3

    jbpm-jpdl-suite-3.2.GA.zip

    jbpm-jpdl-suite-3.2.3.zip

    jbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3....

    jbpm3.2.2工作流入门例子

    jbpm3.2.2是jbpm的一个版本,它在当时提供了许多关键功能,如流程定义、流程实例管理、任务管理和事件处理等。本入门例子旨在帮助初学者快速理解和应用jbpm。 在jbpm3.2.2中,工作流引擎是核心组件,它负责解析流程...

    jbpm4.3最核心的12个jar包

    这些jar文件一起构成了jbpm4.3的核心架构,允许开发者和业务分析师以声明式的方式定义流程,并将它们与应用程序集成。配合war工程和数据库脚本,用户可以直接在Tomcat6这样的应用服务器上部署并运行,实现了快速搭建...

    JBPM-3.2.2

    【JBPM-3.2.2】是一款基于Java的企业级工作流管理系统,它主要用于设计、执行和管理业务流程。在JBPM 3.2.2版本中,主要提供了jbpm-jpdl-suite-3.2.2.zip这个压缩包,其中包含了用于绘制流程图的相关工具和库。 ...

    jbpm-jpdl-suite-3.2.GA.zip-6

    jbpm-jpdl-suite-3.2.GA.zip

    深入浅出jBPM.1-6章测试代码_jbpm-test.rar

    《深入浅出jBPM:1-6章测试代码详解》 jBPM,全称为Java Business Process Management,是一款开源的工作流管理系统,用于处理业务流程的建模、部署、执行和监控。它提供了灵活的工作流定义,支持BPMN 2.0标准,...

Global site tag (gtag.js) - Google Analytics