今天尝试整合Spring和JBPM,搞了一上午都没结果。每次都是SessionFactory创建失败,主要是在加载Hibernate的映射文件时出现问题,详细步骤如下:
1、修改web.xml 增加如下:
xml 代码
- <context-param>
- <param-name>contextConfigLocationparam-name>
- <param-value>
- /WEB-INF/workflowApplicationContext.xml
- param-value>
- context-param>
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- listener-class>
- listener>
2、在WEB-INF目录下增加Spring的配置文件workflowApplicationContext.xml.如下:
xml 代码
- xml version="1.0" encoding="UTF-8"?>
- >
- <beans default-autowire="no" default-lazy-init="false"
- default-dependency-check="none">
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <value>net.sourceforge.jtds.jdbc.Drivervalue>
- property>
- <property name="url">
- <value>jdbc:jtds:sqlserver://localhost:1433/jbpm3_2value>
- property>
- <property name="username">
- <value>savalue>
- property>
- <property name="password">
- <value>savalue>
- property>
- bean>
- <bean id="workflowsessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref local="dataSource" />
- property>
- <property name="mappingJarLocations">
- <list>
- <value>WEB-INF/lib/jbpm-jpdl.jarvalue>
- <value>WEB-INF/lib/jbpm-identity.jarvalue>
- list>
- property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.SQLServerDialect
- prop>
- <prop key="hibernate.show_sql">trueprop>
- <prop key="hibernate.cache.provider_class">
- org.hibernate.cache.HashtableCacheProvider
- prop>
- <prop key="hibernate.query.factory_class">
- org.hibernate.hql.classic.ClassicQueryTranslatorFactory
- prop>
- props>
- property>
- bean>
- beans>
3、启动Tomcat,异常
java 代码
- 严重: Exception sending context initialized event to listener instance of class
- org.springframework.web.context.ContextLoaderListener
- org.springframework.beans.factory.BeanCreationException: Error creating bean wit
- h name 'workflowsessionFactory' defined in ServletContext resource [/WEB-INF/wor
- kflowApplicationContext.xml]: Invocation of init method failed; nested exception
- is org.hibernate.HibernateException:
- Errors in named queries: JobSession.resume
- Jobs, GraphSession.deleteJobsForProcessInstance, JobSession.suspendJobs, JobSess
- ion.deleteTimersForProcessInstance, JobSession.deleteExecuteNodeJobsForProcessIn
- stance, GraphSession.deleteTaskInstancesById
- Caused by: org.hibernate.HibernateException: Errors in named queries: JobSession
- .resumeJobs, GraphSession.deleteJobsForProcessInstance, JobSession.suspendJobs,
- JobSession.deleteTimersForProcessInstance, JobSession.deleteExecuteNodeJobsForPr
- ocessInstance, GraphSession.deleteTaskInstancesById
- at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:
- 365)
- at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.jav
- a:1294)
查看JBPM的代码,发现出现异常的named quieries均为含update和delete的HQL语句,映射文件中(org.jbpm.db.hibernate.queries.hbm.xml)还包含其他的含select的HQL语句,并没有出现问题。
问题究竟出在哪里呢?如何解决?希望知道的老大告知一二!!!
4、关于SessionFactory查找映射文件的方式还有其他两种方式,写在这里备忘:)
xml 代码
- <property name="configLocations">
- <list>
- <value>classpath:/hibernate.cfg.xmlvalue>
- list>
- property>
xml 代码
- <property name="mappingLocations">
- <value>classpath*:/org/jbpm/**/*.hbm.xmlvalue>
- property>