对近期“工作流”方面的一些总结

工作流有四个重要组成部分:


1.物件:也称实体或资源,是工作流程中的“被关注或被操作的对象”。在一个公文审批流程中,公文就是物件。在休假申请流程中,假条就是物件。
2.参与者:是流程中各个步骤上的负责人。它可能是具体的人也可能是某个部门或自动化设备。
3.流程定义:对整个流程一个描述,指明流程应该按照怎样的方式一步步推进执行。
4.工作流引擎:根据流程定义驱动参与者从一个流程到下一下流程的一套机制。

关于Activiti中一些概念的解释:


首先:对于Task来说,它指的是当前正等待执行的Activity,也就是一个进行中的流程所处的当前节点。所以Task表中是没有结束时间的,一旦这个Task完成,它就不再是一个Task,它将从Task表中删除。而在activity_instance表中则会出现一条新记录,用于记录刚刚完成的那个task,也就是说对于每个activity,只要执行一次就会生成一个instance,这与process的处理机制是一至的.

activiti支持任何类型的变量以序列化的方式存入数据库,下次可以通过反系列化取出。也就是说你可以将任何对象做为变量存入activiti的数据库,下次使用时能从数据库中直接该对像取出。

对于Activiti查询性能的担忧:


Activiti的实体类只存储关联对象的ID,如果需要得到关联对象时,需要获得ID后重新通过Query查询。如果需要返回一组集合时,就有可能生成N条sql,这与hibernate中存在的N+1次查询非常相似。
例如:想要得到一个ProcessInstance的name,只能从ProcessDefinition中获得:

org.activiti.engine.repository.ProcessDefinition processDefinition =
            repositoryService.createProcessDefinitionQuery().processDefinitionId(activitiProcessInstance.getProcessDefinitionId()).singleResult();
        processInstance.setName(processDefinition.getName());

而想要得到一个ProcessInstance当前Task的名字,只能从Task中获得:
String executionId = activitiProcessInstance.getId();
org.activiti.engine.task.Task currentTask = taskService.createTaskQuery().executionId(executionId).singleResult();
processInstance.setCurrentTaskName(currentTask.getName());

你可能感兴趣的:(工作,Hibernate,数据库,String,query,工作流引擎)