系統(tǒng)環(huán)境:windowsXP-SP2 JDK1.5.0_09 jbpm-jpdl-3.2.2 MySQL5.0.27 Tomcat6.0.10 MSSQL 2000
1、安裝JDK1.5.0_09
不必一定要按我的版本來安裝,不過至少JDK應(yīng)該在1.5以上,JDK安裝好以后,設(shè)置PATH和CLASSPATH環(huán)境變量。
2、安裝Tomcat6.0.10
這個(gè)沒什么好說的,請(qǐng)用6.0的版本,因?yàn)榇笙鬀]在5.0或5.5上測(cè)試過,而且這幾個(gè)版本之間有很大的不同,為了能盡快上手,還是按照我寫的來吧。^_^
3、安裝MySQL5.0.27
MySQL安裝中采用默認(rèn)安裝即可,字符集不用設(shè)置為GB2312或GBK,這樣做比較通用(大象用的MySQL沒有設(shè)置)。
4、安裝Ant-1.7.0
從apache網(wǎng)站上下載Ant,然后解壓,設(shè)置PATH環(huán)境變量,在CMD中鍵入ant -version 如果看到:
Apache Ant version 1.7.0 compiled on December 13 2006 (那說明你的PATH環(huán)境已經(jīng)設(shè)置好了。)
5、安裝jbpm-jpdl-3.2.2
下載jbpm-jpdl-suite-3.2.2,然后解壓就行,直接放在根目錄下,比如:D:\jbpm-jpdl-3.2.2,這個(gè)版本是包含所有的一整套工具,目錄下主要包含以下幾個(gè)子目錄:
config —— jBPM及Hibernate與log4j的配置文件
db —— 各種數(shù)據(jù)庫的SQL語句
deploy —— 已經(jīng)打包好的war包
designer —— jBPM的Eclipse插件,具體在eclipse子目錄中
doc —— API文檔及用戶使用向?qū)?span lang="EN-US">
examples —— jBPM自帶的例子程序
lib —— 依賴的第三方依賴類庫
server —— 一個(gè)已經(jīng)配置好了的基于JBoss的jBPM示例
src —— jBPM的源代碼
jbpm-jpdl-suite-3.2.2的下載地址:http://sourceforge.net/project/showfiles.php?group_id=70542
注意看下面一個(gè)鏈接:View older releases from the f) jBPM jPDL 3 package » 這是jbpm以前的版本
6、安裝Eclipse3.2.1和MyEclipse5.1.0GA
我使用的是一種整合版本,就是解壓后可以直接使用,eclipse和myeclipse已經(jīng)整合好了(嘿嘿,感覺非常方便,我自己還做了一個(gè)Eclipse3.3和MyEclipse6.0的整合版,詳情請(qǐng)看:詳解Eclipse+MyEclipse完全綠色版制作方法),版本比我的高應(yīng)該沒關(guān)系,雖然沒試過,但網(wǎng)上有很多人都在高版本上做過,應(yīng)該沒問題。這里就不說安裝方法了,網(wǎng)上有很多相關(guān)資料。
7、安裝jbpm開發(fā)插件
雖然布署jbpm-console這個(gè)項(xiàng)目不需要用到開發(fā)插件,但為了以后的開發(fā),在這里我還是說一下,大象用的版本是3.0.13,為什么使用這個(gè)版本呢?因?yàn)槲以囘^最新的3.1.3.sp2版,里面可視化編輯流程里左下角沒有swimlanes標(biāo)簽,而3.0.13的版本中卻有。
3.0.13的下載地址:http://sourceforge.net/project/showfiles.php?group_id=70542&package_id=116692 這個(gè)頁面可以找到所有的插件版本,當(dāng)然包括最新版。
下面來說下我的安裝方法:

看到這紅線框的兩個(gè)文件夾了吧,大象前面說了,我用的是一種整合版本,解壓后就可以直接用了,所以這兩個(gè)文件夾早就已經(jīng)存在了,所以如果你們要用的話就像這樣建兩個(gè)文件夾吧,ThirdPlugins是放第三方插件的,Links是放ini配置文件的,下面都會(huì)有詳細(xì)介紹。
將下載的jbpm-gpd-3.0.13解壓,復(fù)制整個(gè)eclipse文件夾,進(jìn)入ThirdPlugins下,新建一文件夾,命名jbpm-gpd-3.0.13,再在此目錄下粘貼eclipse文件夾

另外還需要將plugins目錄下的jar包作一下修改,只保留如下兩個(gè)jar包,因?yàn)槠渌鼛讉€(gè)jar包在MyEclipse中也有,啟動(dòng)eclipse之后會(huì)發(fā)生沖突,而且千萬不要想當(dāng)然的,在myeclipse中把同名的jar包用高版本替換,不然你會(huì)發(fā)現(xiàn)啟動(dòng)之后全是錯(cuò)誤,嘿嘿,大象試過,有著血一樣的教訓(xùn),請(qǐng)大家千萬不要重蹈覆轍。

此文件內(nèi)容為:path=ThirdPlugins/jbpm-gpd-3.0.13
OK,到此,插件安裝已經(jīng)全部完成,另外還需要在eclipse中對(duì)jBPM作一下設(shè)置,同樣為了以后開發(fā)作準(zhǔn)備。
啟動(dòng)eclipse,點(diǎn)擊Windows->Preference,中文版為"窗口"->"選項(xiàng)",可以看到:

點(diǎn)擊Add,選擇Search...找到你解壓的jbpm-jpdl-3.2.2文件夾,然后填寫Name,點(diǎn)擊OK。回到主界面,此時(shí)還要勾選Name下的復(fù)選框,點(diǎn)擊Apply


Server Deployment里面的東西是用來布署流程用的,前提是你得先發(fā)布好jbpm-console控制臺(tái)這個(gè)程序,保證這個(gè)程序跑起來沒有問題,否則是不會(huì)成功的。8080端口號(hào)和你服務(wù)器保持一致,如Tomcat或JBoss,另外布署一個(gè)新流程時(shí),一定要先啟動(dòng)服務(wù)器。jbpm-console這個(gè)名字是默認(rèn)發(fā)布到服務(wù)器上的名字,比如Tomcat中,webapps下使用的名字和這個(gè)要一樣,那個(gè)變了,這個(gè)也要跟著變,還是保持默認(rèn)就行。upload不要作修改,這些其實(shí)與布署jbpm-console應(yīng)用沒有多大關(guān)系,大家看看就行。

8、布署jbpm-console
在jbpm-jpdl-3.2.2\deploy目錄下可以看到jbpm-console.war、build.xml(當(dāng)然還有其它文件,現(xiàn)在我們只關(guān)心這兩個(gè)),在CMD中,進(jìn)入jbpm-jpdl-3.2.2\deploy目錄下,使用命令:ant customize.console.for.tomcat 然后我們?cè)?/span>deploy下可以看到多出來customized和target兩個(gè)文件夾,進(jìn)入customized,可以看到jbpm-console.war這個(gè)文件,用winrar將其解壓到當(dāng)前目錄下,這時(shí)我們就得到了jbpm-console的發(fā)布應(yīng)用了,不過別高興,還有很多工作沒做呢。這里我來說下,為什么使用ant customize.console.for.tomcat 這個(gè)命令,打開build.xml文件,你可以看到這樣一段代碼:
<mkdir dir="target/war" />
<mkdir dir="customized" />
<unzip src="jbpm-console.war" dest="target/war" />
<copy todir="target/war/WEB-INF/lib">
<fileset dir="../lib">
<include name="activation.jar" />
<include name="antlr*.jar" />
<include name="asm.jar" />
<include name="bsh.jar" />
<include name="cglib.jar" />
<include name="commons-logging.jar" />
<include name="dom4j.jar" />
<include name="hibernate3.jar" />
<include name="jboss-backport-concurrent.jar" />
<include name="jbossretro-rt.jar" />
</fileset>
</copy>
<delete>
<fileset dir="target/war/WEB-INF/lib">
<include name="el-api.jar" />
<include name="el-ri.jar" />
</fileset>
</delete>
<zip destfile="customized/jbpm-console.war">
<fileset dir="target/war" />
</zip>
</target>
a、加入必要的jar包
在jbpm-console\WEB-INF\lib下要加入以下幾個(gè)jar包:jboss-j2ee.jar、commons-collections.jar、jsf-api.jar、jsf-impl.jar,刪除jsf-api-14.jar和jsf-impl-14.jar這兩個(gè)jar包。
b、建jBPM數(shù)據(jù)庫
在jbpm-jpdl-3.2.2\db下找到jbpm.jpdl.mysql.sql,打開它刪除前面的alter table JBPM_XX部分,保留后面的,然后再在每句SQL語句后面加上分號(hào),檢查一下有沒有遺漏。然后在MySQL中新建一個(gè)jbpm數(shù)據(jù)庫,將sql腳本導(dǎo)入進(jìn)來,大象使用的是SQLyog可視化操作工具,其它相關(guān)的可視化工具非常多,可以任選一種使用,如果你不用這些工具來簡(jiǎn)化開發(fā),那就配置mysql的PATH環(huán)境變量,在命令行中操作吧。^_^
在SQLyog中操作如下:
1、點(diǎn)擊菜單"DB"->"Create Database",輸入jbpm。
2、點(diǎn)擊菜單"Tools"->"Import From SQL Statements...",在彈出窗口中點(diǎn)擊"..."按鈕,選擇jbpm.jpdl.mysql.sql文件,然后再點(diǎn)擊Execute按鈕。請(qǐng)?jiān)邳c(diǎn)擊Execute前確保sql腳本沒有語法錯(cuò)誤,否則是不可能執(zhí)行成功的。
c、修改hibernate.cfg.xml文件
修改jbpm-jpdl-3.2.2\deploy\customized\jbpm-console\WEB-INF\classes下hibernate.cfg.xml文件,原配置文件要修改部分如下:
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- JDBC connection properties (begin) ===
<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="hibernate.connection.url">jdbc:hsqldb:mem:jbpm</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
==== JDBC connection properties (end) -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<!-- DataSource properties (begin) -->
<property name="hibernate.connection.datasource">java:/JbpmDS</property>
<!-- DataSource properties (end) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">自己的密碼(無密碼就空著)</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<!-- DataSource properties (begin)
<property name="hibernate.connection.datasource">java:/JbpmDS</property>
DataSource properties (end) -->
在jbpm-console\WEB-INF下打開web.xml文件,在servlet前加入以下listener,注意:把listener放在所有的servlet前面,我發(fā)現(xiàn)網(wǎng)上很多帖子里都沒有提到這一點(diǎn),不知道他們的程序是怎么跑起來的?殘念ING~~~
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<listener>
<listener-class>com.sun.faces.application.WebappLifecycleListener</listener-class>
</listener>
javax.servlet.ServletException: Servlet.init() for servlet Faces Servlet threw exception
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:656)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.catalina.authenticator.FormAuthenticator.forwardToLoginPage(FormAuthenticator.java:316)
at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:244)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:256)
at javax.faces.webapp.FacesServlet.init(FacesServlet.java:142)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
...16 more
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:256)
at javax.faces.webapp.FacesServlet.init(FacesServlet.java:142)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4044)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1023)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2008-8-3 13:03:49 org.apache.catalina.core.StandardContext loadOnStartup
嚴(yán)重: Servlet /jbpm-console threw load() exception
有兩種方法修改安全驗(yàn)證,第一種是修改%TOMCAT_HOME%\conf下的tomcat-users.xml文件,第二種是在%TOMCAT_HOME%\conf目錄下再新建Catalina文件夾,然后再在Catalina文件夾下建localhost文件夾,在此目錄下建jbpm-console.xml文件。
i、修改tomcat-users.xml文件
修改前請(qǐng)備份tomcat-users.xml文件,修改后的內(nèi)容如下:
<tomcat-users>
<role rolename="user"/>
<role rolename="administrator"/>
<role rolename="manager"/>
<role rolename="sales"/>
<role rolename="hr"/>
<role rolename="admin"/>
<role rolename="participant"/>
<user username="user" password="user" roles="user,sales"/>
<user username="shipper" password="shipper" roles="user,hr"/>
<user username="manager" password="manager" roles="admin,hr,manager,user,sales"/>
<user username="tadmin" password="" roles="admin,manager"/>
<user username="admin" password="admin" roles="admin,user,hr"/>
</tomcat-users>
ii、新建jbpm-console.xml文件
使用這種方式將需要向數(shù)據(jù)庫中插入數(shù)據(jù),由jBPM來管理安全驗(yàn)證,jbpm-console.xml文件內(nèi)容如下:
<Realm className="org.apache.catalina.realm.JDBCRealm
driverName="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/jbpm"
connectionName="root"
connectionPassword="自己的密碼"
userTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"
userNameCol="g.TYPE_ = 'security-role' AND m.GROUP_ = g.ID_ AND m.USER_ = u.ID_ AND u.NAME_"
userCredCol="DISTINCT u.PASSWORD_"
userRoleTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"
roleNameCol="g.NAME_" />
</Context>
INSERT INTO JBPM_ID_GROUP VALUES(2,'G','admin','security-role',NULL);
INSERT INTO JBPM_ID_GROUP VALUES(3,'G','user','security-role',NULL);
INSERT INTO JBPM_ID_GROUP VALUES(4,'G','hr','organisation',NULL);
INSERT INTO JBPM_ID_GROUP VALUES(5,'G','manager','security-role',NULL);
INSERT INTO JBPM_ID_USER VALUES(1,'U','user','user@sample.domain','user');
INSERT INTO JBPM_ID_USER VALUES(2,'U','manager','manager@sample.domain','manager');
INSERT INTO JBPM_ID_USER VALUES(3,'U','admin','admin@sample.domain','admin');
INSERT INTO JBPM_ID_USER VALUES(4,'U','shipper','shipper@sample.domain','shipper');
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(1,'M',NULL,NULL,2,4);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(2,'M',NULL,NULL,3,4);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(3,'M',NULL,NULL,4,4);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(4,'M',NULL,NULL,4,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(5,'M',NULL,NULL,1,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(6,'M',NULL,NULL,2,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(7,'M',NULL,NULL,3,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(8,'M',NULL,NULL,3,2);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(9,'M',NULL,NULL,2,2);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(10,'M',NULL,NULL,2,5);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(11,'M',NULL,'boss',2,1);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(12,'M',NULL,NULL,1,1);
此時(shí)基本工作都已經(jīng)做完,不過在發(fā)布前,不要忘了,將MySQL的驅(qū)動(dòng)拷貝到%TOMCAT_HOME%\lib目錄下,然后就可以將jbpm-console文件夾復(fù)制到%TOMCAT_HOME%\webapps目錄下了,接著在bin目錄下雙擊tomcat6.exe啟動(dòng)服務(wù)器,等啟動(dòng)過程執(zhí)行完后,打開IE,輸入http://localhost:8080/jbpm-console 回車,應(yīng)該就能看到jbpm控制臺(tái)界面了。

到此,在MySQL下的布署就全部結(jié)束了,如果能看到這個(gè)界面,那恭喜你,你終于成功了!
下面接著說下如何將MySQL數(shù)據(jù)庫換成MS SQL Server 2000,其實(shí)很簡(jiǎn)單,如果在MySQL下布署成功了,只需要將hibernate.cfg.xml文件里的配置改成MS SQL Server 2000的連接方式就行了,另外在2000中建立jbpm的數(shù)據(jù)庫也是必要的。
9、使用SQL Server 2000數(shù)據(jù)庫
在jbpm-jpdl-3.2.2\db下找到jbpm.jpdl.mssql.sql,打開后刪除alter table JBPM_XX和drop table JBPM_XX這些語句,這些東東都是用來在以前的版本上做升級(jí)用的,我們是新建數(shù)據(jù)庫當(dāng)然用不到這些了。在SQL Server中新建jbpm數(shù)據(jù)庫,COPY剩下的sql語句,在查詢分析器里粘貼,然后執(zhí)行,這時(shí)會(huì)有很多警告產(chǎn)生,如下:
警告: 已創(chuàng)建表 'JBPM_LOG',但其最大行大小(18321)超過了每行的最大字節(jié)數(shù)(8060)。如果結(jié)果行長度超過 8060 字節(jié),則此表中行的 INSERT 或 UPDATE 將失敗。
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:jtds:sqlserver://localhost:1433/jbpm</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">自己的密碼(無密碼就空著)</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<!-- DataSource properties (begin)
<property name="hibernate.connection.datasource">java:/JbpmDS</property>
DataSource properties (end) -->
寫到這里,關(guān)于jbpm-console所有的布署都講完了,大象以上所說的全部都是親自在電腦上一步一步的做過,絕不會(huì)胡亂copy一下網(wǎng)上的東東發(fā)出來。如有什么問題,希望和大家一起交流。(如果圖片不能顯示,在其上點(diǎn)擊右鍵,選擇"顯示圖片")
需要使用的JAR包: 點(diǎn)擊下載
SQL腳本: 點(diǎn)擊下載
本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請(qǐng)注明出處。