大佬教程收集整理的这篇文章主要介绍了Spring + Hibernate + DB2 + JTA + XA应用程序中的死锁,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
最终,我执行了干净的运行而没有死锁,它执行以下操作:
我不明白的一件事是,为什么与我现在使用的“ with cs”相比,在我的SELEct语句末尾使用“ with ur”不能解决死锁。想知道数据库的隔离级别,“ rs”需要做什么呢?
12:04:18,503 INFO ExceptionResolver:30 - [ org.springframework.dao.DeadlockLoserDataAccessException ] Hibernate flushing: could not update: [sero.chase.integration.beans.bean#1000]; SQL [update SCHm.v***240u_bean set prop1=?,prop2=?,prop3=?,prop4=?,prop5=?,proP6=?,proP7=?,prop8=?,prop9=?,prop10=?,prop11=?,prop12=?,prop13=?,prop14=?,prop15=?,prop16=?,prop17=?,prop18=?,prop19=?,prop20=?,prop21=?,where bean_id=?]; UNsuccesSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON @R_900_6756@0C90088,TYPE OF @R_616_5550@E 00000302,AND @R_616_5550@E NAME SCHm.SAKT240 .X'000017'. SQLCODE=-913,SQLSTATE=57033,DRIVER=3.53.70; nested exception is com.ibm.db2.jcc.b.SqlException: UNsuccesSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON @R_900_6756@0C90088,DRIVER=3.53.70org.springframework.dao.DeadlockLoserDataAccessException: Hibernate flushing: could not update: [sero.chase.integration.beans.bean#1000]; SQL [update SCHm.v***240u_bean set prop1=?,AND @R_616_5550@E NAME MWIAKT1 .SAKT240 .X'000017'. SQLCODE=-913,DRIVER=3.53.70
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:265)
at org.springframework.jdbc.support.AbstractfallBACkSQLExceptionTranslator.translate(AbstractfallBACkSQLExceptionTranslator.java:72)
at org.springframework.orm.hibernate3.HibernatetransactionManager.convertJdbcAccessException(HibernatetransactionManager.java:805)
at org.springframework.orm.hibernate3.HibernatetransactionManager.convertHibernateAccessException(HibernatetransactionManager.java:791)
at org.springframework.orm.hibernate3.HibernatetransactionManager.doCommit(HibernatetransactionManager.java:664)
at org.springframework.transaction.support.AbstractPlatformtransactionManager.processCommit(AbstractPlatformtransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformtransactionManager.commit(AbstractPlatformtransactionManager.java:723)
at org.springframework.transaction.interceptor.transactionAspectSupport.committransactionAfterReturning(transactionAspectSupport.java:393)
at org.springframework.transaction.interceptor.transactionInterceptor.invoke(transactionInterceptor.java:120)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy54.save(Unknown sourcE)
at sero.chase.integration.DaoImpl.ExampleDaoImpl.save(ExampleDaoImpl.java:151)
at sero.chase.business.bOImpl.ExampleBOImpl.save(ExampleBOImpl.java:191)
at sero.chase.servicesImpl.ExampleserviceImpl.submitAnswer(ExampleserviceImpl.java:183)
at sero.chase.business.busDelegatesImpl.ExampleBusDelegateImpl.gradeAnswer(ExampleBusDelegateImpl.java:578)
at sero.chase.presentation.Controller.ExampleController.gradeAnswer(ExampleController.java:326)
at sero.chase.presentation.Controller.ExampleController.SubmitAnswer(ExampleController.java:422)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegaTingMethodAccessorImpl.invoke(DelegaTingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokenamedMethod(MultiActionController.java:471)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handlerequesTinternal(MultiActionController.java:408)
at org.springframework.web.servlet.mvc.AbstractController.handlerequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
at org.springframework.web.servlet.DispatcherServlet.doservice(DispatcherServlet.java:827)
at org.springframework.web.servlet.FrameworkServlet.processrequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.dopost(FrameworkServlet.java:789)
at javax.servlet.http.httpServlet.service(httpServlet.java:763)
at javax.servlet.http.httpServlet.service(httpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1152)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1087)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:118)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilteRMANager.doFilter(WebAppFilteRMANager.java:840)
at com.ibm.ws.webcontainer.filter.WebAppFilteRMANager.doFilter(WebAppFilteRMANager.java:683)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handlerequest(ServletWrapper.java:589)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handlerequest(ServletWrapper.java:534)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handlerequest(CacheServletWrapper.java:90)
at com.ibm.ws.webcontainer.WebContainer.handlerequest(WebContainer.java:751)
at com.ibm.ws.wswebcontainer.WebContainer.handlerequest(WebContainer.java:1478)
at com.ibm.ws.webcontainer.chAnnel.WCChAnnelLink.ready(WCChAnnelLink.java:126)
at com.ibm.ws.http.chAnnel.inbound.impl.httpInboundLink.handleDiscrimination(httpInboundLink.java:458)
at com.ibm.ws.http.chAnnel.inbound.impl.httpInboundLink.handleNewInformation(httpInboundLink.java:387)
at com.ibm.ws.http.chAnnel.inbound.impl.httpICLReadCallBACk.complete(httpICLReadCallBACk.java:102)
at com.ibm.ws.tcp.chAnnel.impl.AioReadCoR_948_11845@pletionListener.futureCompleted(AioReadCoR_948_11845@pletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallBACk(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChAnnelFuture.fireCompletionActions(AsyncChAnnelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
at com.ibm.wS.Util.ThreadPool$Worker.run(ThreadPool.java:1497)
Caused by: com.ibm.db2.jcc.b.SqlException: UNsuccesSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON @R_900_6756@0C90088,DRIVER=3.53.70
at com.ibm.db2.jcc.b.bd.a(bd.java:679)
at com.ibm.db2.jcc.b.bd.a(bd.java:60)
at com.ibm.db2.jcc.b.bd.a(bd.java:127)
at com.ibm.db2.jcc.b.fm.b(fm.java:2132)
at com.ibm.db2.jcc.b.fm.c(fm.java:2115)
at com.ibm.db2.jcc.t4.db.k(db.java:353)
at com.ibm.db2.jcc.t4.db.a(db.java:59)
at com.ibm.db2.jcc.t4.t.a(t.java:50)
at com.ibm.db2.jcc.t4.tb.b(tb.java:200)
at com.ibm.db2.jcc.b.gm.Zb(gm.java:2445)
at com.ibm.db2.jcc.b.gm.e(gm.java:3287)
at com.ibm.db2.jcc.b.gm.Rb(gm.java:612)
at com.ibm.db2.jcc.b.gm.executeupdate(gm.java:595)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeupdate(WSJdbcPreparedStatement.java:768)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2399)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2303)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2603)
at org.hibernate.action.EntityupdateAction.execute(EntityupdateAction.java:92)
at org.hibernate.ENGIne.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.ENGIne.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.ENGIne.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performEXECUTIONS(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventlistener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JTAtransaction.commit(JTAtransaction.java:135)
at org.springframework.orm.hibernate3.HibernatetransactionManager.doCommit(HibernatetransactionManager.java:656)
... 50 more
<beans xmlns="http://www.springframework.org/scheR_948_11845@a/beans"
xmlns:xsi="http://www.w3.org/2001/XMLscheR_948_11845@a-instance" xmlns:p="http://www.springframework.org/scheR_948_11845@a/p"
xmlns:jee="http://www.springframework.org/scheR_948_11845@a/jee"
xmlns:context="http://www.springframework.org/scheR_948_11845@a/context"
xsi:scheR_948_11845@aLOCATIOn="http://www.springframework.org/scheR_948_11845@a/beans
http://www.springframework.org/scheR_948_11845@a/beans/spring-beans-3.0.xsd
http://www.springframework.org/scheR_948_11845@a/context
http://www.springframework.org/scheR_948_11845@a/context/spring-context-3.0.xsd
http://www.springframework.org/scheR_948_11845@a/jee
http://www.springframework.org/scheR_948_11845@a/jee/spring-jee-3.0.xsd">
<jee:jndi-lookup id="queueConFac" @R_616_5550@e-ref="true" jndi-name="jms/queueConFac" />
<jee:jndi-lookup id="receiveQ" @R_616_5550@e-ref="true" jndi-name="jms/receiveQ" />
<jee:jndi-lookup id="sendQ" @R_616_5550@e-ref="true" jndi-name="jms/sendQ" />
<jee:jndi-lookup id="XA" @R_616_5550@e-ref="true" jndi-name="jdbc/XA" />
<jee:jndi-lookup id="nonXA" @R_616_5550@e-ref="true" jndi-name="jdbc/nonXA" />
<bean id="jmsTxManager"
class="org.springframework.transaction.jta.WebSphereUowtransactionManager"/>
<bean id="jmsDestResolver" class=" org.springframework.jms.support.desTination.JndiDesTinationResolver"/>
<bean id="exampleListener" class="sero.chase.integration.JMs.services.JMSReceiver">
<property name="exampleAppBusDelegate" ref="exampleAppBusDelegate" />
</bean>
<bean class="org.springframework.jms.listener.DefaultmessageListenerContainer" >
<property name="connectionFactory" ref="queueConFac" />
<property name="desTination" ref="receiveQ" />
<property name="messageListener" ref="exampleListener" />
<property name="transactionManager" ref="jmsTxManager" />
<property name="taskExecutor" ref="jmsTaskExecutor" />
</bean>
<bean id="jmsTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
<bean id="jmsSender" class="sero.chase.integration.JMs.services.JMSSender">
<property name="connectionFactory" ref="queueConFac" />
<property name="queue" ref="sendQ" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramname" value="language" />
</bean>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
<bean id="messagesource" class="org.springframework.context.support.Reloadable@R_616_5550@eBundlemessagesource">
<property name="basename" value="WEB-INF/@R_616_5550@es/langSpecificText"/>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles-def.xml</value>
</list>
</property>
</bean>
<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/nonXA" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="datasource" ref="nonXA" />
<property name="configLOCATIOn" value="classpath:/hibernate.cfg.nonXA.xml" />
<property name="entityInterceptor">
<bean class="sero.chase.integration.Hibernate.DB2Interceptor"/>
</property>
</bean>
<bean id="session.XA.Factory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="datasource" ref="XA" />
<property name="configLOCATIOn" value="classpath:/hibernate.cfg.XA.xml" />
<property name="entityInterceptor">
<bean class="sero.chase.integration.Hibernate.DB2Interceptor"/>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernatetransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="transaction.XA.Manager"
class="org.springframework.orm.hibernate3.HibernatetransactionManager">
<property name="sessionFactory" ref="session.XA.Factory" />
</bean>
<bean id="transactionAttributesource"
class="org.springframework.transaction.interceptor.NameMatchtransactionAttributesource">
<property name="properties">
<props>
<prop key="*">PROPAGATION_requIRED</prop>
</props>
</property>
</bean>
<!-- App Bean Definitions (Two dao configurations excluding several other bean configurations are displayed below) -->
<bean id="exampleDao"
class="org.springframework.transaction.interceptor.transactionProxyFactoryBean"
lazy-init="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributesource" ref="transactionAttributesource" />
<property name="target">
<bean class="sero.chase.integration.PersistenceImpl.ExamplePersistenceImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</property>
</bean>
<bean id="exampleXADao"
class="org.springframework.transaction.interceptor.transactionProxyFactoryBean"
lazy-init="true">
<property name="transactionManager" ref="transaction.XA.Manager" />
<property name="transactionAttributesource" ref="transactionAttributesource" />
<property name="target">
<bean class="sero.chase.integration.PersistenceImpl.ExamplePersistenceImpl">
<property name="sessionFactory" ref="session.XA.Factory" />
</bean>
</property>
</bean>
</beans>
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
sero.chase.integration.Hibernate.DB2390Dialect
</property>
<property name="hibernate.default_scheR_948_11845@a">SCHM</property>
<property name="query.substitutions">yes 'Y',no 'N'</property>
<property name="jdbc.use_streams_for_binary">true</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="transaction.factory_class">org.hibernate.transaction.JTAtransactionFactory</property>
<property name="jta.Usertransaction">java:comp/Usertransaction</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<!--===============-->
<!-- mapping files -->
<!--===============-->
<mapping @R_616_5550@e="sero/chase/integration/hbm/Example.hbm.xml" />
</session-factory>
</hibernate-configuration>
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
sero.chase.integration.Hibernate.DB2390Dialect
</property>
<property name="hibernate.default_scheR_948_11845@a">SCHMA</property>
<property name="query.substitutions">yes 'Y',no 'N'</property>
<property name="jdbc.use_streams_for_binary">true</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.CMTtransactionFactory </property>
<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereExtendedJTAtransactionLookup</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<!--===============-->
<!-- mapping files -->
<!--===============-->
<mapping @R_616_5550@e="sero/chase/integration/hbm/Example.hbm.xml" />
</session-factory>
</hibernate-configuration>
public void someDeadlockCausingserviceMethod() {
//The read1() method below is going to execuTing a SELEct hql statement on Table A once the call goes all the way down to the Dao layer.
List<SomeBeanInBusinessLayer> beanList = exampleBO.read1();
//Do some processing with the values obtained from the read1() method
...
//
//saveOrupdate() method below is going to execute an update hql statement on Table A once the call goes all the way down to the Dao layer
//where the values from someBeanInBusinessLayer is going to be copied into someBeanInDaoLayer before saving.
exampleBO.saveOrupdate(someBeanInBusinessLayer)
//The read2() method below is going to execute a SELEct hql statement that contains two inner SELEcts (on Table B,C and D) once the call goes all
//the way down to the Dao layer.
List<SomeBeanInBusinessLayer2> beanList2 = exampleBO.read2();
//Do some processing with the values obtained from the read2() method inside a for loop
for(SomeBeanInBusinessLayer2 s: beanList2) {
//Read values from table E
List<SomeBeanInBusinessLayer3> beanList3 = exampleBO.read3(s.getProp2());
SomeBeanInBusinessLayer2 someBeanInBusinessLayer2 = new SomeBeanInBusinessLayer2();
someBeanInBusinessLayer2.setProp1(s.getProp2());
someBeanInBusinessLayer2.setProp1(someBeanInBusinessLayer3.getProp2());
//... more processing...
//Below method will execute an insert hql on Table F
exampleBO.saveOrupdate(someBeanInBusinessLayer2);
SomeBeanInBusinessLayer3 someBeanInBusinessLayer3 = new SomeBeanInBusinessLayer3();
someBeanInBusinessLayer3.setProp1(s.getProp5());
//... more processing...
//Below method will execute an insert hql on Table G
exampleBO.saveOrupdate(someBeanInBusinessLayer3);
}
}
public void anotherDeadlockCausingserviceMethod() {
//The read1() method below is going to execuTing a SELEct hql statement on Table A once the call goes all the way down to the Dao layer.
List<SomeBeanInBusinessLayer> beanList = exampleBO.read1();
//The read2() method below is going to execuTing a SELEct hql statement on Table F once the call goes all the way down to the Dao layer.
List<SomeBeanInBusinessLayer2> beanList2 = exampleBO.read2();
//The read1() method below is going to execuTing a SELEct hql statement on Table G once the call goes all the way down to the Dao layer.
List<SomeBeanInBusinessLayer3> beanList3 = exampleBO.read3();
//Do some processing with the values obtained...
//Do an update on Table A
exampleBO.saveOrupdate(someBeanInBusinessLayer1)
//Do an update on Table F
exampleBO.saveOrupdate(someBeanInBusinessLayer2)
}
public void load(BeanDTO beanDTO) {
Object param1 = beanDTO.getBeanList().getProp1();
Object param2 = beanDTO.getBeanList().getProp2();
List<SomeBeanInDaoLayer> beanList = null;
Object[] params = {param1,param2};
Usertransaction ut = null;
try {
Context context = new InitialContext();
ut = (Usertransaction) context.lookup(Constant.USR_transaCTION);
ut.begin();
beanList = beanDao2.load(params);
ut.commit();
}
catch(Exception E) {
try {
ut.rollBACk();
}
catch(Exception e1) {
if(logger.isDebugEnabled()) {
logger.debug("DB Exception",e1);
}
}
int error = ExceptionResolver.resolve(E);
if(logger.isDebugEnabled()) {
logger.debug("DB Exception",E);
}
beanDTO.setErrorCode(error);
}
beanDTO.setBeanList(beanList);
}
public void save(BeanDTO beanDTO) {
List<SomeBeanInDaoLayer> beanList = beanDTO.getBeanList();
for(SomeBeanInDaoLayer bean: beanList) {
try {
Context context = new InitialContext();
ut = (Usertransaction) context.lookup(Constant.USR_transaCTION);
ut.begin();
beanDao2.save(bean);
ut.commit();
}
catch(Exception E) {
try {
ut.rollBACk();
}
catch(Exception e1) {
if(logger.isDebugEnabled()) {
logger.debug("DB Exception",e1);
}
}
int err = ExceptionResolver.resolve(E);
if(logger.isInfoEnabled()) {
logger.info("DB Exception",E);
}
beanDTO.setErrorCode(err);
}
}
}
public List<Bean> load(Object[] params) {
String hql = "from Bean where beanProp1 = ? and beanProp2 = ?";
return (List<Bean>) getHibernateTemplate().find(hql,params);
}
public void save(Bean bean) {
getHibernateTemplate().saveOrupdate(bean);
}
以上是大佬教程为你收集整理的Spring + Hibernate + DB2 + JTA + XA应用程序中的死锁全部内容,希望文章能够帮你解决Spring + Hibernate + DB2 + JTA + XA应用程序中的死锁所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。