OSWorkflow 与Spring2&Hibernate3的结合

经过一番思量,决定在项目中引入OSWorkflow,参阅了很多网上的帖子,Spring2的结合比较容易解决,只要在spring的bean定义时使用的类正确就行了。但是对于Hibernate3,尝试了很多方法都没有搞定,貌似要完全的结合还需要写一些代码。于是退而求其次,仅仅做到让OSWorkflow 使用Spring定义的datasource就行了。省去在JNDI上另外再定义一个datasource的麻烦,并且减少数据库连接的开销。

具体做法:
1. 声明一个Store类

public class EtSpringMySQLWorkflowStore extends MySQLWorkflowStore implements ApplicationContextAware {
private static ApplicationContext applicationContext;

public EtSpringMySQLWorkflowStore() {

}
public void init(Map props) throws StoreException {
super.init(props);
String springDataSource = (String) props.get("spring.datasource");
ds=(DataSource)getApplicationContext().getBean(springDataSource);
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public void setApplicationContext(ApplicationContext applicationContext) {
EtSpringMySQLWorkflowStore.applicationContext = applicationContext;
}

}


2. 在osworkflow.xml中如下定义store:

<persistence class="com.xxx.workflow.EtSpringMySQLWorkflowStore">
<property key="spring.datasource" value="dataSource"/>


3. OSWorkflow的使用与普通方式一样:

// 创建工作流实例
Map<String, Object> transientVars = new HashMap<String, Object>();
transientVars.put(ServletContext.class.getName(),
this.servletContext);
Workflow wf = new BasicWorkflow("");
// Workflow wf=(Workflow)getBean("workflow");
try {
long wfid = wf.initialize("exchange", 100, null);
wf.getPropertySet(wfid).setString("modelName",getText("exchange"));
wf.getPropertySet(wfid).setInt("modelId",
model.getExchangeId().intValue());
wf.doAction(wfid, 1, transientVars);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值