在到處查資料,下載demo后,我終于讓自己的osworkflow工作流跑了起來。環境采用了MySQL5、Tomcat6和JDBC做持久層。具體的步驟如下:
1、創建數據庫,腳本如下。
osworkflow_app
2、創建數據源,在tomcat根目錄下找到conf目錄里的context.xml文件,在Context節點中加入如下代碼:
<Resource name="jdbc/osworkflow_app" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="sa" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/osworkflow_app"/> |
其中,本人的數據庫用戶名和密碼分別是root和sa,庫表名稱為osworkflow_app,需要修改的是數據庫用戶名和密碼。特別注意,需要把mysql的驅動包隨手丟到tomcat的lib目錄下。
3、分別加入osworkflow的配置文件到src下面。
log4j.properties
log4j.rootLogger=debug, A1 , R log4j.logger.org.apache=INFO log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=C:/OSWorkflowDemo.log log4j.appender.R.MaxFileSize=1000KB log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n |
osuser.xml
<?xml version="1.0" encoding="utf-8"?> <opensymphony-user> <provider class="com.opensymphony.user.provider.jdbc.JDBCAccessProvider"> <property name="user.table">os_user</property> <property name="group.table">os_group</property> <property name="membership.table">os_membership</property> <property name="user.name">username</property> <property name="user.password">passwordhash</property> <property name="group.name">groupname</property> <property name="membership.userName">username</property> <property name="membership.groupName">groupname</property> <property name="datasource">jdbc/osworkflow_app</property> </provider> <provider class="com.opensymphony.user.provider.jdbc.JDBCCredentialsProvider"> <property name="user.table">os_user</property> <property name="group.table">os_group</property> <property name="membership.table">os_membership</property> <property name="user.name">username</property> <property name="user.password">passwordhash</property> <property name="group.name">groupname</property> <property name="membership.userName">username</property> <property name="membership.groupName">groupname</property> <property name="datasource">jdbc/osworkflow_app</property> </provider> <provider class="com.opensymphony.user.provider.jdbc.JDBCProfileProvider"> <property name="user.table">os_user</property> <property name="group.table">os_group</property> <property name="membership.table">os_membership</property> <property name="user.name">username</property> <property name="user.password">passwordhash</property> <property name="group.name">groupname</property> <property name="membership.userName">username</property> <property name="membership.groupName">groupname</property> <property name="datasource">jdbc/osworkflow_app</property> </provider> <authenticator class="com.opensymphony.user.authenticator.SmartAuthenticator" /> </opensymphony-user> |
osworkflow.xml
<?xml version="1.0" encoding="utf-8"?> <osworkflow> <persistence class="com.opensymphony.workflow.spi.jdbc.MySQLWorkflowStore"> <property key="datasource" value="java:comp/env/jdbc/osworkflow_app" /> <property key="entry.sequence" value="SELECT max(ID)+1 FROM OS_WFENTRY" /> <property key="step.sequence" value="SELECT max(ID)+1 FROM OS_STEPIDS" /> <property key="entry.table" value="OS_WFENTRY" /> <property key="entry.id" value="ID" /> <property key="entry.name" value="NAME" /> <property key="entry.state" value="STATE" /> <property key="history.table" value="OS_HISTORYSTEP" /> <property key="current.table" value="OS_CURRENTSTEP" /> <property key="historyPrev.table" value="OS_HISTORYSTEP_PREV" /> <property key="currentPrev.table" value="OS_CURRENTSTEP_PREV" /> <property key="step.id" value="ID" /> <property key="step.entryId" value="ENTRY_ID" /> <property key="step.stepId" value="STEP_ID" /> <property key="step.actionId" value="ACTION_ID" /> <property key="step.owner" value="OWNER" /> <property key="step.caller" value="CALLER" /> <property key="step.startDate" value="START_DATE" /> <property key="step.finishDate" value="FINISH_DATE" /> <property key="step.dueDate" value="DUE_DATE" /> <property key="step.status" value="STATUS" /> <property key="step.previousId" value="PREVIOUS_ID" /> <!--just for mysql--> <property key="step.sequence.increment" value="INSERT INTO OS_STEPIDS (ID) values (null)" /> <property key="step.sequence.retrieve" value="SELECT max(ID) FROM OS_STEPIDS" /> <property key="entry.sequence.increment" value="INSERT INTO OS_ENTRYIDS (ID) values (null)" /> <property key="entry.sequence.retrieve" value="SELECT max(ID) FROM OS_ENTRYIDS" /> </persistence> <factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory"> <property key="resource" value="workflows.xml" /> </factory> </osworkflow> |
propertyset.xml
<?xml version="1.0" encoding="utf-8"?> <propertysets> <propertyset name="jdbc" class="com.opensymphony.module.propertyset.database.JDBCPropertySet"> <arg name="datasource" value="java:comp/env/jdbc/osworkflow_app"/> <arg name="table.name" value="OS_PROPERTYENTRY"/> <arg name="col.globalKey" value="GLOBAL_KEY"/> <arg name="col.itemKey" value="ITEM_KEY"/> <arg name="col.itemType" value="ITEM_TYPE"/> <arg name="col.string" value="STRING_VALUE"/> <arg name="col.date" value="DATE_VALUE"/> <arg name="col.data" value="DATA_VALUE"/> <arg name="col.float" value="FLOAT_VALUE"/> <arg name="col.number" value="NUMBER_VALUE"/> </propertyset> </propertysets> |
workflows.xml
<?xml version="1.0" encoding="utf-8"?> <workflows> <workflow name="leave_apply" type="resource" location="bus_zhijian1.xml"/> </workflows> |
4、創建自己的流程描述文件bus_zhijian1.xml。該文件我沒有經過測試,只能自己學習,不能貼出來了。建議初學者可以使用僅僅兩個step的描述文件進行入門的學習。
5、編寫java類和一些FunctionProvider,完成具體的業務。