- 浏览: 1989337 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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的第二支程式
這裡將介紹如何在流程裡加上限制,首先修改leave.xml,限制送出假單的人一定要是啟動流程的人。
<?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="0" name="開始">
<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="Queued"
step="1" owner="${caller}" />
</results>
</action>
</initial-actions>
<steps>
<step id="1" name="填假單">
<actions>
<action id="1" name="送出">
<restrict-to>
<conditions>
<condition type="class">
<arg name="class.name">
com.opensymphony.workflow.util.AllowOwnerOnlyCondition
</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="Queued"
step="2" owner="${caller}" />
</results>
</action>
</actions>
</step>
<step id="2" name="批假單">
<actions>
<action id="2" name="准許">
<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="Queued"
step="3" owner="${caller}"/>
</results>
</action>
<action id="3" name="駁回">
<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="Queued"
step="1" owner="${caller}"/>
</results>
</action>
</actions>
</step>
<step id="3" name="停止" />
</steps>
</workflow>
接著更改Leave.java及LeaveAction.java,讓啟動流程的人和送出假單的人可以不同。
Leave.java
package tw.idv.idealist;
import com.opensymphony.workflow.InvalidActionException;
import com.opensymphony.workflow.InvalidEntryStateException;
import com.opensymphony.workflow.InvalidInputException;
import com.opensymphony.workflow.InvalidRoleException;
import com.opensymphony.workflow.Workflow;
import com.opensymphony.workflow.WorkflowException;
import com.opensymphony.workflow.basic.BasicWorkflow;
import com.opensymphony.workflow.config.DefaultConfiguration;
import com.opensymphony.workflow.spi.Step;
/**
* 請假流程
* @author steven
*/
public class Leave {
/**
* 啟動流程
* @param employee 員工編號
* @return 工作流編號
*/
public long start(String employee) {
Workflow workflow = new BasicWorkflow(employee);
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
long workflowId = -1;
try {
//leave是workflowx.xml中定的名稱
workflowId = workflow.initialize("leave", 0, null);
} catch (InvalidActionException e) {
e.printStackTrace();
} catch (InvalidRoleException e) {
e.printStackTrace();
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (InvalidEntryStateException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
return workflowId;
}
/**
* 送出假單
* @param workflowId 工作流編號
* @param employee 員工編號
*/
public void send(long workflowId, String employee) {
Workflow workflow = new BasicWorkflow(employee);
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
try {
workflow.doAction(workflowId, 1, null);
} catch (InvalidActionException e) {
e.printStackTrace();
} catch (InvalidRoleException e) {
e.printStackTrace();
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (InvalidEntryStateException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
}
/**
* 准假假單
* @param workflowId 工作流編號
* @param actionId 動作編號, 2 准許, 3 駁回
*/
public void allow(long workflowId, int actionId) {
Workflow workflow = new BasicWorkflow("manager1");
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
try {
workflow.doAction(workflowId, actionId, null);
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
catch (InvalidActionException e) {
e.printStackTrace();
}
}
}
LeaveAction.java
package tw.idv.idealist.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import tw.idv.idealist.Leave;
/**
* @author Steven
*/
public class LeaveAction extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Leave leave = new Leave();
String employee = req.getParameter("employee");
long workflowId = leave.start(employee);
leave.send(workflowId, "someone"); // <<== 非啟動流程的人送出假單
resp.sendRedirect("allow.jsp?workflowId=" + workflowId);
}
}
package tw.idv.idealist.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import tw.idv.idealist.Leave;
/**
* @author Steven
*/
public class LeaveAction extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Leave leave = new Leave();
String employee = req.getParameter("employee");
long workflowId = leave.start(employee);
leave.send(workflowId, "someone"); // <<== 非啟動流程的人送出假單
resp.sendRedirect("allow.jsp?workflowId=" + workflowId);
}
}
啟動Tomcat,並執行leave.jsp後,會出現如下exception,確實OSWorkflow偵測到啟動流程的人和送出假單的人不同。
com.opensymphony.workflow.InvalidActionException: Action 1 is invalid
at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:546)
at tw.idv.idealist.Leave.send(Leave.java:56)
at tw.idv.idealist.actions.LeaveAction.doPost(LeaveAction.java:25)
at tw.idv.idealist.actions.LeaveAction.doGet(LeaveAction.java:17)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
<?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="0" name="開始">
<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="Queued"
step="1" owner="${caller}" />
</results>
</action>
</initial-actions>
<steps>
<step id="1" name="填假單">
<actions>
<action id="1" name="送出">
<restrict-to>
<conditions>
<condition type="class">
<arg name="class.name">
com.opensymphony.workflow.util.AllowOwnerOnlyCondition
</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="Queued"
step="2" owner="${caller}" />
</results>
</action>
</actions>
</step>
<step id="2" name="批假單">
<actions>
<action id="2" name="准許">
<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="Queued"
step="3" owner="${caller}"/>
</results>
</action>
<action id="3" name="駁回">
<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="Queued"
step="1" owner="${caller}"/>
</results>
</action>
</actions>
</step>
<step id="3" name="停止" />
</steps>
</workflow>
接著更改Leave.java及LeaveAction.java,讓啟動流程的人和送出假單的人可以不同。
Leave.java
package tw.idv.idealist;
import com.opensymphony.workflow.InvalidActionException;
import com.opensymphony.workflow.InvalidEntryStateException;
import com.opensymphony.workflow.InvalidInputException;
import com.opensymphony.workflow.InvalidRoleException;
import com.opensymphony.workflow.Workflow;
import com.opensymphony.workflow.WorkflowException;
import com.opensymphony.workflow.basic.BasicWorkflow;
import com.opensymphony.workflow.config.DefaultConfiguration;
import com.opensymphony.workflow.spi.Step;
/**
* 請假流程
* @author steven
*/
public class Leave {
/**
* 啟動流程
* @param employee 員工編號
* @return 工作流編號
*/
public long start(String employee) {
Workflow workflow = new BasicWorkflow(employee);
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
long workflowId = -1;
try {
//leave是workflowx.xml中定的名稱
workflowId = workflow.initialize("leave", 0, null);
} catch (InvalidActionException e) {
e.printStackTrace();
} catch (InvalidRoleException e) {
e.printStackTrace();
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (InvalidEntryStateException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
return workflowId;
}
/**
* 送出假單
* @param workflowId 工作流編號
* @param employee 員工編號
*/
public void send(long workflowId, String employee) {
Workflow workflow = new BasicWorkflow(employee);
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
try {
workflow.doAction(workflowId, 1, null);
} catch (InvalidActionException e) {
e.printStackTrace();
} catch (InvalidRoleException e) {
e.printStackTrace();
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (InvalidEntryStateException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
}
/**
* 准假假單
* @param workflowId 工作流編號
* @param actionId 動作編號, 2 准許, 3 駁回
*/
public void allow(long workflowId, int actionId) {
Workflow workflow = new BasicWorkflow("manager1");
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
try {
workflow.doAction(workflowId, actionId, null);
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
catch (InvalidActionException e) {
e.printStackTrace();
}
}
}
LeaveAction.java
package tw.idv.idealist.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import tw.idv.idealist.Leave;
/**
* @author Steven
*/
public class LeaveAction extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Leave leave = new Leave();
String employee = req.getParameter("employee");
long workflowId = leave.start(employee);
leave.send(workflowId, "someone"); // <<== 非啟動流程的人送出假單
resp.sendRedirect("allow.jsp?workflowId=" + workflowId);
}
}
package tw.idv.idealist.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import tw.idv.idealist.Leave;
/**
* @author Steven
*/
public class LeaveAction extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Leave leave = new Leave();
String employee = req.getParameter("employee");
long workflowId = leave.start(employee);
leave.send(workflowId, "someone"); // <<== 非啟動流程的人送出假單
resp.sendRedirect("allow.jsp?workflowId=" + workflowId);
}
}
啟動Tomcat,並執行leave.jsp後,會出現如下exception,確實OSWorkflow偵測到啟動流程的人和送出假單的人不同。
com.opensymphony.workflow.InvalidActionException: Action 1 is invalid
at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:546)
at tw.idv.idealist.Leave.send(Leave.java:56)
at tw.idv.idealist.actions.LeaveAction.doPost(LeaveAction.java:25)
at tw.idv.idealist.actions.LeaveAction.doGet(LeaveAction.java:17)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
发表评论
-
OSWorkflow 工作流的入门知识点.
2011-01-28 13:40 1664一、工作流框架的选择 ... -
OSWorkFlow入门指南
2011-01-27 16:27 1546OSWorkFlow入门指南 目的 这篇指导资料的目 ... -
基于开源工作流引擎OSWorkflow的业务系统实例——请假审批系统
2010-12-20 13:20 2171近日调查osworkflow的相关知识,寻找一个能够运行的实例 ... -
OSWorkflow表结构分析
2010-12-19 14:15 1545OSWorkflow表结构分析 研究了一段时间的OSWo ... -
OSWorkflow观念探讨
2010-12-19 14:13 1575OSWorkflow观念探讨 -转自史蒂芬 --流程 ... -
OSWorkflow的第五个程序
2010-12-19 14:11 1318OSWorkflow的第五支程式 第五支程式要用OSWork ... -
OSWorkflow的第四个程序
2010-12-19 14:10 1187OSWorkflow的第四支程式 ... -
OSWorkflow的第三个程序
2010-12-19 14:09 1314OSWorkflow的第三支程式 ... -
OSWorkflow的第一个程序
2010-12-19 13:52 1735OSWorkflow的第一支程式 OSWorkflow的第一 ...
相关推荐
"osworkflow配置及演示程序.rar" 是一个包含有关OSWorkflow配置和示例应用程序的压缩文件。OSWorkflow(Open Source Workflow)是一个开源的工作流管理系统,它允许开发者在Java应用程序中实现复杂的业务流程。以下...
OSWorkflow 是一个强大的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程管理。这个压缩包文件包含了关于 OSWorkflow 配置以及演示程序的相关资源,是学习和理解 OSWorkflow 的宝贵资料。 首先,我们来看...
OSWorkflow
4. 第三方教程:网上有许多关于OSWorkFlow的教程和博客文章,深入讲解各个功能和最佳实践。 总的来说,OSWorkFlow为Java开发者提供了一个强大且易用的工作流解决方案,能够有效地提升企业的业务流程管理水平。通过...
osWorkflow 是一个开源的工作流管理系统,专为 Java 应用程序设计,用于处理复杂的业务流程。这个系统的核心功能是管理、跟踪和执行一系列步骤,这些步骤构成了一个工作流程。osWorkflow 提供了一种灵活的方式来定义...
OSWorkflow是一款开源的工作流引擎,主要用于管理应用程序中的复杂业务流程。这款工具提供了强大的工作流建模、执行和跟踪功能,让开发者能够灵活地定义和控制应用程序的流程逻辑。本手册是OSWorkflow的中文版,旨在...
一个osworkflow的例子,其实就是官方的例子,只是除了是汉化的外我还把在jsp中的Java代码提取到一个单独的类中,这样便于阅读和理解。希望对大家有帮助。
OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程管理。这个"osworkflow2.8"版本是OSWorkflow的一个特定发行版,包含了一整套用于设计、执行和管理工作流程的工具和资源。下面我们将...
OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程。"osworkflow_bundle2" 是一个专门用于学习 OSWorkflow 的示例集合,它包含了一系列的资源和实例,帮助用户理解并掌握如何使用这个...
**osworkflow** 是一个开源的工作流管理系统,专为Java应用程序设计,用于管理复杂的工作流程。在本入门指南中,我们将深入探讨如何使用osworkflow,并将其与流行的数据持久化框架Hibernate和依赖注入容器Spring进行...
OsWorkflow 是一个基于Java的工作流引擎,主要用于设计和执行复杂的业务流程。这个项目是一个请假申请的工作流示例,其中流程的定义完全存储在XML文件中,这样可以方便地进行流程的配置和更改,无需修改源代码。对于...
osWorkflow 是由 James Helzer 开发的,其设计目标是为 Java 应用程序提供一个轻量级、易于使用的流程管理框架。osWorkflow 支持动态流程更改、事件驱动的流程控制以及多种持久化机制,如 JNDI、XML 文件和数据库...
Osworkflow 是一个开源的工作流引擎,它为应用程序提供了一种灵活的方式来管理业务流程。这个入门级的例子将带你了解 Osworkflow2.8 的基本概念和如何在项目中简单地实现工作流。 Osworkflow 提供了一个强大的框架...
JPetStoreOSGI.rar Mytestworkflow.rar Osworkflow持久化.doc Osworkflow的介绍.doc osworkflow配置与demo.rar osworkflow中文开发指南.rar OSWorkflow中文手册OSWorkflow-chinese-...用osworkflow写一个请假例子.rar
OsWorkflow是一款开源的工作流引擎,它为应用程序提供了一种灵活且可扩展的方式来管理业务流程。在本实例中,我们将深入探讨OsWorkflow的核心概念、主要功能以及如何创建和测试一个工作流实例。 工作流引擎是软件...
OSWorkflow(OpenSymphony Workflow)是一款开源的工作流引擎,它为开发者提供了一种灵活的方式来管理应用程序中的业务流程。OSWorkflow的流程配置是通过XML文件来定义的,这使得流程设计可以与代码分离,便于维护和...
`src`目录包含osWorkflow的源代码,对于想要深入了解osWorkflow工作原理或者进行二次开发的开发者来说非常有价值。通过查看源代码,可以学习到osWorkflow内部如何处理工作流的各个阶段,以及如何实现复杂的流程控制...
OSWorkflow(OpenSymphony Workflow)是一个开源的工作流引擎,它提供了一种灵活的方式来设计、实施和管理业务流程。本篇文章将深入探讨OSWorkflow的工作原理及其应用实例。 OSWorkflow的核心概念包括工作流定义、...
OSWorkflow 是一个强大的工作流引擎,它主要用于管理应用程序中的复杂业务流程。在这个“osworkflow 简单实例”中,我们将探讨如何使用 OSWorkflow 实现一个基础的请假系统。这个系统包括两个主要步骤:员工发起请假...