微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – JBOSS:使用Atomikos在Oracle XA Transaction上冻结线程

当我使用atomikos和hibernate传输一些数据时,我在应用程序上的某个时间后出现错误.

2015-11-06 07:11:56,353 WARN [http-/0.0.0.0:8083-10] datasource.xa.XAResourceTransaction - XA resource 'COTXADBMS': resume for XID '31302E3235332E312E35322E746D30303030313030303939:31302E3235332E312E35322E746D31' raised -7: the XA resource has become unavailable - (Slf4jLogger.java:24) 
oracle.jdbc.xa.OracleXAException
        at oracle.jdbc.xa.OracleXAResource.checkerror(OracleXAResource.java:1110)
        at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:240)
        at com.atomikos.datasource.xa.XAResourceTransaction.resume(XAResourceTransaction.java:427)
        at com.atomikos.datasource.xa.session.BranchEnlistedStateHandler.notinBranchStateHandler.checkEnlistBeforeUse(notinBranchStateHandler.java:64)
        at com.atomikos.datasource.xa.session.TransactionContext.checkEnlistBeforeUse(TransactionContext.java:88)
        at com.atomikos.datasource.xa.session.SessionHandleState.notifyBeforeUse(SessionHandleState.java:179)
        at com.atomikos.jdbc.AtomikosConnectionProxy.enlist(AtomikosConnectionProxy.java:223)
        at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:142)
        at com.sun.proxy.$Proxy101.prepareStatement(UnkNown Source)
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:161)
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182)
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159)
        at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1858)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1835)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1815)
        at org.hibernate.loader.Loader.doQuery(Loader.java:899)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
        at org.hibernate.loader.Loader.loadEntity(Loader.java:2117)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
        at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3927)
        at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:460)
        at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:429)
        at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:206)
        at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:262)
        at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
        at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1092)
        at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:175)
        at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2476)
        at org.hibernate.internal.SessionImpl.get(SessionImpl.java:992)
        at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:271)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:151)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:914)
        at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:898)
        at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:902)
        at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:889)
        at sun.reflect.GeneratedMethodAccessor227.invoke(UnkNown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:342)
        at com.sun.proxy.$Proxy112.merge(UnkNown Source)
        at sun.reflect.GeneratedMethodAccessor227.invoke(UnkNown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:289)
        at com.sun.proxy.$Proxy112.merge(UnkNown Source)
        at br.com.empresa.cotador.projeto.component.EfetivacaoComponent.transmitir(EfetivacaoComponent.java:390)
        at br.com.empresa.cotador.projeto.component.EfetivacaoComponent$$FastClassBySpringcglib$$55efafb6.invoke(cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.invokeJoinpoint(cglibAopProxy.java:708)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:644)
        at br.com.empresa.cotador.projeto.component.EfetivacaoComponent$$EnhancerBySpringcglib$$9f2cee0f.transmitir(eto.controller.emissao.EfetivacaoController.transmitirProposta(EfetivacaoController.java:218)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.springframework.web.method.support.invocableHandlerMethod.invoke(invocableHandlerMethod.java:215)
        at org.springframework.web.method.support.invocableHandlerMethod.invokeForRequest(invocableHandlerMethod.java:132)
        at org.springframework.web.servlet.mvc.method.annotation.ServletinvocableHandlerMethod.invokeAndHandle(ServletinvocableHandlerMethod.java:104)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
        at org.springframework.web.servlet.dispatcherServlet.dodispatch(dispatcherServlet.java:938)
        at org.springframework.web.servlet.dispatcherServlet.doService(dispatcherServlet.java:870)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
        at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:164)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
        at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:202)
        at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:180)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:420)
        at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
        at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
        at java.lang.Thread.run(Thread.java:745)

然后我们抓住了“冻结”

"http-/0.0.0.0:8083-2" daemon prio=10 tid=0x0000000001914800 nid=0x7640 runnable [0x0000000045ff8000]
   java.lang.Thread.State: RUNNABLE
            at java.net.socketInputStream.socketRead0(Native Method)
            at java.net.socketInputStream.read(SocketInputStream.java:152)
            at java.net.socketInputStream.read(SocketInputStream.java:122)
            at oracle.net.ns.Packet.receive(Packet.java:300)
            at oracle.net.ns.DataPacket.receive(DataPacket.java:106)
            at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)
            at oracle.net.ns.NetInputStream.read(NetInputStream.java:260)
            at oracle.net.ns.NetInputStream.read(NetInputStream.java:185)
            at oracle.net.ns.NetInputStream.read(NetInputStream.java:102)
            at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
            at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
            at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
            at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)
            at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
            at oracle.jdbc.driver.T4CTTIOtxse.doOTXSE(T4CTTIOtxse.java:163)
            at oracle.jdbc.driver.T4CXAResource.doStart(T4CXAResource.java:186)
            - locked <0x000000078e7f7a40> (a oracle.jdbc.driver.T4CConnection)
            at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:228)
            - locked <0x000000078e7f7a40> (a oracle.jdbc.driver.T4CConnection)
            at com.atomikos.datasource.xa.XAResourceTransaction.resume(XAResourceTransaction.java:427)
            - locked <0x00000007ea3500c8> (a com.atomikos.datasource.xa.XAResourceTransaction)
            at com.atomikos.datasource.xa.session.BranchEnlistedStateHandler.notinBranchStateHandler.checkEnlistBeforeUse(notinBranchStateHandler.java:64)
            at com.atomikos.datasource.xa.session.TransactionContext.checkEnlistBeforeUse(TransactionContext.java:88)
            - locked <0x00000007ea1f2418> (a com.atomikos.datasource.xa.session.TransactionContext)
            at com.atomikos.datasource.xa.session.SessionHandleState.notifyBeforeUse(SessionHandleState.java:179)
            - locked <0x000000078e807730> (a com.atomikos.datasource.xa.session.SessionHandleState)
            at com.atomikos.jdbc.AtomikosConnectionProxy.enlist(AtomikosConnectionProxy.java:223)
            at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:142)
            at com.sun.proxy.$Proxy123.prepareStatement(UnkNown Source)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:161)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159)
            at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1858)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1835)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1815)
            at org.hibernate.loader.Loader.doQuery(Loader.java:899)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
            at org.hibernate.loader.Loader.loadEntity(Loader.java:2117)
            at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
            at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
            at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3927)
            at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:460)
            at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:429)
            at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:206)
            at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:262)
            at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
            at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1092)
            at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:175)
            at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2476)
            at org.hibernate.internal.SessionImpl.get(SessionImpl.java:992)
            at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:271)
            at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:151)
            at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
            at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:914)
            at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:898)
            at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:902)
            at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:889)
            at sun.reflect.GeneratedMethodAccessor256.invoke(UnkNown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:342)
            at com.sun.proxy.$Proxy138.merge(UnkNown Source)
            at sun.reflect.GeneratedMethodAccessor256.invoke(UnkNown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:289)
            at com.sun.proxy.$Proxy138.merge(UnkNown Source)
            at br.com.empresa.cotador.projeto.component.EfetivacaoComponent.transmitir(EfetivacaoComponent.java:390)
            at br.com.empresa.cotador.projeto.component.EfetivacaoComponent$$FastClassBySpringcglib$$55efafb6.invoke(cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
            at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.invokeJoinpoint(cglibAopProxy.java:708)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
            at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
            at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
            at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:644)
            at br.com.empresa.cotador.projeto.component.EfetivacaoComponent$$EnhancerBySpringcglib$$4b6893af.transmitir(eto.controller.emissao.EfetivacaoController.transmitirProposta(EfetivacaoController.java:218)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at org.springframework.web.method.support.invocableHandlerMethod.invoke(invocableHandlerMethod.java:215)

它发生在连接处于活动状态的一段时间后,即使不使用这种情况也会发生.

设置 – spring applicationXML

diobjectfactorybean">
    factorybean">
    etoCotador" />
    vendorAdapter">
       vendor.HibernateJpavendorAdapter" />
    eto.model" />

    sql">truebrokerURL">
        stemProperties['empresa.mr.servidor.ACTIVEMQ']}stemProperties['empresa.mr.servidor.ACTIVEMQ.USER'] }stemProperties['empresa.mr.servidor.ACTIVEMQ.PASS'] }omrPut" class="org.apache.activemq.command.ActiveMQQueue">
    stemProperties['empresa.mr.fila.RECEPCAO.PUT']}" />
stemProperties['empresa.mr.fila.UPLOAD.PUT']}" />
jmstemplate" class="org.springframework.jms.core.jmstemplate">
    factorybean" class="com.atomikos.jms.AtomikosConnectionfactorybean" init-method="init" destroy-method="close">
    broKER" />
    jmstemplateXA" class="org.springframework.jms.core.jmstemplate">
    factorybean" />
    eto.util.CustomAtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true">
    diobjectfactorybean">
            factorybean">
    etoCotadorXA" />
    vendorAdapter">
       vendor.HibernateJpavendorAdapter" />
    eto.model" />

    sql">truefig.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce">
    eto.util.atomikos.UserTransactionServiceFactoryetoServiceXA

anonyone是谁避免这个问题,修复或做一个变通方法

最佳答案
几年前我使用weblogic作为事务管理器而不是atomikos时遇到了类似的问题.在我们的例子中,我们在oracle中有一些例外情况,其中事务已经在oracle中冻结并且忙于连接对象.

我们使用了JTA事务,我在配置文件中看到你正在使用JPA事务,但是我没有看到持久性文件(在其中你将事务类型配置为JTA)

问题与超时事务有关,具体要避免它:

You have to ensure that any transaction timeout (JTA,JPA,etc…)
is lower than the lowest value for XA transactions timeouts (like
oracle XA connections).

要实现此目的,您可以在JDBC连接池配置中分配以下内容

XASetTransactionTimeout -> true 
XATransactionTimeout -> 0

使用XATransactionTimeout – > 0确保XA超时将是事务管理器超时

希望有帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐