订阅所有JSP/Servlet的日志 订阅 | 这是最新一篇日志 上一篇 | 下一篇日志 下一篇 ]
osworkflow

将osworkflow的例子移植到spring/hibernate(转)

将osworkflow的例子移植到spring/hibernate- -- -



将osworkflow的例子移植到spring/hibernate- -


软件的版本
osworkflow cvs版
hibernate 2.1.7
spring cvs

数据库采用mysql

1. 安装,将osworkflow的例子发布到tomcat中,确保能正确运行
2. 创建sping/hibernate的项目,无非就是添加需要的jar文件,编写配置文件
3. 配置文件参见 http://wiki.opensymphony.com/display/WF/2.3+Spring+framework

如下是我的配置文件(数据库部分),要注意的是sessionFactory的mappingResource部分,看看自己的
osworkflow的版本,再决定。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/classes/jdbc.properties_mysql</value>
</list>
</property>
</bean>
-->
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/DefaultDS</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean"
autowire="byName">
<property name="mappingResources">
<list>
<value>HibernateCurrentStep.hbm.xml</value>
<value>HibernateHistoryStep.hbm.xml</value>
<value>HibernateWorkflowEntry.hbm.xml</value>
<value>PropertySetItem.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>
<bean id="workflowStore"
class="com.opensymphony.workflow.spi.hibernate.SpringHibernateWorkflowStore">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
<!--
Optional PropertySet delegate, in case you want
to use another PropertySet store that is not HibernateStore
<property name="propertySetDelegate">
<ref local="propertySetDelegate"/>
</property>
-->
</bean>
<bean id="workflowFactory"
class="com.opensymphony.workflow.loader.SpringWorkflowFactory"
init-method="init">
<property name="resource">
<value>workflows.xml</value>
</property>
<property name="reload">
<value>true</value>
</property>
</bean>
<bean id="workflowTypeResolver"
class="com.opensymphony.workflow.util.SpringTypeResolver">
<!--
Here you can inject custom resolver for business logic
<property name="conditions">
<map>
<entry key="beanshell">
<value>mypackage.MyBeanShellCustomCondition</value></entry>
</map>
</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>
<!--
这里不创建workflow的bean,一般情况下创建workflow需要传入一个用户名
<bean id="workflow" class="com.opensymphony.workflow.basic.BasicWorkflow"
singleton="false" >
<constructor-arg>
<value>zjy</value>
</constructor-arg>
<property name="configuration">
<ref local="osworkflowConfiguration"/>
</property>
<property name="resolver">
<ref local="workflowTypeResolver"/>
</property>
</bean>
-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager"
autowire="byName"/>
<bean id="transactionManagerInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>

4. 编写创建工作流的类
代码如下
package com.yabts.workflow;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.opensymphony.workflow.AbstractWorkflow;
import com.opensymphony.workflow.Workflow;
import com.opensymphony.workflow.basic.BasicWorkflow;
import com.opensymphony.workflow.config.SpringConfiguration;
import com.opensymphony.workflow.util.SpringTypeResolver;

public class CreateWorkflowController extends WorkflowController {

private String successView ;
private SpringConfiguration osWorkflowConfig;
private SpringTypeResolver springTypeResolver;
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse arg1) throws Exception {
AbstractWorkflow workflow = new BasicWorkflow((String)request.getSession().getAttribute("username"));
workflow.setConfiguration(osWorkflowConfig);
workflow.setResolver(springTypeResolver);

long id = workflow.initialize("example", 100, null);
Map map = new HashMap();
map.put("id",id);
return new ModelAndView(getSuccessView(),map);
}
public String getSuccessView() {
return successView;
}
public void setSuccessView(String successView) {
this.successView = successView;
}
public SpringConfiguration getOsWorkflowConfig() {
return osWorkflowConfig;
}
public void setOsWorkflowConfig(SpringConfiguration osWorkflowConfig) {
this.osWorkflowConfig = osWorkflowConfig;
}
public SpringTypeResolver getSpringTypeResolver() {
return springTypeResolver;
}
public void setSpringTypeResolver(SpringTypeResolver springTypeResolver) {
this.springTypeResolver = springTypeResolver;
}


}
同时在spring的配置文件中配置
<bean id="createworkflow" class="com.yabts.workflow.CreateWorkflowController">
<property name="successView">
<value>newworkflow</value>
</property>
<property name="osWorkflowConfig">
<ref bean="osworkflowConfiguration"/>
</property>
<property name="springTypeResolver">
<ref bean="workflowTypeResolver"/>
</property>
</bean>

注意点,
1. 主要是sessionFactory的mappingResource的配置,其中会涉及到propertyset的一个hbm文件,
2. 现在只支持hibernate2,本想改为hibernate3的,但是遇到了一些问题,(需要改propertyset先)
3. 需要配置jndi数据源。对于tomcat5.5可以在${tomcat.home}\conf\Catalina\localhost下创建appname.xml的方法
例子如下
<Context path="osworkflow-2.8.0-dev-example" docBase="/osworkflow-2.8.0-dev-example" swallowOutput="true">
<Resource name="jdbc/DefaultDS" auth="Container" type="javax.sql.DataSource"
username="root"
password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/yabts?autoReconnect=true"/>
<Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"
factory="org.objectweb.jotm.UserTransactionFactory"
jotm.timeout="60"/>
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>
</Context>
注意需要将jdbc驱动拷贝到${tomcat.home}\common\lib下,如果配置transaction的话还要拷贝jotm.jar

平均得分
(0 次评分)





评论: 187 | 查看次数: 4168
  • 共有 187 条评论
  • 1
  • 2
  • 3
  • 4
  • 5
  • |
  • >>
游客 [2008-12-01 16:55:17]
If you’re seeking additional profits for your decorating business, patch look no further than embroidered patch. These perennial favorites are incredibly easy to handle —
embroidered patches and even easier to sell embroidered badge embroidery. “They’re a profitable add-on for any shop,” says Stephen Batts, president, Righteous Threads embroidery patches
embroidery patches, Greensboro, N.C.
游客 [2008-11-25 13:41:23]
游客 [2008-11-24 14:38:16]
游客 [2008-11-22 14:18:49]
游客 [2008-11-20 15:07:10]
游客 [2008-11-18 20:14:09]
游客 [2008-11-17 16:27:38]
游客 [2008-11-15 15:01:40]
游客 [2008-11-14 17:08:52]
游客 [2008-11-07 11:10:02]
游客 [2008-11-07 11:06:17]
游客 [2008-11-05 15:06:38]
游客 [2008-11-05 09:46:51]
游客 [2008-11-04 11:09:20]
游客 [2008-11-04 10:03:04]
  • 共有 187 条评论
  • 1
  • 2
  • 3
  • 4
  • 5
  • |
  • >>
发表评论
昵 称:  登录
内 容:
选 项:
字数限制 1000 字 | UBB代码 开启 | [img]标签 开启