使用UFLO,要從安裝UFLO流程模版設(shè)計器開始。安裝方法是打開UFLO在BSDN的項目主頁,進(jìn)入其下載專區(qū)(http://www.bsdn.org/proje
cts/uflo/download/list),下載以uflo-ide開頭的包,下載到本地后解壓,將解壓后的文件夾放置到Eclipse的dropins目錄下重啟Eclipse即可。
上述操作要求我們本地要有一個3.5及以上J2EE版本的Eclipse(如果你用的是MyEclipse,不能保證安裝成功)。安裝成功打Eclipse后,可以在新建文件向?qū)е锌吹経FLO流程模版的創(chuàng)建菜單,如下圖所示:
如果您看到了如上圖所示的UFLO流程模版創(chuàng)建菜單,那就說明您的UFLO流程模版設(shè)計器安裝成功了,接下來就可以選擇一個模版文件存放目錄,創(chuàng)建第一個流程模版了。
流程模版設(shè)計器安裝成功之后,接下來就可以配置我們的項目了。將UFLO添加到我們的項目當(dāng)中分兩種情況,一種是Maven項目,另一種是普通的web項目,我們首先來看看如果將UFLO添加到我們現(xiàn)有的一個由Maven管理的項目當(dāng)中。
首先打開打開一個已存在的dorado7項目,找到項目中的pom.xml文件,在其中添加uflo-core依賴,內(nèi)容如下:
uflo-core依賴配置
<dependency>
<groupId>com.bstek.uflo</groupId>
<artifactId>uflo-core</artifactId>
<version>[version]</version> </dependency>
uflo-console模塊依賴配置如下:
<dependency>
<groupId>com.bstek.uflo</groupId>
<artifactId>uflo-console</artifactId>
<version>[version]</version> </dependency>
對于uflo-core與uflo-console兩模塊,我們提供了基于hibernate3與hibernate4編譯的兩種類型的版本,如果您的項目持久層采用的是hibernate3,那么上述的默認(rèn)配置下載的就是基于hibernate3編譯的版本;如果您需要基于hibernate4編譯的版本,那么需要添加classifier標(biāo)記,如下面的dependency所示:
<dependency>
<groupId>com.bstek.uflo</groupId>
<artifactId>uflo-core</artifactId>
<version>[version]</version>
<classifier>hibernate4</classifier> </dependency>
當(dāng)然如果要顯示取hibernate3版本,上述在classifier中的hibernate4就要改成hibernate3。無論是哪個版本,uflo-core與uflo-console的依賴中都沒有顯示標(biāo)記要依賴hibernate,所以我們需要在項目的pom.xml中添加對應(yīng)的hibernate版本依賴信息。
最后我們還需要添加uflo-client模塊,那么需要在pom.xml中添加如下配置:
uflo-client模塊依賴配置
<dependency>
<groupId>com.bstek.uflo</groupId>
<artifactId>uflo-client</artifactId>
<version>[version]</version> </dependency>
因為uflo-client模塊沒有hibernate3或hibernate4版本之分,所以在添加uflo-client模塊時,是不需要添加classifier標(biāo)記的。
當(dāng)然因為我們的這些包都托管在BSDN的Maven庫當(dāng)中,所以還需要修改您的pom.xml,在其中添加如下配置,以告訴Maven該到哪里下載這些Jar包。
Maven庫配置
<repositories>
<repository> <id>bsdn-maven-repository</id> <url>http://nexus.bsdn.org/content/groups/public/</url>
</repository> </repositories>
以上為Maven項目在添加UFLO支持時所需要做的工作,如果您采用的是傳統(tǒng)項目,那配置過程相比之下就麻煩多了,我們需要到http://www.bsdn.org/projects/uflo/download上下載UFLO發(fā)行包(不一定是最新的)及所需要的第三方依賴Jar包,然后把它們放到我們的項目當(dāng)中,最后就是檢查有沒有同類型但版本不同的Jar,如果有還需要進(jìn)行清理,最后啟動測試,如果有報錯,再根據(jù)報錯信息進(jìn)行處理......
項目添加好UFLO之后,接下來還需要編寫一個名為EnvironmentProvider接口實(shí)現(xiàn)類,其源碼如下,具體作用見接口描述:
package com.bstek.uflo.env;
import org.hibernate.SessionFactory;
import org.springframework.transaction.PlatformTransactionManager; /**
* @author Jacky.gao
* @since 2013年9月17日 */
public interface EnvironmentProvider { /**
* @return 返回流程引擎臨時文件存儲目錄
*/
String getTempFileStorePath(); /**
* @return 返回流程引擎需要使用的Hibernate SessionFactory
*/
SessionFactory getSessionFactory(); /**
* @return 返回與當(dāng)前SessionFactory綁定的PlatformTransactionManager對象
*/
PlatformTransactionManager getPlatformTransactionManager(); /**
* @return 返回當(dāng)前系統(tǒng)的登錄用戶
*/
String getLoginUser(); /**
* @return 返回當(dāng)前系統(tǒng)分類ID
*/
String getCategoryId();
}
下面的代碼當(dāng)中向我們展示了一個實(shí)現(xiàn)了EnvironmentProvider接口的示例。
EnvironmentProvider實(shí)現(xiàn)類示例
import org.hibernate.SessionFactory; import org.springframework.transaction.PlatformTransactionManager;
import com.bstek.uflo.env.EnvironmentProvider; public class TestEnvironmentProvider implements EnvironmentProvider { private SessionFactory sessionFactory; private PlatformTransactionManager platformTransactionManager; public String getTempFileStorePath() { return System.getProperty("java.io.tmpdir"); } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public PlatformTransactionManager getPlatformTransactionManager() { return platformTransactionManager; } public void setPlatformTransactionManager( PlatformTransactionManager platformTransactionManager) { this.platformTransactionManager = platformTransactionManager; } public String getCategoryId() { return null; } public String getLoginUser() { return "anonymous"; } }
在上面的示例實(shí)現(xiàn)類當(dāng)中,getTempFileStorePath方法返回的臨時目錄我們定義為當(dāng)前jvm的臨時目錄;SessionFactory及TransactionManager都是通過Spring環(huán)境注入;getLoginUser方法用于返回當(dāng)前登錄用戶,因為我們這里沒有用戶登錄的概念,所以這里返回一個固定值“anonymous”;getCategoryId方法返回null,表示不對流程進(jìn)行分類處理。
該接口實(shí)現(xiàn)類編寫完成后,需要將其配置到Spring當(dāng)中,讓其成為一個標(biāo)準(zhǔn)的SpringBean,這樣UFLO引擎會自動檢測到該類并使用它。在這個接口實(shí)現(xiàn)類當(dāng)中,主要是其中的getSessionFactory與getPlatformTransactionManager這兩個方法,第一個getSessionFactory是要返回當(dāng)前指向uflo數(shù)據(jù)庫的hibernate的sessionFactory對象,因為uflo是構(gòu)建在spring環(huán)境之上,所以這里的sessionFactory最好是一個配置在spring環(huán)境中的sessionFactory對象,而spring恰恰也提供了創(chuàng)建hibernate3及hibernate4的sessionFactory對象,比如下面的spring配置是用來創(chuàng)建一個hibernate3的sessionFactory對象的。
<bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" />
<property name="packagesToScan"> <list>
<value>com.bstek.uflo.model*</value> </list> </property> <property name="entityInterceptor" ref="unByteCodeProxyInterceptor" />
<property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props>
</property> </bean>
如果需要的是hibernate4的sessionFactory,那么我們只需要將上述配置的class值改為org.springframework.orm.hibernate4.LocalSessionFactoryBean即可。這里需要注意的是上面的packagesToScan屬性,無論是哪種類型的sessionFactory,在使用uflo時都需要添加這一屬性,并且需要添加一個com.bstek.uflo.model*的值,這樣才能讓uflo中hibernate模型對象加載到當(dāng)前sessionFactory當(dāng)中;還有就是uflo并沒有提供流程所需要的建表schema,所以我們需要將sessionFactory配置中的hibernate.hbm2ddl.auto屬性設(shè)置為update,這樣hibernate會幫助我們自動創(chuàng)建uflo所需要的表信息。
getPlatformTransactionManager方法要求返回一個spring的PlatformTransactionManager接口實(shí)現(xiàn),當(dāng)然如果非JTA事務(wù),那么PlatformTransactionManager實(shí)現(xiàn)必須要與當(dāng)前返回的sessionFactory對應(yīng)的dataSource綁定。
在UFLO當(dāng)中提供了一些可供外部系統(tǒng)覆蓋的屬性,通過對這些屬性值的重新定義,可讓UFLO更加適應(yīng)我們的業(yè)務(wù)系統(tǒng),因為這里是在dorado7項目中添加uflo支持,所以對于uflo中提供的屬性,如果我們需要在項目當(dāng)中覆蓋它們,那么只需要將它們定義到項目的WEB-INF/dorado-home/目錄下的configure.properties文件當(dāng)中即可,這些可覆蓋的屬性如下表所示。
更多建議: