« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
关注电子政务、大型企业应用开发、Web、Workflow、MOM、MDA、RCP、GEF email:gmluyang@gmail.com
|
Blog信息 |
blog名称:SixSun的Blog 日志总数:152 评论数量:372 留言数量:13 访问次数:2382942 建立时间:2004年12月13日 |

| |
[Java Open Source]初试OSworkflow 心得体会, 软件技术
SixSun 发表于 2005/6/26 16:33:00 |
下午学习了一下OSworkflow的使用。下载了OSworkflow 小试了一把。学习Java已经半年多,虽说在工作中接触到工作流,但仍是一知半解,决定亲自一探究竟,还是有些收获,弄明白了一下概念。
(1)下载:OSworkflow(version 2.7.0)http://www.opensymphony.com/osworkflow/download.action
(2)运行:解压后里面有一个 【osworkflow-2.7.0-example.war】的例子。放在Tomcat运行了一下。osworkflow-2.7.0-example 目录结构如下:--%osworkflowPATH%\ |----WEB-INF\classes |----WEB-INF\lib |----manager其中 WEB-INF\classes 中有几个重要的xml文件• osworkflow.xml:这个文档设定流程是存在于数据库还是存在于内存中。
设定流程在于内存中:
<osworkflow> <persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"/>
<factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory"> <property key="resource" value="workflows.xml" /> </factory></osworkflow>
设定流程在于数据库(MySQL):
<osworkflow> <persistence class="com.opensymphony.workflow.spi.jdbc.MySQLWorkflowStore">
<property key="datasource" value="jdbc/OSworkflow"/> </persistence>
<factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory"> <property key="resource" value="workflows.xml" /> </factory> </osworkflow>
• workflows.xml:指定系统启动时要加载那些流程。• example.xml:这是一个案例流程,实际流程就是定义在此。
(3)概念:以OSworkflow 提供的Tutorial 举例分析一下。<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.7//EN" "http://www.opensymphony.com/osworkflow/workflow_2_7.dtd"><workflow> <initial-actions> <action id="1" name="Start Workflow"> <results> <unconditional-result old-status="Finished" status="Queued" step="1"/> </results> </action> </initial-actions> <steps> <step id="1" name="First Draft"> <actions> <action id="1" name="Start First Draft"> <restrict-to> <conditions> <condition type="class"> <arg name="class.name"> com.opensymphony.workflow.util.StatusCondition </arg> <arg name="status">Queued</arg> </condition> </conditions> </restrict-to> <pre-functions> <function type="class"> <arg name="class.name"> com.opensymphony.workflow.util.Caller </arg> </function> </pre-functions> <results> <unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/> </results> </action> <action id="2" name="Finish First Draft"> <restrict-to> <conditions type="AND"> <condition type="class"> <arg name="class.name"> com.opensymphony.workflow.util.StatusCondition </arg> <arg name="status">Underway</arg> </condition> <condition type="class"> <arg name="class.name"> com.opensymphony.workflow.util.AllowOwnerOnlyCondition </arg> </condition> </conditions> </restrict-to> <results> <unconditional-result old-status="Finished" status="Queued" step="2"/> </results> </action> </actions> </step> <step id="2" name="finished" /> </steps></workflow>
从上面的可以看出有以下几个元素:不知道自己理解的有没有错误。• initial-actions:每个流程都至少需定义一个initial-actions,这是流程的起点。• step:即流程所在的位置,osworkflow真正的动作在action发生。• status:流程在某个action时的状态。• old-status:流程执行某个action后的状态。• action:导致流程状态变动的动作,所谓流程状态变动我理解为流程从一个step转移到另一step,或是在同一个step的不同状态之间转移,即一个状态是由当前的 (step + status) 所构成。• result:执行动作后的结果。 |
|
回复:初试OSworkflow 心得体会, 软件技术
hiya(游客)发表评论于2007/2/12 18:23:13 |
chf@tsinghua.org.cn
以下错误是为什么呢?
com.opensymphony.user.ImmutableException: No provider successfully created entity com.opensymphony.user.UserManager.createEntity(UserManager.java:379) com.opensymphony.user.UserManager.createUser(UserManager.java:245) org.apache.jsp.manager.users_jsp._jspService(users_jsp.java:59) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) |
|
回复:初试OSworkflow 心得体会, 软件技术
xymyeah(游客)发表评论于2005/10/27 10:59:54 |
以下引用sixsun在2005-7-19 22:02:49的评论:
Pre functions是在流程的步骤(或状态)发生切换之前执行的。
Post functions是在流程的步骤(或状态)发生切换之后执行的。
函数可以定义在两个位置:步骤(step)和动作(action)。
(1)Post functions与Pre functions被定义在action中。在action中定义的Pre-functions是指在该动作发生之前要执行的函数。当工作流发生切换的时候,函数用来做某些事情。
(2)当Post functions与Pre functions被定义在step中的时候。在step中定义的Pre-functions是指在切换到这个step之前要执行的函数。同理,在step中的Post functions将在流程离开这个步骤之前执行。
这些函数将被应用到这个步骤的所有的切换,即使是这个步骤内部状态之间发生了切换,也不会执行。 |
|
回复:初试OSworkflow 心得体会, 软件技术
SixSun发表评论于2005/7/19 22:02:49 |
Pre functions是在流程的步骤(或状态)发生切换之前执行的。
Post functions是在流程的步骤(或状态)发生切换之后执行的。
函数可以定义在两个位置:步骤(step)和动作(action)。
(1)Post functions与Pre functions被定义在action中。在action中定义的Pre-functions是指在该动作发生之前要执行的函数。当工作流发生切换的时候,函数用来做某些事情。
(2)当Post functions与Pre functions被定义在step中的时候。在step中定义的Pre-functions是指在切换到这个step之前要执行的函数。同理,在step中的Post functions将在流程离开这个步骤之前执行。
这些函数将被应用到这个步骤的所有的切换,即使是这个步骤内部状态之间发生了切换,也不会执行。 |
|
回复:初试OSworkflow 心得体会, 软件技术
流水 (游客|220.184.69.232)发表评论于2005/7/19 12:20:52 |
action的实现你是怎么理解的?是靠pre-functions和post-functions还有results组成的么? |
|
» 1 »
|