最近研究osworkflow, 觉得这个工作流框架很轻便灵活,但是只有osworkflow+spring+hibernate的实现,我在想,如果一个大型的工作流系统,数据非常多,岂不是不能用hibernate了?,于是我就照着Hibernate的实现做了一个 Jdbc的的spring实现,反正jdbc可以解决任何数据优化问题,
package com.opensymphony.workflow.spi.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import org.springframework.beans.factory.InitializingBean; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.jdbc.support.JdbcUtils; public class SpringJDBCWorkflowStore extends JDBCWorkflowStore implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { entryTable = "OS_WFENTRY"; entryId = "ID"; entryName = "NAME"; entryState = "STATE"; historyTable = "OS_HISTORYSTEP"; currentTable = "OS_CURRENTSTEP"; currentPrevTable = "OS_CURRENTSTEP_PREV"; historyPrevTable = "OS_HISTORYSTEP_PREV"; stepId = "ID"; stepEntryId = "ENTRY_ID"; stepStepId = "STEP_ID"; stepActionId = "ACTION_ID"; stepOwner = "OWNER"; stepCaller = "CALLER"; stepStartDate = "START_DATE"; stepFinishDate = "FINISH_DATE"; stepDueDate = "DUE_DATE"; stepStatus = "STATUS"; stepPreviousId = "PREVIOUS_ID"; } public void setDataSource(DataSource dataSource){ this.ds = dataSource; } public DataSource getDataSource(){ return this.ds; } @Override protected Connection getConnection() throws SQLException { return DataSourceUtils.getConnection(this.ds); } @Override protected void cleanup(Connection connection, Statement statement, ResultSet result) { JdbcUtils.closeStatement(statement); JdbcUtils.closeResultSet(result); DataSourceUtils.releaseConnection(connection, this.ds); } public void setEntrySequence(String entrySequence){ this.entrySequence = entrySequence; } public void setStepSequence(String stepSequence){ this.stepSequence = stepSequence; } }
数据库的连接是基于JdbcTemplate的,好处就是可以很方便的和spring的事务框架整合(备注:如果想要用spring的事务管理,必须使用JdbcTemplate,原因是Spring的事务管理的数据库连接是从ConnHolder中取的,JdbcTemplate的数据库连接也是从ConnHolder中取的),这样使得osworkflow带入事务管理特性
Spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <description>数据源spring配置</description> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/test?autoReconnect=true</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>123</value> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <bean id="workflowStore" class="com.opensymphony.workflow.spi.jdbc.SpringJDBCWorkflowStore"> <property name="dataSource" ref="dataSource"></property> <property name="entrySequence"> <value>select count(*) + 1 from os_wfentry</value> </property> <property name="stepSequence"> <value>select sum(c1) + 1 from (select 1 as tb, count(id) as c1 from os_currentstep union select 2 as tb, count(id) as c1 from os_historystep) as TabelaFinal</value> </property> </bean> <bean id="workflowTypeResolver" class="com.opensymphony.workflow.util.SpringTypeResolver"/> <bean id="workflowFactory" class="com.opensymphony.workflow.spi.hibernate.SpringWorkflowFactory" init-method="init"> <property name="resource"><value>workflows.xml</value></property> <property name="reload"><value>false</value></property> </bean> <bean id="osworkflowConfiguration" class="com.opensymphony.workflow.config.SpringConfiguration"> <property name="store"><ref local="workflowStore"/></property> <property name="factory"><ref local="workflowFactory"/></property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"><ref local="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED,-Exception</prop> </props> </property> </bean> <bean id="workflow" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="singleton"> <value>false</value> </property> <property name="proxyInterfaces"> <value>com.opensymphony.workflow.Workflow</value> </property> <property name="interceptorNames"> <list> <value>transactionInterceptor</value> </list> </property> <property name="target" ref="workflowTarget"></property> </bean> <bean id="workflowTarget" class="com.opensymphony.workflow.basic.BasicWorkflow" singleton="false"> <property name="configuration"><ref local="osworkflowConfiguration"/></property> <constructor-arg> <value>test2</value> </constructor-arg> </bean> </beans>
附件里面的例子是基于Iteye里面某位同学的例子改的,只不过我整合了spring和事务,谢谢这位同学的贡献,lib没有传上来,因为有点大,需要spring的lib和osworkflow的lib,这些都可以在网上下载到
相关推荐
为了保证流程数据的可靠性,OSWorkflow支持多种持久化策略,如JDBC存储、Hibernate集成等,确保流程实例在系统重启后仍能恢复。 8. **用户界面与自定义** 虽然OSWorkflow本身不提供完整的用户界面,但提供了API和...
- **Spring Hibernate 存储**:利用 Spring 和 Hibernate 技术进行持久化操作。 - **JDBC 模板存储**:使用 JDBC 模板简化数据库操作。 - **Hibernate 存储**:直接使用 Hibernate 进行对象关系映射。 #### 四、...
- **JDBCTemplateWorkflowStore**:利用Spring的JdbcTemplate简化JDBC操作。 - **HibernateWorkflowStore**:直接使用Hibernate进行数据访问,适合复杂查询和大量数据处理。 #### 4. 工作流创建与执行 - **创建流程...
**OSWorkflow** 是一个开源的工作流引擎,用于实现业务流程自动化。它基于Java语言开发,并且支持多种数据库,具有高度的灵活性和扩展性。本手册旨在提供详细的指导,帮助开发者理解和使用OSWorkflow。 #### 二、...
7. **工作流集成**:手册将指导读者如何将OSWorkflow集成到Spring、Struts或其他Java EE框架中,以及如何与前端UI进行交互。 8. **错误处理和调试**:手册也会涉及如何诊断和解决OSWorkflow使用中可能遇到的问题,...
1. **易于集成**:OSWorkflow设计之初就考虑到了与现有系统的兼容性问题,能够方便地与Spring、Hibernate等框架结合使用。 2. **灵活性高**:用户可以根据需要自定义工作流的状态转换逻辑、动作和条件判断。 3. **轻...
- 配置 OSWorkflow 的核心组件,包括持久化策略(如 JDBC 或 Hibernate)、事件监听器、工作流初始化设置等。 3. **流程定义** - OSWorkflow 使用 XML 文件来定义工作流,包括步骤、状态、转移和条件。 - 每个...
- OSWorkflow作为Java应用程序的一部分,其运行依赖于其他组件,如Spring、Hibernate等。 - 文件提到的commons-logging.jar、hibernate3、oscore-2.2.5.jar等JAR文件是项目运行所必需的库文件。 7. OSWorkflow...
在Spring环境下创建OSWorkflow实例时,通常会通过Spring的Bean工厂来进行初始化。首先,在Spring配置文件中定义一个`WorkflowStore` Bean,然后基于该Bean创建`WorkflowEngine`实例。 ```xml ``` ##### ...
而`Spring framework`的整合则让OSWorkflow可以方便地在Spring应用上下文中使用,利用Spring的依赖注入和事务管理功能。 **5. 理解OSWorkflow** 理解OSWorkflow的关键在于掌握其核心概念,如: - **工作流程描述*...
OSWorkflow提供了多种存储方案,包括内存存储、JDBC存储和基于Spring或Hibernate的存储。其中,JDBC存储方式最为常见,它将工作流数据持久化到数据库中,便于数据备份和恢复。 ### 与Spring和Hibernate的集成 ...
6. **集成能力**:OSWorkflow可以轻松地与各种应用框架和数据库进行集成,如Spring、Hibernate、JDBC等,这大大增强了其在实际项目中的应用范围。 7. **持久化机制**:所有的工作流状态和历史数据都会被持久化存储...
6. OSWorkflow:OSWorkflow是一个可嵌入到Java应用程序中的工作流引擎,支持多种持久化选项,如EJB、Hibernate和JDBC。此外,它还可以与Spring框架集成,增强其在企业级应用中的使用。 7. wfmOpen:wfmOpen是J2EE...
5. **OSWorkflow**:一个灵活的工作流引擎,设计用于嵌入到企业应用程序中,提供了多种持久化API支持,包括EJB、Hibernate、JDBC等。 6. **wfmOpen**:WfMC和OMG规范下的工作流引擎实现,工作流通过扩展的XPDL描述...
6. OSWorkflow:这是一个可嵌入式的工作流引擎,支持多种持久化API,如EJB、Hibernate和JDBC。此外,它还与Spring框架有良好的集成,适合构建企业级应用。 7. wfmOpen:wfmOpen是WfMC和OMG标准的工作流设施的J2EE...