您好,登錄后才能下訂單哦!
工作流主要解決的主要問(wèn)題是:為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo),利用計(jì)算機(jī)在多個(gè)參與者之間按某種預(yù)定規(guī)則自動(dòng)傳遞文檔、信息或者任務(wù)。
activiti官方提供了一個(gè)示例工程activiti-explorer.war,運(yùn)行這個(gè)工程可以體驗(yàn)activiti的基本功能,了解工作流的基本使用。
本文中使用的是activiti-5.22.0的官方包,
下載地址
一、搭建開(kāi)發(fā)環(huán)境
要運(yùn)行示例工程,需要安裝jdk8和tomcat。其中jdk需要jdk8或以上,tomcat我使用的是tomcat8,使用tomcat7時(shí)啟動(dòng)會(huì)報(bào)如下錯(cuò)誤:
嚴(yán)重: Exception sending context initialized event to listener instance of class org.activiti.explorer.servlet.WebConfigurer org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoDataConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected org.activiti.engine.IdentityService org.activiti.explorer.conf.DemoDataConfiguration.identityService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'identityService' defined in class path resource [org/activiti/explorer/conf/ActivitiEngineConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.activiti.engine.IdentityService]: Factory method 'identityService' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine' defined in class path resource [org/activiti/explorer/conf/ActivitiEngineConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.activiti.engine.ProcessEngine]: Factory method 'processEngine' threw exception; nested exception is java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngineFactoryBean': FactoryBean threw exception on object creation; nested exception is java.util.ServiceConfigurationError: org.activiti.engine.cfg.ProcessEngineConfigurator: org.activiti.management.jmx.JMXConfigurator not a subtype at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) at org.activiti.explorer.servlet.WebConfigurer.contextInitialized(WebConfigurer.java:40) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5197) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5720) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1018) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:994) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:662) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2020) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.base/java.lang.Thread.run(Thread.java:844)
不明白這個(gè)是什么原因造成的,但tomcat升級(jí)到8版本后可以正常啟動(dòng).
二、運(yùn)行示例工程
將 activiti-5.22.0 的官方包解壓后復(fù)制其中的activiti-explorer.war到本地tomcat的webapps目錄中,然后啟動(dòng)tomcat,瀏覽器中訪問(wèn)http://localhost:8080/activiti-explorer/,會(huì)出現(xiàn)如下的登錄界面,可以使用默認(rèn)的賬戶密碼
kermit/kermit 進(jìn)行登錄
登錄成功后,就可以在這個(gè)示例應(yīng)用中體驗(yàn)activiti的基本功能。
三、示例工程功能演示
這個(gè)工程分為了四個(gè)功能模塊:任務(wù)、流程、報(bào)表、管理
下面我按照一般的使用流程來(lái)講解下這幾個(gè)功能模塊
1. 創(chuàng)建流程圖
從工作流的定義,為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo)利用計(jì)算機(jī)在多個(gè)參與者之間按某種預(yù)定規(guī)則自動(dòng)傳遞文檔、信息或者任務(wù)??梢灾朗褂霉ぷ髁髑拔覀冃枰榷x一個(gè)規(guī)則,在這里的規(guī)則指的就是流程圖。
進(jìn)入流程管理模塊,按如下菜單選則新建一個(gè)流程模型
流程-->流程設(shè)計(jì)工作區(qū) -->新建模型
然后在新的頁(yè)面中繪制一個(gè)簡(jiǎn)單的請(qǐng)假流程并保存。繪制流程圖時(shí)注意要在用戶任務(wù)的屬性中分配assignment為當(dāng)前的登錄人kermit,這樣才能在代辦中看到新的任務(wù)。
如下是新建好的請(qǐng)假流程
這樣流程圖就創(chuàng)建好了。
2. 部署流程圖
畫(huà)好的流程圖經(jīng)過(guò)部署后才可以使用。在流程設(shè)計(jì)工作區(qū)選定剛才新建的流程,處理模型選擇部署,完成流程的部署
3. 啟動(dòng)流程
部署完成后就可以啟動(dòng)這個(gè)流程,創(chuàng)建任務(wù)。在"已部署流程定義"中選中剛部署的流程,點(diǎn)擊"啟動(dòng)流程"就可以啟動(dòng)流程。流程啟動(dòng)后就會(huì)在“任務(wù)”模塊的"代辦任務(wù)"中出現(xiàn)一個(gè)新的任務(wù)"apply vacation",這就是我們?cè)诹鞒虉D中定義的第一個(gè)用戶任務(wù)。
這里要注意如果在畫(huà)流程圖時(shí)沒(méi)有指定用戶任務(wù)的assignee屬性,或者指定的不是當(dāng)前登錄人的id,這個(gè)任務(wù)就不會(huì)出現(xiàn)在登錄人的代辦任務(wù)中
4. 完成任務(wù)
在任務(wù)模塊對(duì)任務(wù)進(jìn)行操作。在代辦列表中找到剛才啟動(dòng)流程產(chǎn)生的那個(gè)任務(wù),點(diǎn)擊完成任務(wù),流程就會(huì)走到下一個(gè)節(jié)點(diǎn),并創(chuàng)建一個(gè)manager agree的任務(wù),再完成這個(gè)任務(wù),剛才開(kāi)啟的流程就結(jié)束了。
5. 用戶管理
在管理模塊的用戶選項(xiàng)卡下可以對(duì)用戶進(jìn)行管理。這里的用戶可以作為流程圖上配置的assignees,使用對(duì)應(yīng)賬號(hào)登錄后就可以操作各自的任務(wù)。
四、數(shù)據(jù)持久化
需要注意的是這個(gè)示例工程默認(rèn)使用的是h3數(shù)據(jù)庫(kù),數(shù)據(jù)沒(méi)有持久化到硬盤(pán)上,所以如果關(guān)閉tomcat后剛才操作的所有數(shù)據(jù)都會(huì)丟失,如果需要把操作數(shù)據(jù)持久化到硬盤(pán)上,就需要配置數(shù)據(jù)庫(kù)設(shè)置,讓示例工程連接本機(jī)上的mysql數(shù)據(jù)庫(kù)。需要以下兩個(gè)步驟:
(1) 修改war包中的配置文件,activiti-explorer\WEB-INF\classes\db.properties中的內(nèi)容為以下內(nèi)容
db=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///activiti_explore
jdbc.username=root
jdbc.password=root
這樣示例工程就連接上了本機(jī)上的mysql數(shù)據(jù)庫(kù)
(2) 給該工程添加mysql的驅(qū)動(dòng)jar包
該示例工程中是沒(méi)有mysql的驅(qū)動(dòng)的,所以這樣配置后啟動(dòng)會(huì)報(bào)找不到數(shù)據(jù)庫(kù)驅(qū)動(dòng)的錯(cuò)誤。復(fù)制一個(gè)驅(qū)動(dòng)jar包到
activiti-explorer\WEB-INF\lib目錄下,就完成添加。
重啟tomcat,到數(shù)據(jù)庫(kù)activiti_explore中查看,發(fā)現(xiàn)activiti自動(dòng)了創(chuàng)建了需要的表結(jié)構(gòu),說(shuō)明已經(jīng)完成了數(shù)據(jù)持久化的配置。
五、總結(jié)
以上演示了如何使用activiti-5.22.0的示例工程 activiti-explorer.war如何使用。需要注意的是這個(gè)示例工程默認(rèn)使用的是h3數(shù)據(jù)庫(kù),數(shù)據(jù)沒(méi)有持久化到硬盤(pán)上,所以如果關(guān)閉tomcat后剛才操作的所有數(shù)據(jù)都會(huì)丟失。
如果需要把操作數(shù)據(jù)持久化到硬盤(pán)上,就需要配置數(shù)據(jù)庫(kù)設(shè)置,讓示例工程連接本機(jī)上的mysql數(shù)據(jù)庫(kù)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。