`
dingchao.lonton
  • 浏览: 49766 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

osworkflow+spring+jdbc实现

阅读更多

最近研究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,这些都可以在网上下载到

分享到:
评论
5 楼 洞中有怪兽 2019-02-27  
             
4 楼 呵呵呵123 2017-09-01  
osuser.xml配置怎么配啊
3 楼 cxlovejet 2013-05-23  
下载了,有没有完整的spring+oracle的列子呀,我想看看。
2 楼 dingchao.lonton 2013-05-23  
cxlovejet 写道
你好,整合spring报错, Cannot find osworkflow.xml configuration file in classpath or in META-INF 这个是什么原因,我是用你的配置文件来弄的。

你下载了osworkflow.jar了没有
1 楼 cxlovejet 2013-05-22  
你好,整合spring报错, Cannot find osworkflow.xml configuration file in classpath or in META-INF 这个是什么原因,我是用你的配置文件来弄的。

相关推荐

    OSWorkflow中文手册 OSWorkflow中文手册

    为了保证流程数据的可靠性,OSWorkflow支持多种持久化策略,如JDBC存储、Hibernate集成等,确保流程实例在系统重启后仍能恢复。 8. **用户界面与自定义** 虽然OSWorkflow本身不提供完整的用户界面,但提供了API和...

    osworkflow2.8.pdf

    - **Spring Hibernate 存储**:利用 Spring 和 Hibernate 技术进行持久化操作。 - **JDBC 模板存储**:使用 JDBC 模板简化数据库操作。 - **Hibernate 存储**:直接使用 Hibernate 进行对象关系映射。 #### 四、...

    OSWORKFlow流程开发教程

    - **JDBCTemplateWorkflowStore**:利用Spring的JdbcTemplate简化JDBC操作。 - **HibernateWorkflowStore**:直接使用Hibernate进行数据访问,适合复杂查询和大量数据处理。 #### 4. 工作流创建与执行 - **创建流程...

    OSWorkflow中文手册 2.8

    **OSWorkflow** 是一个开源的工作流引擎,用于实现业务流程自动化。它基于Java语言开发,并且支持多种数据库,具有高度的灵活性和扩展性。本手册旨在提供详细的指导,帮助开发者理解和使用OSWorkflow。 #### 二、...

    osworkflow中文手册

    7. **工作流集成**:手册将指导读者如何将OSWorkflow集成到Spring、Struts或其他Java EE框架中,以及如何与前端UI进行交互。 8. **错误处理和调试**:手册也会涉及如何诊断和解决OSWorkflow使用中可能遇到的问题,...

    《OSWorkflow开发指南》电子版

    1. **易于集成**:OSWorkflow设计之初就考虑到了与现有系统的兼容性问题,能够方便地与Spring、Hibernate等框架结合使用。 2. **灵活性高**:用户可以根据需要自定义工作流的状态转换逻辑、动作和条件判断。 3. **轻...

    OSWorkFlow入门

    - 配置 OSWorkflow 的核心组件,包括持久化策略(如 JDBC 或 Hibernate)、事件监听器、工作流初始化设置等。 3. **流程定义** - OSWorkflow 使用 XML 文件来定义工作流,包括步骤、状态、转移和条件。 - 每个...

    OSWorkflow的开发指导与指南.pdf

    - OSWorkflow作为Java应用程序的一部分,其运行依赖于其他组件,如Spring、Hibernate等。 - 文件提到的commons-logging.jar、hibernate3、oscore-2.2.5.jar等JAR文件是项目运行所必需的库文件。 7. OSWorkflow...

    OSWorkflow开发指南

    在Spring环境下创建OSWorkflow实例时,通常会通过Spring的Bean工厂来进行初始化。首先,在Spring配置文件中定义一个`WorkflowStore` Bean,然后基于该Bean创建`WorkflowEngine`实例。 ```xml ``` ##### ...

    OSWorkflow中文手册V2.8

    而`Spring framework`的整合则让OSWorkflow可以方便地在Spring应用上下文中使用,利用Spring的依赖注入和事务管理功能。 **5. 理解OSWorkflow** 理解OSWorkflow的关键在于掌握其核心概念,如: - **工作流程描述*...

    osworkflow_doc_cn_v2.0.pdf

    OSWorkflow提供了多种存储方案,包括内存存储、JDBC存储和基于Spring或Hibernate的存储。其中,JDBC存储方式最为常见,它将工作流数据持久化到数据库中,便于数据备份和恢复。 ### 与Spring和Hibernate的集成 ...

    OSWorkflow中文手册

    6. **集成能力**:OSWorkflow可以轻松地与各种应用框架和数据库进行集成,如Spring、Hibernate、JDBC等,这大大增强了其在实际项目中的应用范围。 7. **持久化机制**:所有的工作流状态和历史数据都会被持久化存储...

    java 工作流简介

    6. OSWorkflow:OSWorkflow是一个可嵌入到Java应用程序中的工作流引擎,支持多种持久化选项,如EJB、Hibernate和JDBC。此外,它还可以与Spring框架集成,增强其在企业级应用中的使用。 7. wfmOpen:wfmOpen是J2EE...

    工作流解决方案

    5. **OSWorkflow**:一个灵活的工作流引擎,设计用于嵌入到企业应用程序中,提供了多种持久化API支持,包括EJB、Hibernate、JDBC等。 6. **wfmOpen**:WfMC和OMG规范下的工作流引擎实现,工作流通过扩展的XPDL描述...

    Java开源工作流引擎.pdf

    6. OSWorkflow:这是一个可嵌入式的工作流引擎,支持多种持久化API,如EJB、Hibernate和JDBC。此外,它还与Spring框架有良好的集成,适合构建企业级应用。 7. wfmOpen:wfmOpen是WfMC和OMG标准的工作流设施的J2EE...

Global site tag (gtag.js) - Google Analytics