|
这种方法是联合使用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.0October 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.0October 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.0October 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_propertyentrycreate 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_propertyentryCREATE 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>的后面加上一个<propOSWorkflow 开发指南 Version 1.0October 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> |
|