读书人

JBPM的简略总结

发布时间: 2012-10-14 14:55:08 作者: rapoo

JBPM的简单总结

安装JBPM
- 引入Hibernate依赖包
- 引入JBPM依赖包
* bsh.jar
* jcr-1.0.jar
* jbpm-identity.jar
* jbpm-jpdl.jar
- 引入数据库驱动

定义相关配置文件
- Hibernate配置文件
* 提供hibernate配置文件(可以从config/目录下拷贝,并修改其中的数据库连接设置即可)

定义流程的文档



    POJO实体类

                  //部署流程定义getJbpmContext().deployProcessDefinition(pdf);//删除流程定义List defs = getJbpmContext().getGraphSession().findAllProcessDefinitionVersions(workFlow.getName());for (Iterator iterator = defs.iterator(); iterator.hasNext();) {ProcessDefinition pdf = (ProcessDefinition) iterator.next();getJbpmContext().getGraphSession().deleteProcessDefinition(pdf);}//创建流程实例,先根据流程定义的名称获得流程定义对象,获得流程定义(GraphSession对象)GraphSession graphSession = context.getGraphSession();//findLatestProcessDefinition查找最新的流程定义,根据流程名称ProcessDefinition process = context.getGraphSession().findLatestProcessDefinition(workFlowName);ProcessInstance instance = new ProcessInstance(process);//绑定到文档,根据文档的IDinstance.getContextInstance().createVariable("documnet", documentId);context.save(instance);//删除流程实例context.getGraphSession().deleteProcessInstance(processInstanceId);//获得一个流程实例,根据IDProcessInstance processInstance = jbpmContext.getProcessInstance(doc.getProcessIntanceId());//获量(TaskInstance)流程实例的数组(根据用户名字)List task = context.getTaskMgmtSession().findTaskInstances(username);for (Iterator iterator = task.iterator(); iterator.hasNext();) {TaskInstance taskInstance = (TaskInstance)iterator.next();//是否if(!taskInstance.isSignalling()){continue;}//先获得ProcessInstance,再获得ContextInstance,再getVariable,(创建的时候是setVariable)//得到的是文档的IDInteger i = (Integer) taskInstance.getProcessInstance().getContextInstance().getVariable("document");docIds.add(i);}//获得当前节点和起始节点String currentNodeName = instance.getRootToken().getNode().getName();String startNodeName = instance.getProcessDefinition().getStartState().getName();/** * 搜索下一步的流向,即下一步都可以走哪些路径 * Parameters: * username * processInstanceId * Returns: * 流向的名称列表 */public List searchNextTransitions(String username, long processInstanceId) {JbpmContext context = getJbpmContext();List transitions = new ArrayList();ProcessInstance instance = context.getProcessInstance(processInstanceId);String currentNodeName = instance.getRootToken().getNode().getName();String startNodeName = instance.getProcessDefinition().getStartState().getName();Collection nextSteps = null;//如果当前节点和起始节点相等if(currentNodeName.equals(startNodeName)){//获得走向的Set集合nextSteps = instance.getRootToken().getAvailableTransitions();}else{//如果当前节点不是起始节点,获得用户的TaskInstanceList list = context.getTaskMgmtSession().findTaskInstances(username);for (Iterator iterator = list.iterator(); iterator.hasNext();) {TaskInstance taskInstance = (TaskInstance) iterator.next();//如果相等,获得走向的Set集合if(taskInstance.getProcessInstance().getId()==processInstanceId){nextSteps = taskInstance.getAvailableTransitions();break;}}}//只获得名字for (Iterator iterator = nextSteps.iterator(); iterator.hasNext();) {Transition transition = (Transition) iterator.next();transitions.add(transition.getName());}return transitions;}//流向下一步public String flowToNextStep(String username, long processInstanceId,String transitionName) {JbpmContext jbpmContext = getJbpmContext();String status = null;ProcessInstance instance = jbpmContext.getProcessInstance(processInstanceId);String currentName = instance.getRootToken().getNode().getName();String startName = instance.getProcessDefinition().getStartState().getName();if(currentName.equals(startName)){//起始节点,流向指定的transitionNameinstance.getRootToken().signal(transitionName);}else{List task = jbpmContext.getTaskMgmtSession().findTaskInstances(username);for (Iterator iterator = task.iterator(); iterator.hasNext();) {TaskInstance taskInstance = (TaskInstance) iterator.next();if(taskInstance.getProcessInstance().getId()==processInstanceId){//非起始节点,流向指定的transitionNametaskInstance.end(transitionName);break;}}}//获得当前的Tokenstatus = instance.getRootToken().getName();if(instance.hasEnded()){status = Document.STATUS_END;}return status;}

                  ?

读书人网 >软件架构设计

热点推荐