做了几个项目,一直被流程的控制所困扰,决定学习工作流方面的知识,从网上了解到osworkflow是一个轻量级的又极为灵活的工作流引擎(详细情况请访问:http://www.opensymphony.com/osworkflow),所以拿来学习。
折腾了一个下午,终于把自带的example运行起来了。我的测试环境:winxp tomcat4.1.30 oracle8.05 jdk1.4.2。
首先,下载https://osworkflow.dev.java.net/files/documents/635/4647/osworkflow-2.7.0.zip 。解压后,将osworkflow-2.7.0-example.war拷贝至tomcat的webapp下,启动tomcat,访问http://localhost/osworkflow-2.7.0-example,一切都很easy。
osworkflow提供了多种持久化机制memorystore (default), serializablestore, jdbcstore, ofbizstore等等。由于下载的example是为了方便初学者尽快的将程序运行起来,所以采用了memorystore。呵呵,实际的系统可不会让数据全呆在内存里哦。改成jdbcstore试试。
1、修改tomcat的sever.xml,添加:
<context path="/osworkflow-2.7.0-example" docbase="osworkflow-2.7.0-example"
debug="5" reloadable="true" crosscontext="true">
<logger classname="org.apache.catalina.logger.filelogger"
prefix="localhost_osworkflow_log." suffix=".txt"
timestamp="true"/>
resource name="jdbc/mydb" auth="container"
type="javax.sql.datasource"/>
<resourceparams name="jdbc/mydb">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.basicdatasourcefactory</value>
</parameter>
<parameter>
<name>driverclassname</name>
<value>oracle.jdbc.driver.oracledriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
</parameter>
<parameter>
<name>username</name>
<value>oswf</value>
</parameter>
<parameter>
<name>password</name>
<value>oswf</value>
</parameter>
<parameter>
<name>maxactive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxidle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxwait</name>
<value>-1</value>
</parameter>
</resourceparams>
</context>
2、修改web-inf/classes/osworkflow.xml(红色部分根据您的数据库作相应修改)
<osworkflow>
<persistence class="com.opensymphony.workflow.spi.jdbc.jdbcworkflowstore">
<!-- for jdbc persistence, all are required. -->
<property key="datasource" value="jdbc/mydb"/>
<property key="entry.sequence" value="select seq_os_wfentry.nextval from dual"/>
<property key="entry.table" value="os_wfentry"/>
<property key="entry.id" value="id"/>
<property key="entry.name" value="name"/>
<property key="entry.state" value="state"/>
<property key="step.sequence" value="select seq_os_currentsteps.nextval from dual"/>
<property key="history.table" value="os_historystep"/>
<property key="current.table" value="os_currentstep"/>
<property key="historyprev.table" value="os_historystep_prev"/>
<property key="currentprev.table" value="os_currentstep_prev"/>
<property key="step.id" value="id"/>
<property key="step.entryid" value="entry_id"/>
<property key="step.stepid" value="step_id"/>
<property key="step.actionid" value="action_id"/>
<property key="step.owner" value="owner"/>
<property key="step.caller" value="caller"/>
<property key="step.startdate" value="start_date"/>
<property key="step.finishdate" value="finish_date"/>
<property key="step.duedate" value="due_date"/>
<property key="step.status" value="status"/>
<property key="step.previousid" value="previous_id"/>
</persistence>
<factory class="com.opensymphony.workflow.loader.xmlworkflowfactory">
<property key="resource" value="workflows.xml" />
</factory>
</osworkflow>
3、在web-inf/classes里新建propertyset.xml
<propertysets>
<propertyset name="jdbc"
class="com.opensymphony.module.propertyset.database.jdbcpropertyset">
<arg name="datasource" value="jdbc/mydb"/>
<arg name="table.name" value="os_propertyentry"/>
<arg name="col.globalkey" value="global_key"/>
<arg name="col.itemkey" value="item_key"/>
<arg name="col.itemtype" value="item_type"/>
<arg name="col.string" value="string_value"/>
<arg name="col.date" value="date_value"/>
<arg name="col.data" value="data_value"/>
<arg name="col.float" value="float_value"/>
<arg name="col.number" value="number_value"/>
</propertyset>
</propertysets>
4、修改web-inf/classes下的osuser.xml
<opensymphony-user>
<provider class="com.opensymphony.user.provider.jdbc.jdbcaccessprovider">
<property name="user.table">os_user</property>
<property name="group.table">os_group</property>
<property name="membership.table">os_membership</property>
<property name="user.name">username</property>
<property name="user.password">passwordhash</property>
<property name="group.name">groupname</property>
<property name="membership.username">username</property>
<property name="membership.groupname">groupname</property>
<property name="datasource">java:comp/env/jdbc/mydb</property>
</provider>
<provider class="com.opensymphony.user.provider.jdbc.jdbccredentialsprovider">
<property name="user.table">os_user</property>
<property name="group.table">os_group</property>
<property name="membership.table">os_membership</property>
<property name="user.name">username</property>
<property name="user.password">passwordhash</property>
<property name="group.name">groupname</property>
<property name="membership.username">username</property>
<property name="membership.groupname">groupname</property>
<property name="datasource">java:comp/env/jdbc/mydb</property>
</provider>
<provider class="com.opensymphony.user.provider.jdbc.jdbcprofileprovider">
<property name="user.table">os_user</property>
<property name="group.table">os_group</property>
<property name="membership.table">os_membership</property>
<property name="user.name">username</property>
<property name="user.password">passwordhash</property>
<property name="group.name">groupname</property>
<property name="membership.username">username</property>
<property name="membership.groupname">groupname</property>
<property name="datasource">java:comp/env/jdbc/mydb</property>
</provider>
<!--
authenticators can take properties just like providers.
this smart authenticator should work for 'most' cases - it dynamically looks up
the most appropriate authenticator for the current server.
-->
<authenticator class="com.opensymphony.user.authenticator.smartauthenticator" />
</opensymphony-user>
5、在sql-plus里运行下载包里的 src\etc\deployment\jdbc\oracle.sql
6、启动tomcat
分享到:
相关推荐
1. 配置工作流定义:编写XML文件,定义流程的步骤、参与者、条件和动作。 2. 实现参与者接口:定义参与者类,处理每个步骤的业务逻辑。 3. 编写控制器:利用OSWorkflow API启动流程、查询状态、执行操作。 4. 监听和...
通过理解和实践这个实例,我们可以学习到如何在实际项目中应用工作流引擎,提升软件系统的灵活性和可维护性。无论是在企业级应用还是中小项目中,OsWorkflow都是一个值得考虑的工作流解决方案。
**工作流技术与OSWorkflow详解** 工作流(Workflow)是一种...通过深入学习和实践"workflow.pdf"中的内容,开发者可以快速掌握OSWorkflow的基本用法,从而在项目中有效地运用工作流技术,提升业务流程的自动化水平。
**工作流技术与OSWorkflow详解** 工作流(Workflow)是一种自动化业务流程的技术,它通过定义、执行和管理...通过深入学习和实践,开发者可以充分利用OSWorkflow的功能,为企业定制出符合自身需求的工作流解决方案。
Shark的流程定义语言是XPDL,它基于UML1.x的活动图,使得并发线程管理和任务分配更为直观,非常适合工作流建模。 jbpm则由JBoss公司开发,其最新版本jbpm3采用了Hibernate3作为持久层,这也是由于二者同属JBoss生态...
通过本文档的学习,我们可以了解到OSWorkFlow作为一款强大且灵活的工作流管理系统,在实际开发中具有广泛的应用价值。无论是在企业内部流程管理还是在更复杂的业务场景中,OSWorkFlow都能够提供有效的支持。掌握其...
1. **工作流引擎概念**:工作流引擎是软件系统的核心组件,它负责执行预定义的工作流定义,处理任务的分配、流转和状态变化。OSWorkflow 是一款基于 Java 的工作流引擎,能够与各种Java应用程序集成,如Java EE 应用...
通过osworkflow项目的学习和实践,总结出的一套osworkflow工作流引擎的学习笔记,供需要使用osworkflow系统的同学们借鉴,谢谢!
1. API集成:OSWorkflow 提供丰富的Java API,方便在应用中集成和控制工作流。 2. Web界面:内置的Web管理界面,用于查看流程实例、分配任务、审批等操作。 3. 模板和插件:支持自定义工作流模板和插件,以适应不同...
【工作流引擎选择:OSWorkflow vs JBPM】 工作流管理系统(Workflow Management System,WfMS)在企业级应用中扮演着重要角色,用于自动化业务流程。OSWorkflow 和 JBPM 是两个广泛使用的开源工作流引擎,它们各有...
OSworkflow(OpenSymphony Workflow)是一个开源的工作流管理系统,它提供了强大的流程定义和执行的能力,广泛应用于企业级应用中,如请假流程等业务场景。在本实例中,我们将深入探讨如何利用OSworkflow来实现一个...
1. 工作流模型:OSWorkFlow使用XML来定义工作流模型,包括任务(Task)、状态(State)、转换(Transition)等元素,这些元素共同构成了一个完整的工作流程。 2. 实例(Instance):当一个工作流模型被实例化后,就...
OSWorkflow是一款开源的工作流引擎,它为Java开发者和架构师提供了一个强大的工具来实现业务流程管理(BPM)。本书《OSWorkflow:Java开发人员和架构师集成开源业务流程管理指南》由Diego Adrian Naya Lazo撰写,...
1. **工作流概念**:介绍工作流的基本概念,如活动(Activity)、状态(State)、转移(Transition)和参与者(Actor),帮助读者建立工作流管理的基础认知。 2. **OSWorkflow安装与配置**:详细阐述如何在Java 8...
综合以上信息,学习工作流不仅需要理解工作流的基本概念,还要熟悉工作流建模语言(如XPDL),掌握特定工作流引擎(如OSWorkflow)的使用,以及遵循WFMC制定的行业标准。通过阅读提供的文档和实践案例,你将能更深入...
1. **工作流定义**:OSWorkflow 提供了一种基于 XML 的方式来定义工作流。工作流定义包括了任务、状态转换、参与者分配等,使得业务流程能够以声明式的方式进行配置。 2. **工作流实例**:在运行时,OSWorkflow 将...
学习工作流技术,你需要理解以下几个核心概念: 1. **工作流模型**:这是描述业务流程的抽象表示,定义了任务的顺序、条件和决策点。 2. **工作流引擎**:负责执行工作流模型,管理任务的生命周期,处理转移和决策...
1. **流程定义**:OSWorkflow允许开发者用XML来定义工作流,包括各种步骤、状态转换和参与者分配。这种定义方式灵活且易于维护。 2. **工作流实例**:在运行时,每个具体的流程执行称为一个工作流实例,每个实例都...
开源工作流osworkflow是软件开发中的一个重要工具,它主要用于实现业务流程的自动化管理。osworkflow由Jack Vanlightly创建,提供了一种灵活的方式来定义和执行工作流实例,支持动态修改流程,使得开发者能够在运行...
总之,OSWorkflow源码及电子书的资源集合,对于那些希望深入理解并使用工作流技术的开发者来说,是一份不可多得的学习材料。它涵盖了从基础到高级的各个方面,无论你是初学者还是经验丰富的开发者,都能从中受益。