近日调查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:
System.out.println("步骤 4 自动动作 请假申请获准邮件通知 Send mail 祝贺你$$$$$$$");
; > Token Parsing Error: Lexical error at line 2, column 62. Encountered: " " (32), after : "\"e\u00a4 4 \u00ea\u00a8\u00a8\\": <at unknown location>
这种警告的情况下,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
(转载请注明出处)
分享到:
相关推荐
"OSWorkflow——请假审批系统(代码全,数据库mysql)" 指的是一个基于OSWorkflow工作流引擎实现的请假审批系统,该系统完整地提供了代码和数据库脚本,且数据库部分使用MySQL作为后台存储。 **描述解析:** 虽然描述...
通过这个osworkflow请假实例,学习者可以深入了解OSWorkflow的工作原理,掌握如何设计和实现一个实际的业务流程,同时熟悉Oracle数据库和Tomcat服务器的使用。这是一个很好的起点,为进一步的业务流程管理(BPM)...
这个示例提供了一个完整的osworkflow与Eclipse结合的请假审批流程,它不仅展示了osworkflow的工作流管理能力,还演示了如何将工作流引擎与实际业务逻辑相结合,为实际的企业应用提供了参考。通过学习和实践这个示例...
在"OSWorkFlow 请假实例"中,我们可以理解这是一个利用OSWorkFlow引擎实现的员工请假申请流程。这个流程可能包括请假申请的提交、审批、通知等相关步骤。在实际应用中,员工通过系统提出请假请求,然后这个请求会...
总的来说,OsWorkflow工作流实例为我们提供了一个强大的工具,用于构建和管理业务流程。通过理解和实践这个实例,我们可以学习到如何在实际项目中应用工作流引擎,提升软件系统的灵活性和可维护性。无论是在企业级...
osWorkflow提供了一套完整的解决方案,包括流程定义、流程实例管理、任务分配、状态监控等功能,帮助开发者构建出符合业务需求的动态流程系统。 在osWorkflow中,流程定义是通过XML文件进行的,这使得流程配置无需...
在这个“osworkflow 简单实例”中,我们将探讨如何使用 OSWorkflow 实现一个基础的请假系统。这个系统包括两个主要步骤:员工发起请假请求,然后由经理进行审批,审批结果分为 reject 和 approve 两种。 首先,我们...
OSworkflow(OpenSymphony Workflow)是一个开源的工作流管理系统,它提供了强大的流程定义和执行的能力,广泛应用于企业级应用中,如请假流程等业务场景。在本实例中,我们将深入探讨如何利用OSworkflow来实现一个...
开发者可以通过Osworkflow轻松实现复杂的业务流程,如审批流程、请假申请等,极大地提高了工作效率。 接着,我们来看OpenCMS。这是一款基于Java的内容管理系统,以其易用性和灵活性著称。OpenCMS提供了一个可视化的...
除了会议室使用申请,osworkflow还可以应用于其他办公场景,如请假审批、报销流程、合同审核等。开发者可以根据实际需求,灵活定制工作流流程。 **6. 性能与扩展性** osworkflow设计为轻量级框架,具备良好的性能和...
例如,一个简单的请假审批流程可以包括“申请”、“部门经理审批”、“人力资源审批”等步骤。 接下来,我们来看看如何在项目中集成 Osworkflow。通常,这涉及到以下步骤: 1. **配置**:在项目中引入 Osworkflow ...
- 请假申请系统:员工提交请假申请,经理审批,系统根据流程自动流转。 - 订单审批流程:从创建订单到确认发货,涉及多个部门和角色的审批。 - 内容审核:内容发布前需要审核,不同类型的审核由不同团队负责。 ...
在“osworkflow实现简单的请假审批业务”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **工作流概念**:工作流是一系列相互关联的任务,按照预定义的顺序进行,以完成一个特定的业务过程。在请假审批业务...
3. **状态更新**:系统自动更新请假请求的状态,如“已提交”、“待审批”、“批准”或“拒绝”。 4. **通知机制**:当流程状态变化时,自动发送通知给相关人员。 5. **数据持久化**:存储请假申请及其关联的流程...
OSWorkflow 是一个强大的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程。在这个"可以请假的小例子"中,我们将探讨如何使用OSWorkflow与MySQL数据库、Tomcat应用服务器以及Eclipse开发环境集成,来创建一...
10. **示例与实践**:通过实际案例分析,学习如何将osWorkFlow应用于具体业务场景,如请假审批、报销流程等。 在提供的两个PDF文档——"osworkflow-chinese-manual.pdf"和"OSWorkflow开发指南.pdf"中,你应该能找到...
以“用osworkflow写一个请假例子.doc”为例,我们可以构建一个简单的请假流程:员工提交请假申请,经理审批,最后HR确认。在这个流程中,员工是初始的参与者,他们创建请假请求并提交;经理根据请假天数和原因进行...
在实际应用中,osworkflow可以用于请假申请、报销审批、合同审核等业务场景。通过Spring和Hibernate的配合,osworkflow能够无缝融入到现有的企业级应用中,提供强大的流程控制能力。 总的来说,osworkflow2.8与...
每个实例对应于一个具体的业务流程,如请假审批、采购订单等。 4. **状态与转移动作**:工作流中的每个步骤都有特定的状态,如待处理、进行中、已完成等。osWorkflow 支持自定义状态转移规则,可以通过条件表达式...