SpringHibernateWorkflowStore配置

这种方法是联合使用spring 2 和Hibernate 3的配置方法。
第一步:配置web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>OSWorkflow Example App</display-name>
<description>OSWorkflow Example App</description>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext-hibernate3.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>SOAPWorkflow</servlet-name> <servlet-class>com.opensymphony.workflow.soap.SOAPWorkflowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SOAPWorkflow</servlet-name>
<url-pattern>/soap/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
第二步:配置数据源,同上。
第三步:配置OSWorkflow必要文件。
确定在\%webapp%\WEB-INF\classes\下面有以下几个文件:
example.xml:例子,不作修改。
workflows.xml:例子,不作修改。
osuser.xml,因为osuser是比较独立的模块,目前还没有支持hibernate3,修改可以同上,这就意味着osuser还是要用JDBC存储方式。
osworkflow.xml由于我们现在采用的是spring+hibernate3方式,所以便要去掉这个文件,而增加一个spring配置文件applicationContext-hibernate3.xml,其配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
14
<beans>
OSWorkflow 开发指南 Version 1.0
October 15, 2007 So many open source projects. Why not Open your Documents?
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/oswf</value>
</property>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>com/opensymphony/workflow/spi/hibernate3/HibernateWorkflowEntry.hbm.xml</value> <value>com/opensymphony/workflow/spi/hibernate3/HibernateHistoryStep.hbm.xml</value> <value>com/opensymphony/workflow/spi/hibernate3/HibernateCurrentStep.hbm.xml</value> <value>com/opensymphony/workflow/spi/hibernate3/HibernateCurrentStepPrev.hbm.xml</value> <value>com/opensymphony/workflow/spi/hibernate3/HibernateHistoryStepPrev.hbm.xml</value> <value>com/opensymphony/module/propertyset/hibernate3/PropertySetItem.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">false</prop>
</props>
</property>
</bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- Transaction template for Managers, from:
http://blog.exis.com/colin/archives/2004/07/31/concise-transaction-definitions-spring-11/ -->
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
15
<property name="transactionManager" ref="transactionManager"/>
OSWorkflow 开发指南 Version 1.0
October 15, 2007 So many open source projects. Why not Open your Documents?
<property name="proxyTargetClass" value="true"/>
<property name="transactionAttributes">
<props>
<prop key="do*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="propertySetDelegate" class="com.opensymphony.workflow.spi.hibernate3.DefaultHibernatePropertySetDelegate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="workflowStore" class="com.opensymphony.workflow.spi.hibernate3.SpringHibernateWorkflowStore">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
<property name="propertySetDelegate">
<ref bean="propertySetDelegate"/>
</property>
</bean>
<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>true</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="workflowTypeResolver" class="com.opensymphony.workflow.util.SpringTypeResolver">
16
</bean>
OSWorkflow 开发指南 Version 1.0
October 15, 2007 So many open source projects. Why not Open your Documents?
</beans>
由配置文件可以看出和官方或者一般的spring+hibernate3配置方式有很大的不同。在数据库中增加了和JDBCWorkflowStore数据库相同的两张表os_current_step_prev还有os_history_step_prev.另外os_propertyentry表结构和JDBCWorkflowStore中的os_propertyentry表结构有所不同,对比如下:
JDBCWorkflowStore. os_propertyentry
create table OS_PROPERTYENTRY
(
GLOBAL_KEY varchar(250) NOT NULL,
ITEM_KEY varchar(250) NOT NULL,
ITEM_TYPE tinyint,
STRING_VALUE varchar(255),
DATE_VALUE datetime,
DATA_VALUE blob,
FLOAT_VALUE float,
NUMBER_VALUE numeric,
primary key (GLOBAL_KEY, ITEM_KEY)
)TYPE=InnoDB;
SpringHibernateWorkflowStore. os_propertyentry
CREATE TABLE `os_propertyentry` (
`entity_name` varchar(125) NOT NULL,
`entity_id` bigint(20) NOT NULL,
`entity_key` varchar(255) NOT NULL,
`key_type` int(11) default NULL,
`boolean_val` int(1) default '0',
`double_val` double default NULL,
`string_val` varchar(255) default NULL,
`long_val` bigint(20) default NULL,
`int_val` int(11) default NULL,
`date_val` date default NULL,
PRIMARY KEY (`entity_name`,`entity_id`,`entity_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
os_entryids表和os_stepids表都不曾用到,故可以删除。
程序也有极大不同,增加了com\opensymphony\module\propertyset\hibernate3对hibernate3的propertyset支持;修改了com\opensymphony\workflow\spi\hibernate3中的java文件特别是AbstractHibernateWorkflowStore.java
*.hbm.xml文件都要加上default-lazy= "false",另外必须说明HibernateHistoryStep.hbm.xml里面的生成ID的class要设置成为assigned,因为它的ID其实就是从HibernateCurrentStep.hbm.xml里面移过来的,所以不能自增长。
17
另外请读者注意:如果用的是非mysql数据库,第一次运行前你可以在applicationContext-hibernate3.xml文件中sessionFactory bean定义中<prop key="hibernate.show_sql">false</prop>的后面加上一个<prop
OSWorkflow 开发指南 Version 1.0
October 15, 2007 So many open source projects. Why not Open your Documents?
key="hibernate.hbm2ddl.auto">create-drop</prop>,这样可以不用创建除用户和群组之外的*.hbm.xml表,在启动服务的时候系统会自动为*.hbm.xml创建所对应的表。不过注意要在创建之后把它注释掉,不然每次启动服务的时候都会重新创建一次,并且上次的数据也会因此而丢失。
propertyset.xml中增加对hibernate3的支持,配置如下:
<propertysets>
<propertyset name="hibernate3" class="com.opensymphony.module.propertyset.hibernate3.HibernatePropertySet"/>
</propertysets>

 

你可能感兴趣的:(spring,bean,Hibernate,workflow,OS)