2015-11-06 29 views
6

Ich bekomme einen Fehler nach einiger Zeit auf meiner Anwendung, wenn ich einige Daten mit Atomikos und Hibernate übertragen werde.JBOSS: Thread Einfrieren auf Oracle XA-Transaktion mit Atomikos

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.<init>(BranchEnlistedStateHandler.java:59) 
     at com.atomikos.datasource.xa.session.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(<generated>) 
     at org.springframework.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(<generated>) 
     at br.com.empresa.cotador.projeto.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) 

Und dann fangen wir ein „Einfrieren“

"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.<init>(BranchEnlistedStateHandler.java:59) 
      at com.atomikos.datasource.xa.session.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(<generated>) 
      at org.springframework.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(<generated>) 
      at br.com.empresa.cotador.projeto.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) 

...

Es nach einiger Zeit geschieht, wenn die Verbindung aktiv ist, und auch nicht mit diesem geschieht.

Einrichtung - Frühling applicationXML

<context:component-scan base-package="br.com"> 
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
</context:component-scan> 


<bean id="dsDataSourceCotador" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:/comp/env/jdbc/cotacaoDS" /> 
</bean> 
<bean id="entityManagerFactoryCotador" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="puprojetoCotador" /> 
    <property name="dataSource" ref="dsDataSourceCotador"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="br.com.empresa.cotador.projeto.model" /> 

    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="log4j.logger.org.hibernate.type">TRACE</prop> 
      <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> 
      <prop key="hibernate.c3p0.acquire_increment">1</prop> 
      <prop key="hibernate.c3p0.idle_test_period">300</prop> 
      <prop key="hibernate.c3p0.timeout">5000</prop> 
      <prop key="hibernate.c3p0.max_size">10</prop> 
      <prop key="hibernate.c3p0.max_statements">0</prop> 
      <prop key="hibernate.c3p0.min_size">1</prop> 
      <prop key="hibernate.c3p0.acquireRetryAttempts">3</prop> 
      <prop key="hibernate.c3p0.acquireRetryDelay">1000</prop> 
      <prop key="hibernate.jdbc.batch_size">30</prop> 
     </props> 
    </property> 
</bean> 
<bean id="transactionManagerCotador" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactoryCotador"/> 
    <qualifier value="cot"/> 
</bean> 
<tx:annotation-driven transaction-manager="transactionManagerCotador" proxy-target-class="false"/> 



<bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL"> 
     <value>#{systemProperties['empresa.mr.servidor.ACTIVEMQ']}</value> 
    </property> 
    <property name="userName"> 
     <value>#{ systemProperties['empresa.mr.servidor.ACTIVEMQ.USER'] }</value> 
    </property> 
    <property name="password"> 
     <value>#{ systemProperties['empresa.mr.servidor.ACTIVEMQ.PASS'] }</value> 
    </property> 
</bean> 

<bean id="connectionFactory" 
    class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <constructor-arg ref="activeMQConnectionFactory" /> 
</bean> 

<bean id="filaRecepcaoMRPut" class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg index="0" value="#{systemProperties['empresa.mr.fila.RECEPCAO.PUT']}" /> 
</bean> 

<bean id="filaUploadMRPut" class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg index="0" value="#{systemProperties['empresa.mr.fila.UPLOAD.PUT']}" /> 
</bean> 

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
</bean> 



<bean id="queueConnectionFactoryBean" class="com.atomikos.jms.AtomikosConnectionFactoryBean" init-method="init" destroy-method="close"> 
    <property name="uniqueResourceName" value="QUEUE_BROKER" /> 
    <property name="xaConnectionFactory" ref="activeMQXAConnectionFactory" /> 
</bean> 

<bean id="jmsTemplateXA" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="queueConnectionFactoryBean" /> 
    <property name="sessionTransacted" value="true"/> 
</bean> 

<bean id="datasourceCOTXA" class="br.com.empresa.cotador.projeto.util.CustomAtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true"> 
    <property name="uniqueResourceName" value="COTXADBMS" /> 
    <property name="wrapperDataSource"> 
     <bean id="dsDataSourceCOTXA" class="org.springframework.jndi.JndiObjectFactoryBean"> 
      <property name="jndiName" value="java:/comp/env/jdbc/cotacaoDSXA" /> 
     </bean> 
    </property> 
    <qualifier value="cot" /> 
</bean> 

<bean id="entityManagerFactoryCotadorXA" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="puprojetoCotadorXA" /> 
    <property name="jtaDataSource" ref="datasourceCOTXA"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="br.com.empresa.cotador.projeto.model" /> 

    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="javax.persistence.transactionType">jta</prop> 

     </props> 
    </property> 
</bean> 

<bean id="atomikosUserTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce"> 
    <constructor-arg> 
     <props> 
      <prop key="com.atomikos.icatch.service">br.com.empresa.cotador.projeto.util.atomikos.UserTransactionServiceFactory</prop> 
      <prop key="com.atomikos.icatch.log_base_name">CotadorprojetoServiceXA</prop> 
      <prop key="com.atomikos.icatch.output_dir">/app/tmp/</prop> 
      <prop key="com.atomikos.icatch.log_base_dir">/app/tmp/</prop> 
      <prop key="com.atomikos.icatch.default_jta_timeout">600000</prop> 
      <prop key="com.atomikos.icatch.max_timeout">600000</prop> 
     </props> 
    </constructor-arg> 
</bean> 

<bean id="transactionManagerXA" class="org.springframework.transaction.jta.JtaTransactionManager"> 
    <property name="transactionManager"> 
     <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> 
      <property name="forceShutdown" value="true" /> 
     </bean> 
    </property> 
    <property name="userTransaction"> 
     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="atomikosUserTransactionService"> 
      <property name="transactionTimeout" value="600000" /> 
     </bean> 
    </property> 
    <qualifier value="XA"/> 
</bean> 
<tx:annotation-driven transaction-manager="transactionManagerXA" /> 

hat anonyone whow dieses Problem zu vermeiden, beheben oder eine Abhilfe tun?

+0

Ein ähnliches Problem liegt in der [Atomikos Forum] diskutiert (http://fogbugz.atomikos.com/default.asp?community. 6.574.6). Die Lösung besteht darin, 'sessionTransacted = true' in der JMS-Template-Konfiguration zu setzen. –

+0

Ja, aber in diesem Fall ist wirklich ähnlich, aber nicht das gleiche Problem, einmal auf der Atomikos Website können wir eine Lösung auf Oracle JMS-Problem, kein JDBC XA-Transaktionsproblem sehen. –

+0

könnten Sie Ihr Setup beschreiben? Welche Instanzen welcher Software nehmen an Ihrer XA-Transaktion teil? – eis

Antwort

4

Ich hatte vor ein paar Jahren ein ähnliches Problem mit Weblogic als Transaktionsmanager anstelle von Atomikos. In unserem Fall hatten wir aleatorische Ausnahmen mit oracle, in denen die Transaktion in oracle eingefroren war und das Verbindungsobjekt beschäftigt war.

Wir verwendeten Transaktionen JTA, ich in der Config-Datei, die Sie JPA-Transaktionen verwenden, aber ich nicht die persistente Datei sehen

Das Problem war damit verbundene (in denen würden Sie Bewegungsart als JTA konfigurieren) Timeout Transaktionen, konkret, es zu vermeiden:

Sie müssen sicherstellen, dass jede Transaktion Timeout (JTA, JPA, etc ...) niedriger ist als der niedrigste Wert für XA-Transaktionen Timeouts (wie oracle XA-Verbindungen). -> 0 Sie sicherstellen, dass die XA-Timeout wird der Transaktions-Manager Timeout

Hoffnung sein

XASetTransactionTimeout -> true 
XATransactionTimeout -> 0 

Mit XATransactionTimeout:

Um dies zu erreichen, können Sie die folgenden in JDBC-Verbindung Pool-Konfiguration zuweisen hilft!

+0

Ich versuche Ihre Antwort an JBOSS anzupassen, freue mich auf diese [link] (https://developer.jboss.org/thread/ 206366) –

+0

Die Standardwerte für XATransactionTimeout sind 0, aber für XASetTransactionTimeout ist false, versuchen Sie also, diesen Wert zu ändern. –

+0

Das Problem ist nur die Werte, JBOSS gibt es kein XASetTransactionTimeout, und die ungefährsten Werte sind ' wahr' und ' 120 'auf standalone.xml für TAG' 'Ich versuche also, diese Serverwerte zu ergänzen. –

0

Das erste, was ich sagen kann, ist dies keine Antwort und ist die Antwort, kann das Thread Freezing-Problem lösen, aber nicht das eigentliche Problem lösen, dass Thread Freezing maskiert wurde. Für Thread-Freezing-Problem ist in der Tat die maximale Größe des Datenquellenpools, die sich von standalone.xml auf JBOSS unterscheidet. Wenn Sie eine maxPoolSize-Datei in Ihrer Spring-Anwendung erstellen, die von standalone.xml abweicht, hat atomikos Probleme beim Anfordern und Ausleihen von Verbindungen.

Blick application.xml:

<bean id="datasourceCOTXA" class="br.com.empresa.util.CustomAtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true"> 
    <property name="uniqueResourceName" value="COTXADBMS" /> 
    <property name="wrapperDataSource"> 
     <bean id="dsDataSourceCOTXA" class="org.springframework.jndi.JndiObjectFactoryBean"> 
      <property name="jndiName" value="java:/comp/env/jdbc/cotacaoDSXA" /> 
     </bean> 
    </property> 
    <property name="minPoolSize" value="5" /> 
    <property name="maxPoolSize" value="50" /><!-- detail here--> 
    <property name="testQuery" value="select 1 from dual" /> 
    <qualifier value="cot" /> 
</bean> 

nun die Datenquelle auf JBOSS sehen:

<xa-datasource enabled="true" use-java-context="true" pool-name="jdbc/cotacaoDSXA" jndi-name="java:/comp/env/jdbc/cotacaoDSXA"> 
<xa-datasource-property name="URL">... </xa-datasource-property> 
<driver>oracleXA</driver> 
<xa-pool> 
    <min-pool-size>5</min-pool-size> 
    <max-pool-size>30</max-pool-size> 
    <prefill>true</prefill> 
</xa-pool> 
... 
</xa-datasource> 

der Faden friert, weil atomikos zunächst für internen Pool aussehen wird, und die maximale Poolgröße ist höher als Datenquelle, die es einfriert.

Nun, und Sie werden denken "So löst das Problem", und meine Antwort ist, nein, nur nicht lösen, aber aufhören zu maskieren das Problem.

Was passiert, nachdem das Problem mit dem Einfrieren von Threads gelöst wurde? Das Problem ist zwischen XA und JBOSS 6.2, wechselnden Log-Level von ATOMIKOS sehen Sie einige Details darüber, was mit der Verbindung passiert.

ENVIRONMENT A: ATOMIKOS ARBEITS

2015-12-09 16:14:51,647 INFO [ServerService Thread Pool -- 49] atomikos.logging.LoggerFactory - Using Slf4J for logging. - (Slf4jLogger.java:16) 
2015-12-09 16:14:51,714 INFO [ServerService Thread Pool -- 49] atomikos.jdbc.AbstractDataSourceBean - AtomikosDataSoureBean 'COTXADBMS': init... - (Slf4jLogger.java:16) 
2015-12-09 16:14:51,715 WARN [ServerService Thread Pool -- 49] atomikos.jdbc.AbstractDataSourceBean - AtomikosDataSoureBean 'COTXADBMS': testQuery set - pool may be slower/you might want to consider setting maxLifetime instead... - (Slf4jLogger.java:12) 
2015-12-09 16:14:51,764 INFO [ServerService Thread Pool -- 49] atomikos.jdbc.AtomikosDataSourceBean - AtomikosDataSoureBean 'COTXADBMS': initializing with [ xaDataSourceClassName=oracle.jdbc.xa.client.OracleXADataSource, uniqueResourceName=COTXADBMS, maxPoolSize=30, minPoolSize=5, borrowConnectionTimeout=30, maxIdleTime=60, reapTimeout=0, maintenanceInterval=60, testQuery=select 1 from dual, xaProperties=[URL=jdbc:oracle:thin:@SRVODB003D:1527:COTD,user=APPCOT,password=APCTO234], loginTimeout=0, maxLifetime=0] - (Slf4jLogger.java:16) 
2015-12-09 16:14:52,476 INFO [ServerService Thread Pool -- 49] imp.thread.TaskManager - THREADS: using JDK thread pooling... - (Slf4jLogger.java:16) 
2015-12-09 16:14:52,599 INFO [ServerService Thread Pool -- 49] atomikos.jdbc.AbstractDataSourceBean - AtomikosDataSoureBean 'COTXADBMS': getConnection (null)... - (Slf4jLogger.java:16) 
2015-12-09 16:14:52,604 INFO [ServerService Thread Pool -- 49] atomikos.jdbc.AbstractDataSourceBean - AtomikosDataSoureBean 'COTXADBMS': init... - (Slf4jLogger.java:16) 

ENVIRONMENT B: ATOMIKOS nach einiger Zeit nicht ON JBOSS RUNNING ARBEITEN.

2015-12-11 12:45:39,477 INFO [http-/0.0.0.0:8083-10] atomikos.jdbc.AbstractDataSourceBean - AtomikosDataSoureBean 'COTXADBMS': getConnection (null)... - (Slf4jLogger.java:16) 
    2015-12-11 12:45:39,478 INFO [http-/0.0.0.0:8083-10] atomikos.jdbc.AbstractDataSourceBean - AtomikosDataSoureBean 'COTXADBMS': init... - (Slf4jLogger.java:16) 
    2015-12-11 12:50:39,966 WARN [Atomikos:12] icatch.imp.ActiveStateHandler - Timeout/setRollbackOnly of ACTIVE coordinator ! - (Slf4jLogger.java:12) 
    2015-12-11 13:01:06,128 WARN [http-/0.0.0.0:8083-10] datasource.pool.ConnectionPool - atomikos connection pool 'COTXADBMS': error creating proxy of connection an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s) - (Slf4jLogger.java:24) 
    com.atomikos.datasource.pool.CreateConnectionException: Error executing testQuery 
     at com.atomikos.jdbc.AtomikosXAPooledConnection.testUnderlyingConnection(AtomikosXAPooledConnection.java:128) 
     at com.atomikos.datasource.pool.AbstractXPooledConnection.createConnectionProxy(AbstractXPooledConnection.java:71) 
     at com.atomikos.datasource.pool.ConnectionPool.retrieveFirstAvailableConnection(ConnectionPool.java:209) 
     at com.atomikos.datasource.pool.ConnectionPool.retrieveFirstAvailableConnectionAndGrowPoolIfNecessary(ConnectionPool.java:173) 
     at com.atomikos.datasource.pool.ConnectionPool.findOrWaitForAnAvailableConnection(ConnectionPool.java:160) 
     at com.atomikos.datasource.pool.ConnectionPool.borrowConnection(ConnectionPool.java:151) 
     at com.atomikos.jdbc.AbstractDataSourceBean.getConnection(AbstractDataSourceBean.java:342) 
     at com.atomikos.jdbc.AbstractDataSourceBean.getConnection(AbstractDataSourceBean.java:394) 
     at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70) 
    ... 
     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.doInvoke(InvocableHandlerMethod.java:222) 
     at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
     at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) 
     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) 
     at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
     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:121) 
     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) 
    Caused by: java.sql.SQLRecoverableException: Erro de ES: Connection timed out 
     at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:886) 
     at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167) 
     at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289) 
     at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1909) 
     at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1871) 
     at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:318) 
     at com.atomikos.jdbc.AtomikosXAPooledConnection.testUnderlyingConnection(AtomikosXAPooledConnection.java:124) 
     ... 108 more 
    Caused by: java.net.SocketException: Connection timed out 
     ... 

Sie denken kann, „Datenbank kann der Mensch nicht verbinden!“, Haben wir zwei Datenquellen derselben Instanz, die gleiche Basis, denselben Benutzer verbindet, wobei die erste Datenquelle ist nicht XA und arbeitet daran, die zweite richtig, kann nach einiger Zeit keine Verbindung herstellen.

Detail: Auch wenn Sie JBOSS nicht verwendet haben, bleibt die Datenquelle nach einiger Zeit stehen. Diese Umgebungen sind JBOSS AS 6.2

Irgendwie auf der Umgebung B gibt es einen kleinen Unterschied in JBOSS und XA, der diesen Fehler verursacht, nachdem JBOSS neu gestartet wird, hört das Problem auf. Nach einiger Zeit läuft die XA-Verbindung nicht mehr, selbst wenn Sie Transaktionen senden oder nicht. Jetzt ist die Frage, was kann es den Thread und die Verbindung in JBOSS blockieren?

Wenn Sie sehen wollen, welche Codezeile Atomikos friert es hier überprüfen: http://grepcode.com/file/repo1.maven.org/maven2/com.atomikos/transactions-jdbc/3.6.4/com/atomikos/jdbc/AtomikosXAPooledConnection.java#124