精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-14
最后修改:2009-07-14
近日调查osworkflow的相关知识,寻找一个能够运行的实例,相关的资料比较少,javaeye上搜到一篇: (主题:基于开源工作流引擎OSWorkflow的业务系统实例——请假审批系统 http://www.iteye.com/topic/100499) 里面附有源码,实际运行以后发现很多问题,经过调试修改以后,得以解决;总的来说,以上实例还是很不错的;对于理解工作流的原理很有助益。
以下是需要注意的地方: 1. 执行初始化数据库的MySQL脚本 osworkflow_leaveApprove_mysql.sql 时,最后9行Insert语句后面应该加上分号(;),否则不能一次性创建。 INSERT INTO OS_USER (USERNAME,PASSWORDHASH) VALUES ('employee1','7iaw3Ur350mqGo7jwQrpkj9hiYB3Lkc/iBml1JQODbJ6wYX4oOHV+E+IvIh/1nsUNzLDBMxfqa2Ob1f1ACio/w=='); INSERT INTO OS_USER (USERNAME,PASSWORDHASH) VALUES ('hr1','7iaw3Ur350mqGo7jwQrpkj9hiYB3Lkc/iBml1JQODbJ6wYX4oOHV+E+IvIh/1nsUNzLDBMxfqa2Ob1f1ACio/w=='); INSERT INTO OS_USER (USERNAME,PASSWORDHASH) VALUES ('manager1','7iaw3Ur350mqGo7jwQrpkj9hiYB3Lkc/iBml1JQODbJ6wYX4oOHV+E+IvIh/1nsUNzLDBMxfqa2Ob1f1ACio/w=='); INSERT INTO OS_GROUP (GROUPNAME) VALUES ('employee'); INSERT INTO OS_GROUP (GROUPNAME) VALUES ('hr'); INSERT INTO OS_GROUP (GROUPNAME) VALUES ('manager'); INSERT INTO OS_MEMBERSHIP (USERNAME,GROUPNAME) VALUES ('employee1','employee'); INSERT INTO OS_MEMBERSHIP (USERNAME,GROUPNAME) VALUES ('hr1','hr'); INSERT INTO OS_MEMBERSHIP (USERNAME,GROUPNAME) VALUES ('manager1','manager');
2.leave_apply.xml 也就是workflow定义文件,也是最关键的一个文件。(原帖中有2个工程的代码,一个是JBuild的工程leaveApprove,另一是Eclipse的工程os_leave;我们使用os_leave,但是要把leaveApprove\src\下的leave_apply.xml 等6个文件复制到os_leave\src\下)
(1).Line7:初始化工作流时,没有定义owner;此时应该在step1,employee1进行申请,因此加入 owner="employee1" (2).后面的result里面没有定义owner的地方,加入 owner="${caller}" 否则出现owner为空,currentstep表无法插入的现象; 或是出现原帖跟帖中反映较多的:com.opensymphony.workflow.StoreException: Unable to create current step for workflow instance #7: root cause: Cannot add or update a child row: a foreign key constraint fails (`workflowtest/os_currentstep`, CONSTRAINT `os_currentstep_ibfk_2` FOREIGN KEY (`OWNER`) REFERENCES `os_user` (`USERNAME`)) (3).System.out.println()中的中文换成英文,否则出现警告:Sourced file: <Inline eval of: 这种警告的情况下,DB更新正常,但hr1和manager1审批后,页面上会显示“请假审批时出现异常!”(尽管实际上审批正常终了) (4).step3的unconditional-result应流向step4,不是step5. 修正后的leave_apply.xml 如下: <workflow> <initial-actions> <action id="100" name="启动请假申请工作流"> <results> <unconditional-result old-status="Finished" status="Underway" step="1" owner="employee1"/> ... System.out.println("Step 1 SubmitApply FitCondition WaitApprove"); 。。。 <result old-status="Finished" status="Underway" step="5" owner="${caller}"> ... System.out.println("Step 2 ApplyApprove ManegerSay NO"); 。。。 <result old-status="Finished" status="Underway" step="5" owner="${caller}"> ... <unconditional-result old-status="Finished" status="Underway" step="4" owner="${caller}"/> ... System.out.println("Step 4 Auto Pass Send mail Congratulations$$$$$$$"); 。。。 <unconditional-result old-status="Finished" status="Finished" step="6" owner="${caller}"/> ... System.out.println("Step 5 Auto unPass Send mail Sorry$$$$$$$"); ... <unconditional-result old-status="Finished" status="Finished" step="6" owner="${caller}"/> ... </workflow>
3.数据源的问题: (1).LeaveDao.java中: InitialContext ic = new InitialContext(); ds = (DataSource) ic.lookup("java:/comp/env/JSQLConnectDB_LeaveApply"); (2)src\下的osuser.xml, osworkflow.xml, propertyset.xml 中的数据源相关部分: <arg name="datasource" value="java:/comp/env/JSQLConnectDB_LeaveApply"/> (3)TOMCAT_HOME\conf\Catalina\localhost\ 下新建osleave.xml (与webapp下工程所在文件夹同名): <Context path="/osleave" docBase="osleave" debug="5" reloadable="true" crossContext="true"> <Resource name="JSQLConnectDB_LeaveApply" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="admin" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/oswf?autoReconnect=true"/> </Context> (4)TOMCAT_HOME\webapps\osleave\WEB-INF\web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <description>MySQL Test App</description> <resource-ref> <description>DB Connection</description> <res-ref-name>JSQLConnectDB_LeaveApply</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <welcome-file-list> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> (5)TOMCAT_HOME\webapps\osleave\META-INF 下新建context.xml : <?xml version='1.0' encoding='utf-8'?> <Context> <Resource name="JSQLConnectDB_LeaveApply" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/bbs" username="root" password="root" maxActive="50" maxIdle="20" maxWait="10000" /> </Context>
4. SQL语句的问题(LeaveDao.java中) (1). GETDATE() 这个方法是MSSQL中的,在MySQL中无效,报错信息大概是在某某附近(near...);在MySQL中取系统时间用now() 即可: String exeSql = "" + " INSERT INTO bus_leaveApprove (applyID,approver,approveTime,opinion)" + " VALUES ('" + leaveApproval.getApplyID() + "','" + leaveApproval.getApprover() + " ',now()," + leaveApproval.getOpinion() + ")"; 注意:有2处。 (2).如果还有其他SQL问题,尝试在代码中将一句sql文写到同一行,不要分行;并删除中间的空格。
5.其他问题 (1).JSP页面错误,显示相关类找不到(User,Manager,Workflow,Property等类),解决方法:将workspace\os_leave\lib\ 下的.jar 文件复制到 TOMCAT_HOME\webapps\osleave\WEB-INF\lib\ (2).工程编译出现下列错误: Unbound classpath container: 'com.genuitec.eclipse.j2eedt.core.J2EE14_CONTAINER' in project 等2个error时,在工程的Build-Path中:最后一个Tab标签页(Order and export)中,调整 J2EE14_CONTAINER 和JRE 的上下顺序即可。(如反复出现此问题,反复调整2者顺序即可)
经过上述修改及设置,现在应该就是可以正常运行的一个实例了。 环境:JDK/JRE:1.6.10 TOMCAT:5.5.27 MySQL:5.0.? Eclipse下的工程文件,及database初期化的MySQL脚本,随后列出下载。
2009/7/14 (转载请注明出处) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-29
我想在oracle进行test.
有没有oracle的sql脚本啊? 谢谢了。 |
|
返回顶楼 | |
浏览 6221 次