我是新的休眠,並試圖將休眠與現有的基於彈簧的應用程序集成。休眠會話問題的交易
我配置了會話工廠和事務管理器,事務代理模板。
我也在這個應用程序中使用Quartz調度器。
當我運行該應用程序時,出現以下異常。
錯誤au.com.michaelpage.ctsgui.utils.OrganisationMergeProfileThread - 更新機會時出錯:無法打開Hibernate Session進行交易;嵌套的異常是java.lang.IllegalStateException:已將值[[email protected]]綁定到線程[DefaultQuartzScheduler_Worker-0]的密鑰[[email protected]]
我Hibernate的Session配置:
<bean id="sessionFactoryAU"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="profileAU" />
</property>
<property name="mappingResources">
<list>
<value>
/au/com/michaelpage/ctsgui/hibernate/dao/mappings/Opportunity.hbm.xml
</value>
<value>
/au/com/michaelpage/ctsgui/hibernate/dao/mappings/Position.hbm.xml
</value>
<value>
/au/com/michaelpage/ctsgui/hibernate/dao/mappings/EventRole.hbm.xml
</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- Database Settings -->
<prop key="hibernate.dialect">
org.hibernate.dialect.SybaseDialect
</prop>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop>
<!-- Cache settings -->
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
</props>
</property>
</bean>
<!-- Transaction manager for a Hibernate SessionFactory -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactoryAU" />
</property>
</bean>
<!-- Transaction template for Managers -->
<bean id="txProxyTemplateHibernateProfileAU" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="txManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_SUPPORTS</prop>
</props>
</property>
</bean>
<bean id="organisationMergeProfileMgrAU"
parent="txProxyTemplateHibernateProfileAU">
<property name="target">
<bean
class="au.com.michaelpage.ctsgui.mgr.profile.OrganisationMergeProfileMgrImpl">
<property name="commonProfileDao">
<ref bean="commonProfileDaoAU" />
</property>
<property name="organisationMergeProfileDao">
<ref bean="organisationMergeDaoAU" />
</property>
<property name="hibernateOrganisationDAO">
<ref bean="hibernateOrganisationDAOAU" />
</property>
<property name="hibernateOpportunityDAO">
<ref bean="hibernateOpportunityDAOAU" />
</property>
<property name="hibernatePositionDAO">
<ref bean="hibernatePositionDAOAU" />
</property>
<property name="hibernateEventRoleDAO">
<ref bean="hibernateEventRoleDAOAU" />
</property>
</bean>
</property>
</bean>
我Quartz調度配置:
<bean id="organisationMergeJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="organisationMergeJob" />
<property name="targetMethod" value="execute" />
<property name="concurrent" value="false" />
</bean>
<bean id="organisationMergeProfileRegularCheckerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="organisationMergeJobDetail" />
<property name="repeatInterval">
<util:constant static-field="au.com.michaelpage.ctsgui.common.Constants.CHECK_FREQUENCY" />
</property>
</bean>
這裏是 'organisationMergeJob'
<bean id="organisationMergeJob" class="au.com.michaelpage.ctsgui.utils.OrganisationMergeProfileThread">
<property name="organisationMergeMgr" ref="organisationMergeMgr"/>
</bean>
<bean id="organisationMergeMgr" class="au.com.michaelpage.ctsgui.mgr.OrganisationMergeMgrImpl">
<property name="organisationMergeDao" ref="organisationMergeDao"/>
</bean>
任何有助於解決這個bean定義?
預先感謝您。
skaffman嗨,
以下是錯誤的堆棧跟蹤:
Could not open Hibernate Session for transaction; nested exception is java.lang.IllegalStateException: Already value [[email protected]] for key [[email protected]] bound to thread [DefaultQuartzScheduler_Worker-3]
Caused by: java.lang.IllegalStateException: Already value [[email protected]] for key [[email protected]] bound to thread [DefaultQuartzScheduler_Worker-3]
at org.springframework.transaction.support.TransactionSynchronizationManager.bindResource(TransactionSynchronizationManager.java:163)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:526)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy73.updateEventRole(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy73.updateEventRole(Unknown Source)
at au.com.michaelpage.ctsgui.utils.OrganisationMergeProfileThread.execute(OrganisationMergeProfileThread.java:100)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:272)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
謝謝。
下面是bean定義「organisationMergeMgr」
<bean id="organisationMergeMgr"
class="au.com.michaelpage.ctsgui.mgr.OrganisationMergeMgrImpl">
<property name="organisationMergeDao" ref="organisationMergeDao"/>
</bean>
我們需要查看bean的定義'organisationMergeJob',以及將其連接到會話工廠的任何其他bean。另外,來自異常的堆棧跟蹤將很有用。 – skaffman 2009-12-08 23:34:08
嗨skaffman, 感謝您的答覆。 這裏是bean的定義'organisationMergeJob' \t \t <屬性名=」 organisationMergeMgr」 REF = 「organisationMergeMgr」/> \t 我會seperately張貼堆棧跟蹤。 –
Jani
2009-12-09 00:01:32
我添加了綠豆的問題。我們還在缺少'organisationMergeMgr',雖然。 – skaffman 2009-12-09 00:09:05