- 浏览: 1971838 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- JavaEE (122)
- Oracle数据库 (29)
- JavaScript (37)
- SAP (5)
- MySql数据库 (7)
- JavaSE (4)
- Ajax (1)
- jQuery (13)
- SSH框架 (36)
- Web Service (10)
- JSF框架 (2)
- JBPM (0)
- ireport报表 (2)
- ibatis (5)
- Hibernate (31)
- JSP (11)
- Tomcat 服务器 (20)
- Other (19)
- JavaWeb (4)
- Maven (11)
- OSWorkFlow (10)
- HTML (13)
- Exception汇总 (7)
- SVN (2)
- 笑话 (1)
- JSTL (1)
- WebSphere Message Broker (13)
- ANT命令 (3)
- Liunx (12)
- Struts2 (26)
- Eclipse (6)
- DOS (3)
- Flex (11)
- WebSphere (1)
- 开发常用工具 (3)
- Junit (2)
- EJB (4)
- Struts1.2 (2)
- Jboss (1)
- Android (2)
- Java框架源码解析 (1)
- Spring (4)
- MyBatis (6)
- SpringMVC (4)
- Jetty (2)
- 数据库表设计 (1)
- SSO (4)
最新评论
-
贝塔ZQ:
也可以试试PageOffice插件,觉得更简单点
Jxl操作Excel设置背景、字体颜色、对齐方式、列的宽度 -
jia1208:
...
Could not publish server configuration for Tomcat v6.0 Server at localhost. -
u011274527:
赞
java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误 -
旭旭小牛啦:
怎么没哟了,继续赛
jQuery 选择器 -
wzw3919:
100行会报空指针
Java 解压缩zip文件
近日调查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');
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"/>
- ...
<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");
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>
<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>
<?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>
<?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() + ")";
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
(转载请注明出处)
http://www.iteye.com/topic/426133
OSWorkflow的业务系统实例--请假审批系统 的博客文章。
评论
搞了半天,一直很迷糊,能不能发给我一个完整的实例呢?eclipse+mysql
发表评论
-
OSWorkflow 工作流的入门知识点.
2011-01-28 13:40 1639一、工作流框架的选择 ... -
OSWorkFlow入门指南
2011-01-27 16:27 1520OSWorkFlow入门指南 目的 这篇指导资料的目 ... -
OSWorkflow表结构分析
2010-12-19 14:15 1527OSWorkflow表结构分析 研究了一段时间的OSWo ... -
OSWorkflow观念探讨
2010-12-19 14:13 1548OSWorkflow观念探讨 -转自史蒂芬 --流程 ... -
OSWorkflow的第五个程序
2010-12-19 14:11 1294OSWorkflow的第五支程式 第五支程式要用OSWork ... -
OSWorkflow的第四个程序
2010-12-19 14:10 1162OSWorkflow的第四支程式 ... -
OSWorkflow的第三个程序
2010-12-19 14:09 1294OSWorkflow的第三支程式 ... -
OSWorkflow的第二个程序
2010-12-19 14:07 1315OSWorkflow的第二支程式 這裡將介紹如何在流程裡加上 ... -
OSWorkflow的第一个程序
2010-12-19 13:52 1701OSWorkflow的第一支程式 OSWorkflow的第一 ...
相关推荐
电子政务,即政府机构运用现代计算机和网络技术,将其管理和服务职能转移到网络,同时实现政府组织结构和工作流程的重组优化,超越时间、空间和部门分隔的制约,为全社会提供高效优质、规范透明和全方位的管理与服务...
NULL 博文链接:https://qsx1982-126-com.iteye.com/blog/769059
笔者主持的开源工作流引擎AgileFlow就是基于ww2+spring+hibernate架构实现的。写到这里我想是不是它可以和struts2进行完美整合?! Jflow是从ccflow演化而来的国产工作流引擎,富有太多的业务场景设置。 Ccflow是...
由OpensymPhony组织开发的开源工作流引擎 OSWorkflow是一种非常灵活的工作 流引擎。它主要基于有限状态机理论,通过状态的迁移描述工作的流转。每一种状态(state) 被描述成为 step ID和 status。从一种状态(state)...
自己写的 OsWorkflow 工作流 实例 已测试通过
一种基于OSWorkflow工作流引擎的工作流监控技术,仇璐,,目前工作流监控技术存在的问题是:流程监控得到的流程图与实际业务流程有一定差距,针对存在的这个问题,本文提出了一种基于OSWork
工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow
工作流引擎(osworkflow) 2.80 有例子,有文档,可以自己跑例子看效果
基于osworkflow工作流引擎的小demo,实现了请假流程。
osworkflow请假实例,使用tomcat6.0服务器,oracle数据库,导入到myeclipse中即可运行,当然需要先创建数据库。很适合osworkflow的学习
osworkflow 简单实例, 请假系统,第一步发送请求,第二步manager审批,由reject和approve两个结果
NULL 博文链接:https://jeenry119.iteye.com/blog/1195769
该资源是用osworkflow框架完成的请假系统的例子,包括了填写请假条,提交申请,审批等流程,是oa的一个例子
这是一点关于OSWorkFlow 工作流系统设计知识的详细讲解
状态机工作流OSWorkflow 包括中文手册、开发指南等
现在对于流程性工作,用工作流来做是再合适不过了
基于oracle数据库,tomcat的请假DEMO,完善的实现了osworkflow的特色功能,能对您进一步了解osworkflow起到指引作用.
从javaeye上下载别人的例子,感觉不错 另外在这里有详细介绍 http://www.javaeye.com/topic/100499?page=1
osworkflow详细资料 pdf 工作流