国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

activiti個人學習總結

hufeng / 2237人閱讀

摘要:事實也確實如此,可以配置數據庫,其中存儲了流程運行時的相關信息。在初學之時,了解所有的數據庫表的含義對理解工作機制是有很大幫助的,總共涉及的表格總共有個通用數據,用于存放數據。強行回顧了一下前兩天的學習歷程。

1、關于Activiti

初學activiti我關心的它是什么東西、有什么功能、怎么實現?
先來看一張流程圖感受一下:

activiti是一個業(yè)務流程管理引擎,它的流程圖大概就像是列車的軌道,而所要執(zhí)行的對象像是一輛自動運行的列車,只要列車啟動,它就能沿著軌道一直走到終點,而其中的節(jié)點就像是列車到達終點途中所要經過的火車站,它會告訴火車下一站是哪里,然后火車就往指定的下一站駛去,直到終點,流程結束。

如上所描述,最主要的功能就是實現了代碼的自動按流程執(zhí)行

關于怎么實現,既然這是一個框架,自然就是引進jar包,畫流程圖,然后實現該框架提供的接口來做我們想要做的事情。

2、Activiti數據庫的理解

activiti在每個節(jié)點都能知道下一個節(jié)點是什么,以及當前任務是什么,那勢必會有存儲流程的各種信息的表。事實也確實如此,activiti可以配置數據庫,其中存儲了流程運行時的相關信息。在初學Activiti之時,了解activiti所有的數據庫表的含義對理解activiti工作機制是有很大幫助的,activiti總共涉及的表格總共有23個:

act_ge_*:general通用數據,用于存放數據。
act_re_*:reposity類似于倉庫,存放流程定義文件和流程圖片文件,比如一個流程部署之后可以在act_re_deployment表中看到。
act_ru_*:run服務運行時候的數據,當一個流程啟動之后當前的活動任務可以在act_ru_task表格中查看 ,以及流程中所有的變量都保存在act_ru_variable表格當中。

本來想寫一系列完整的Activiti的學習筆記的,但是學完之后發(fā)現工作量著實不小,自身學的也不夠深,況且網上大有牛人有類似的學習筆記,所以此文權當是個人學習activiti的過程中填坑記錄,僅供參考; 3、運行環(huán)境搭建,最簡單的運行環(huán)境(學習中用到了Junit 4用來測試很好用。),eclipse+jar包+mysql,配置文件,因為我這里沒有與Spring整合,所以配置文件就一個activiti.cfg.xml放在class_path下面就好了。


    
    
        
        
        
        
        
        
    

4、下載畫流程工具activiti-app.war

從官網下載war包(登錄用戶密碼:admin test),找到activiti-app.war放進tomcat,啟動之后自己畫一個流程圖,用于下面的測試
war包下載:https://www.activiti.org/down...
版本6.xx的相關文檔都在這里:https://www.activiti.org/docs
版本5.xx的官網好像不再維護了
[畫圖工具]

5、開始實現Activiti的一些api,并查看表格中的變化
package com.lewin.activiti.taskListener;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

public class DepolyTest {
    @Test
    public void run(){
        //獲取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        Deployment deployment = processEngine.getRepositoryService()
                .createDeployment()
                //.addClasspathResource("taskListener.bpmn20.xml")
                .addClasspathResource("UserExecuteTask.bpmn20.xml")
                .deploy();
        String piid = deployment.getId();
        System.out.println("processDefinitionId:"+piid);
        //String processKey = "lewin";
        String processKey = "UserExecuteTask";
        ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processKey);
        System.out.println(pi.getId());
    }
    
    /**
     * 根據流程定義里的id啟動流程實例
     */
    public void startInstance(){
        String processInstanceKey = "lewin";
        //“l(fā)ewin”即對應著流程定義中的id值
        ProcessInstance pi = ProcessEngines.getDefaultProcessEngine()
                .getRuntimeService()
                .startProcessInstanceByKey(processInstanceKey);
        System.out.println("started processInstance id is:"+processInstanceKey+"; pi.id is:"+pi.getId());
    }
    
    /*
     * 從class_path中部署流程實例
     */
    @Test
    public void deploymentProcessDefinition_classpath(){
        //獲取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        Deployment deployment = processEngine.getRepositoryService()//獲取倉庫服務
                        .createDeployment()//創(chuàng)建部署實例
                        .name("deploymentName")//設置將要部署的流程實例的名稱
                        .addClasspathResource("taskListener.bpmn20.xml")//資源文件:默認路徑在class_path下面
                      //.addClasspathResource("diagrams/HelloWorld.png")
                        .deploy();//部署
        System.out.println("id:"+deployment.getId());
        System.out.println("name:"+deployment.getName());
        
    }
    
    /*
     * 查詢定義了的流程
     * 查詢內容來自act_re_deployment
     */
    @Test
    public void findProcessDefinition(){
        //獲取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        List list = processEngine.getRepositoryService()
                        .createProcessDefinitionQuery()
                        
                        //.deploymentId(deploymentId)
                        //.processDefinitionId(processDefinitionId)
                        //.processDefinitionKey(processDefinitionKey)
                        //.processDefinitionNameLike(processDefinitionNameLike)
                        
                       
                        .orderByProcessDefinitionVersion().asc()
                        //.orderByProcessDefinitionName().desc()
                        
                        .list();
                        //.singleResult();
                        //.count();
                        //.listPage(firstResult, maxResults)
        
        if(list != null && list.size()>0){
            for(ProcessDefinition processDefinition:list){
                System.out.println("ID:"+processDefinition.getId());
                System.out.println("NAME:"+processDefinition.getName());
                System.out.println("KEY:"+processDefinition.getKey());
                System.out.println("VERSION:"+processDefinition.getVersion());
                System.out.println("resourceName:"+processDefinition.getResourceName());
                System.out.println("圖片名字:"+processDefinition.getDiagramResourceName());
                System.out.println("部署的流程id:"+processDefinition.getDeploymentId());
                System.out.println("################################");
            }
        }
        
    }
    
    /*
     * 刪除流程定義
     */
    @Test
    public void deleteProcessDefinition(){
        //獲取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //流程定義id
        String deploymentId = "2201";
        
        processEngine.getRepositoryService()
                        .deleteDeployment(deploymentId, true);
        
        System.out.println("刪除成功!");
    }
    
    /*
     * 查看流程定義圖并下載到本地
     */
    @Test
    public void viewPic() throws IOException{
        //獲取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        /**流程部署id*/
        String deploymentId = "201";
        //根據id獲取存儲在act_re_deployment表里面的靜態(tài)資源,里面就有圖片
        List list = processEngine.getRepositoryService()//
                        .getDeploymentResourceNames(deploymentId);
        //獲取名字
        String resourceName = "";
        if(list!=null && list.size()>0){
            for(String name:list){
                if(name.indexOf(".png")>=0){
                    resourceName = name;
                }
            }
        }
        
        
        //獲取圖片資源
        InputStream in = processEngine.getRepositoryService()//
                        .getResourceAsStream(deploymentId, resourceName);
        
        //新建文件
        File file = new File("D:/"+resourceName);
        //文件復制
        FileUtils.copyInputStreamToFile(in, file);
    }
    
    /*
     * 刪除路程定義根據定義中的名字
     */
    @Test
    public void deleteProcessDefinitionByKey(){
        //獲取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //流程定義文件中的名字,如果相同名字有多個默認使用版本最高的那個
        String processDefinitionKey = "UserExecuteTask";
        List list = processEngine.getRepositoryService()
                        .createProcessDefinitionQuery()
                        .processDefinitionKey(processDefinitionKey)
                        .list();
        //刪除所有名字為UserExecuteTask的流程定義
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                //獲取ID
                String deploymentId = pd.getDeploymentId();
                processEngine.getRepositoryService()
                                .deleteDeployment(deploymentId);
            }
        }
    }
    
    /**
     * 查詢流程狀態(tài)
     */
    @Test
    public void queryInstanceState(){
        //流程id
        String instanceId = "1309";
        //任務id
        String taskId = "1312";
        //獲取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //通過流程id查詢狀態(tài)
        ProcessInstance pi = processEngine.getRuntimeService()
                .createProcessInstanceQuery()//創(chuàng)建查詢
                .processInstanceId(instanceId)//根據id
                .singleResult();//獲取狀態(tài)
        if(pi!=null){
            System.out.println("id為"+instanceId+"的流程正在進行中......");
            //完成當前節(jié)點
            processEngine.getTaskService().complete(taskId);
        }else{
            System.out.println("id為"+instanceId+"的流程已經完成!");
        }
    }
    
    /**
     * 查詢流程執(zhí)行對象
     */
    @Test
    public void queryExecution(){
        //查詢執(zhí)行對象
        String exe = "User Task";
        //獲取流程實例
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //查詢
        Execution e1 = processEngine.getRuntimeService()
                .createExecutionQuery()
                .processInstanceId("1509")
                .activityId(exe)
                .singleResult();
        if(e1!=null){
            System.out.println("e1!=null");
        }else{
            System.out.println("e1==null");
        }
    }
    
    /**
     * 根據用戶查詢任務
     */
    @Test
    public void queryUserTask(){
        
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // Fetch all tasks for the management group
        TaskService taskService = processEngine.getTaskService();
        List tasks = taskService.createTaskQuery().taskCandidateGroup("management").list();
        for (Task task : tasks) {
          System.out.println("Task available: " + task.getName());
        }
    }
    
    
}
6、例子1:只有用戶任務和并行網關的運行

UserExecuteTask.bpmn20.xml文件:

  
  
   
      
       
        
        
     
     
      
      
      
         
            
         
      
      
         
            
         
      
      
            
            
         
      
      
      
         
            
         
      
      
      
          
             
          
      
      
      
      
      
      
      
      
      
      
      
      
      
    

測試代碼:
/**

     * 對應UserExecuteTask.bpmn20.xml
     * 這是一個用戶任務,所以流程完全執(zhí)行需要用戶的參與
     * 獲取所有任務
     * 
     */
    @Test
    public void getAllTasks(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取倉庫實例
        Deployment deployment = processEngine.getRepositoryService()
                .createDeployment()
                .addClasspathResource("UserExecuteTask.bpmn20.xml")
                .deploy();
        //啟動流程實例
        ProcessInstance pi = processEngine.getRuntimeService()
                .startProcessInstanceByKey("UserExecuteTask");
        System.out.println("pi.id:"+pi.getId());
        
        //第一輪(流程啟動之后自動進入下一級節(jié)點,
        //下一級節(jié)點為并行的三個任務,獲取該三個任務依次按定義文件中順序完成) 
        TaskService taskService = processEngine.getTaskService();
        TaskQuery query = taskService.createTaskQuery().processInstanceId(pi.getId()).orderByTaskName().asc();
        List tasks = query.list();
        //循環(huán)打印tasks的信息
        for(Task task : tasks){
            //執(zhí)行任務  ,完成任務
            taskService.complete(task.getId());  
            System.out.println("name ="+task.getName()); 
            System.out.println(tasks.size());
        }
            
        //第二輪查詢任務:上一輪三個任務依次完成之后開始進入下一輪,第二級節(jié)點  
        tasks = query.list();
        //循環(huán)打印tasks的信息
          for(Task task : tasks){
              //執(zhí)行任務  ,完成任務
              taskService.complete(task.getId());  
              System.out.println("name ="+task.getName()); 
              System.out.println(tasks.size());
          }
          
        //第三輪查詢任務:上一輪一個任務完成之后,開始進入下一級節(jié)點,
          //即最后的人事部門審批  
        tasks = query.list();
        //循環(huán)打印tasks的信息
          for(Task task : tasks){
              //執(zhí)行任務  ,完成任務
              taskService.complete(task.getId());  
              System.out.println("name ="+task.getName()); 
              System.out.println(tasks.size());
          }
    }
    

運行結果:

7、例子2:只有系統任務和并行網關的運行

AutoUserExecuteTask.bpmn20.xml文件:

  
  
  
     
       
        
        
     
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    
    
 

測試代碼:

/**
     * 對應UserExecuteTask.bpmn20.xml
     * 這是一個自動任務(不包含用戶任務),所以流程完全執(zhí)行不需要用戶的參與
     * 只需要啟動實例,流程會自動按流程走完
     * 獲取所有任務
     * 
     */
    @Test
    public void autoRun(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取倉庫實例
        Deployment deployment = processEngine.getRepositoryService()
                .createDeployment()
                .addClasspathResource("AutoUserExecuteTask.bpmn20.xml")
                .deploy();
        //啟動流程實例
        ProcessInstance pi = processEngine.getRuntimeService()
                .startProcessInstanceByKey("AutoUserExecuteTask");
        System.out.println("pi.id:"+pi.getId());
    }
    

運行結果:

![圖片上傳中...]

8、例子3:只有用戶任務和排他網關的運行

ExclusiveGatawayDemo.bpmn20.xml文件:



  
    ExclusiveGatawayDemo
    
      
      
    
    
    
      
        
      
    
    
    
    
    
      
        
      
    
    
      
        
      
    
    
    
    
    
      
    
    
      
    
  
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
        
        
      
      
        
        
      
      
        
        
        
      
      
        
        
      
    
  
 

測試代碼:

/**
     * 對應ExclusiveGatewayDemo.bpmn20.xml
     * 包含排他網關的流程
     * 獲取所有任務
     * 
     */
    @Test
    public void exclusiveGatewayTasks(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取倉庫實例
        Deployment deployment = processEngine.getRepositoryService()
                .createDeployment()
                .name("ExclusiveGatawayDemo_Deploymentname")
                .addClasspathResource("ExclusiveGatawayDemo.bpmn20.xml")
                .deploy();
        //啟動流程實例
        ProcessInstance pi = processEngine.getRuntimeService()
                .startProcessInstanceByKey("ExclusiveGatawayDemo");
        System.out.println("pi.id:"+pi.getId());
        
        //第一輪(流程啟動之后自動進入下一級節(jié)點,
        //下一級節(jié)點為并行的三個任務,獲取該三個任務依次按定義文件中順序完成) 
        TaskService taskService = processEngine.getTaskService();
        TaskQuery query = taskService.createTaskQuery().processInstanceId(pi.getId()).orderByTaskName().asc();
        List tasks = query.list();
        //循環(huán)打印tasks的信息
        for(Task task : tasks){
            //執(zhí)行任務  ,完成任務
            taskService.complete(task.getId());  
            System.out.println("name ="+task.getName()); 
            System.out.println(tasks.size());
        }
        /**
         * userTask1完成,并且設置變量“myCondition”
         * 這里測試設置的值是"userTask3"
         * 按照定義應該執(zhí)行userTask3
         * 注釋下面代碼的情況下,查詢act_ru_task可以查看到有userTask3任務
         * 不注釋的情況下,流程完成userTask1和userTask3走完整個流程
         */
            
        //第二輪查詢任務:上一輪三個任務依次完成之后開始進入下一輪,第二級節(jié)點  
        tasks = query.list();
        //循環(huán)打印tasks的信息
          for(Task task : tasks){
              //執(zhí)行任務  ,完成任務
              taskService.complete(task.getId());  
              System.out.println("name ="+task.getName()); 
              System.out.println(tasks.size());
          }
          
        //第三輪查詢任務:上一輪一個任務完成之后,開始進入下一級節(jié)點,
          //即最后的人事部門審批  
        tasks = query.list();
        //循環(huán)打印tasks的信息
          for(Task task : tasks){
              //執(zhí)行任務  ,完成任務
              taskService.complete(task.getId());  
              System.out.println("name ="+task.getName()); 
              System.out.println(tasks.size());
          }
    }

運行結果:

字數不夠,代碼來湊,草草結束,細節(jié)之處多有遺漏,有一起學習的有問題的可以私信。強行回顧了一下前兩天的學習歷程。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70264.html

相關文章

  • 深度學習調參入門,有哪些技巧?

    摘要:本文將分享一些自己關于深度學習模型調試技巧的總結思考以為主。不過以卷積神經網絡為代表的深層神經網絡一直被詬病,這對于模型在工業(yè)界的應用推廣還是帶來了一定的阻礙。 作者楊軍,從事大規(guī)模機器學習系統研發(fā)及應用相關工作。本文將分享一些自己關于深度學習模型調試技巧的總結思考(以CNN為主)。最近因為一些需要,參與了一些CNN建模調參的工作,出于個人習性,我并不習慣于通過單純的trial-and-er...

    Developer 評論0 收藏0
  • android知識大總結 - 收藏集 - 掘金

    摘要:中簡單搞定接口訪問,以及簡析掘金最近總結的一些經驗,對于或中使用接口的一些心得。這里,本文將數據結構之學習總結掘金前言前面介紹了的數據結構,今天抽空學習總結一下另一種數據結構。淺析事件傳遞掘金中的事件傳遞主要涉及三個方法和。 Android 系統中,那些能大幅提高工作效率的 API 匯總(持續(xù)更新中...) - 掘金前言 條條大路通羅馬。工作中,實現某個需求的方式往往不是唯一的,這些不...

    luodongseu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<