2015-11-06 32 views
6

È probabile che si verifichi un errore dopo la mia applicazione quando trasmetto alcuni dati utilizzando atomikos e hibernate.JBOSS: blocco del congelamento su Oracle XA Transaction con 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) 

E poi prendere un "congelare"

"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) 

...

Succede dopo qualche tempo, quando la connessione è attiva, e anche se non usando questo accade.

Setup - primavera 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" /> 

fa anonyone whow Per evitare questo problema, correzione o fare una soluzione?

+0

Un problema simile è discusso nel [Atomikos forum] (http://fogbugz.atomikos.com/default.asp?community. 6.574.6). La soluzione è impostare 'sessionTransacted = true' nella configurazione del modello JMS. –

+0

Sì, ma in questo caso è molto simile, ma non è lo stesso problema, una volta sul sito Web di Atomikos possiamo vedere una soluzione sul problema di Oracle JMS, non un problema di transazione XA JDBC. –

+0

potresti descrivere la tua configurazione? quali istanze di quali software partecipano alla tua transazione XA? – eis

risposta

4

Ho avuto un problema simile qualche anno fa usando weblogic come gestore delle transazioni invece di atomikos. Nel nostro caso abbiamo avuto eccezioni aleatorie con oracle in cui la transazione si era bloccata in oracle e si è occupata dell'oggetto di connessione.

Abbiamo usato le transazioni JTA, vedo nel file di configurazione che si sta utilizzando le transazioni JPA, ma Io non vedere il file persistenti (in cui si desidera configurare il tipo di transazione come JTA)

Il problema era correlato alle operazioni di timeout, concretamente per evitarlo:

è necessario assicurarsi che ogni timeout di transazione (JTA, JPA, ecc ...) è inferiore al valore più basso per transazioni XA timeout (come connessioni Oracle XA).

Per raggiungere questo obiettivo, è possibile assegnare in configurazione pool di connessione JDBC il seguente:

XASetTransactionTimeout -> true 
XATransactionTimeout -> 0 

Con XATransactionTimeout -> 0 si assicura che il timeout XA sarà il timeout di transazione direttore

Speranza aiuta!

+0

Sto cercando di adattare la risposta a JBOSS, in attesa di questo [collegamento] (https://developer.jboss.org/thread/ 206366) –

+0

I valori predefiniti per XATransactionTimeout sono 0, ma per XASetTransactionTimeout è falso, quindi provare a modificare questo valore. –

+0

Il problema sono solo i valori, JBOSS non esiste XASetTransactionTimeout ei valori più approssimativi sono ' true' e ' 120 'su standalone.xml per TAG' 'così sto cercando di aggiungere a questi valori del server. –

0

Prima cosa posso dire che questa non è una risposta ed è la risposta, può risolvere il problema di Thread Freezing, ma non ha risolto il vero problema che Thread Freezing stava mascherando. Per il problema di blocco del thread si tratta in realtà della dimensione massima del pool di dati che differisce da standalone.xml su JBOSS. Se crei un maxPoolSize sulla tua applicazione Spring diversa da standalone.xml, atomikos avrà problemi a richiedere e prendere in prestito connessioni.

sguardo 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> 

ora vedere l'origine dati su JBoss:

<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> 

il filo si blocca a causa atomikos cercheranno piscina interna prima, e la dimensione massima del pool è superiore origine dati, si congela.

Bene, e penserai "Quindi questo risolve il problema", e la mia risposta è, no, proprio non risolve, ma smetti di mascherare il problema.

Cosa succede dopo aver risolto il problema di congelamento del filo? Il problema è tra XA e JBOSS 6.2, cambiando il livello di registro di ATOMIKOS vedrete alcuni dettagli su cosa succede con la connessione.

AMBIENTE A: ATOMIKOS LAVORO

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) 

AMBIENTE B: ATOMIKOS non funziona dopo qualche tempo su JBoss RUNNING.

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 
     ... 

Si può pensare, "Database non può collegarsi uomo!", Abbiamo due origini dati che si connettono al stessa istanza, stessa base, stesso utente, la prima origine dati non è XA e funziona correttamente, il secondo non riesco a connettermi dopo un po 'di tempo.

Dettagli: anche se non si utilizza JBOSS, l'origine dati si blocca dopo un po 'di tempo. Questi ambienti sono JBOSS AS 6.2

In qualche modo sull'ambiente B, c'è qualche piccola differenza in JBOSS e XA che causa questo errore, dopo il riavvio di JBOSS, il problema si interrompe. Dopo un po 'di tempo, la connessione XA smette di funzionare, anche se si inviano transazioni o no. Ora è la domanda, cosa può bloccare il thread e la connessione in JBOSS?

Se volete vedere che cosa linea di codice di congela Atomikos controllare qui: http://grepcode.com/file/repo1.maven.org/maven2/com.atomikos/transactions-jdbc/3.6.4/com/atomikos/jdbc/AtomikosXAPooledConnection.java#124