【问题标题】:AbstractMethodError in AtomikosDataSourceBean.getMaxLifetime()AtomikosDataSourceBean.getMaxLifetime() 中的 AbstractMethodError
【发布时间】:2016-03-22 14:03:49
【问题描述】:

我在我的项目中使用 atomikos Essentials 来管理交易。部署项目后出现以下异常。我陷入了困境,无法解决。谁能帮我解决这个问题。

线程“Atomikos:0”java.lang.AbstractMethodError 中的异常: com.atomikos.jdbc.AtomikosDataSourceBean.getMaxLifetime()I 在 com.atomikos.datasource.pool.ConnectionPool.removeConnectionsThatExceededMaxLifetime(ConnectionPool.java:286) 在 com.atomikos.datasource.pool.ConnectionPool.access$000(ConnectionPool.java:47) 在 com.atomikos.datasource.pool.ConnectionPool$1.alarm(ConnectionPool.java:92) 在 com.atomikos.timing.PooledAlarmTimer.notifyListeners(PooledAlarmTimer.java:112) 在 com.atomikos.timing.PooledAlarmTimer.run(PooledAlarmTimer.java:99) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

这是我的 atomikos 配置,

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
        http://www.springframework.org/schema/jee
        http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">


<!-- Optional: add a log administrator - To view Active Transaction--> 
<!-- <bean id="localLogAdministrator"  
 class="com.atomikos.icatch.admin.imp.LocalLogAdministrator"/>  -->

<bean id="userTransactionService"  
  class="com.atomikos.icatch.config.UserTransactionServiceImp"  
  init-method="init" destroy-method="shutdownForce"> 
    <constructor-arg> 
        <!-- IMPORTANT: specify all Atomikos properties here --> 
        <props> 
            <prop key="com.atomikos.icatch.service"> 
              com.atomikos.icatch.standalone.UserTransactionServiceFactory 
            </prop> 
        </props> 
    </constructor-arg> 

    <!-- Uncomment to see the java Applet Program to view the active transaction -->
  <!--   <property name="initialLogAdministrators"> 
        <list> 
            <ref bean="localLogAdministrator"/> 
        </list> 
    </property>  -->
</bean> 

<!--  
     Construct Atomikos UserTransactionManager to manage XA datasources 
--> 
<bean id="AtomikosTransactionManager"  
      class="com.atomikos.icatch.jta.UserTransactionManager"  
      init-method="init" destroy-method="close"  
      depends-on="userTransactionService"> 

   <!-- IMPORTANT: disable startup because the userTransactionService above does this --> 
   <property name="startupTransactionService" value="false"/> 

   <!--   
         Decide when close is called,  
         should we force transactions to terminate or not?  
   --> 
   <property name="forceShutdown" value="false" /> 
</bean> 

<!--  
    Atomikos User transaction to set transactionTimeout
-->  
<bean id="AtomikosUserTransaction"  
      class="com.atomikos.icatch.jta.UserTransactionImp"   
      depends-on="userTransactionService"> 
   <property name="transactionTimeout" value="1000" /> 
</bean>


 <!-- To fetch datasource properties from JNDI -->
 <bean id="xadatasourceprops" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties">
            <bean class="java.util.Properties">
                <constructor-arg>
                    <map>
                        <entry key="xaDataSourceClassName">
                            <jee:jndi-lookup jndi-name="java:comp/env/xaDataSourceClassName"/>
                        </entry>
                        <entry key="user">
                            <jee:jndi-lookup jndi-name="java:comp/env/user"/>
                        </entry>
                        <entry key="password">
                            <jee:jndi-lookup jndi-name="java:comp/env/password"/>
                        </entry>
                        <entry key="url">
                            <jee:jndi-lookup jndi-name="java:comp/env/url"/>
                        </entry>
                        <entry key="poolsize">
                            <jee:jndi-lookup jndi-name="java:comp/env/poolsize"/>
                        </entry>
                    </map>
                </constructor-arg>
            </bean>
        </property>
 </bean>


<!-- Configuring Atomikos DataSource Bean for Database-->

 <bean id="atomikosDataSourceBean" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">        
    <!-- set an arbitrary but unique name for the datasource -->       
    <property name="uniqueResourceName"><value>XADBResource</value></property> 

    <!-- set the underlying driver class to use  -->       
   <property name="xaDataSourceClassName">          
        <value>${xaDataSourceClassName}</value>       
    </property>       
    <property name="xaProperties">           
      <!-- set the driver-specific XADataSource properties -->                 
        <props>                         
            <prop key="user">${user}</prop>                         
            <prop key="password">${password}</prop>                         
            <prop key="URL">${url}</prop>                 
        </props>      
    </property>          
    <!-- how many connections in the pool? -->       
     <property name="poolSize" value="${poolsize}"/> 
 </bean> 


<!-- Configuring Atomikos Connection Factory for JMS - ActiveMQ -->

     <bean id="connectionFactory"
        class="org.apache.activemq.spring.ActiveMQXAConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616" />
        <property name="objectMessageSerializationDefered">
          <value>true</value>
          </property>      
     </bean>

        <bean id="jmsListenerContainerFactory"
     class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
     <property name="connectionFactory" ref="connectionFactory" />
     </bean>


       <!--  
                 Configure the JMS connector;  
                 call init to register for recovery!  
       --> 
   <bean id="atomikosConnectionFactoryBean"  
              class="com.atomikos.jms.AtomikosConnectionFactoryBean"  
              init-method="init" destroy-method="close"> 
      <property name="uniqueResourceName" value="amq_jms" /> 
      <property name="xaConnectionFactory" ref="connectionFactory" />
      <property name="poolSize" value="5" />
   </bean>

    <bean id="listenerContainerFactory"
       class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
       <property name="connectionFactory" ref="connectionFactory" />
    </bean>


</beans>

【问题讨论】:

  • 我认为这里没有足够的信息来为您解决问题。您能否提供一些配置来展示您如何在应用程序中配置 Atomikos?
  • @pczeus: 我已经添加了我的 atomikos 配置.. 请检查..
  • 您使用的是什么版本的 Atomikos?
  • 我问的原因是在 atomikos-jdbc v 3.7 及之前的版本中,没有 maxLifeTime 方法。然而,我可以在以后的版本中看到它,这让我认为这是与创建您的问题的版本不同的 2 个 atomikos 库 jar 的问题。
  • 我将 3.8.0 用于 transactions-jta 和 transactions-jdbc。交易 jms 版本 3.9.3。现在我将所有 atomikos jar 更改为 3.9.3。一切都是好的。非常感谢... :-) :-) :-)

标签: java spring gradle atomikos abstract-methods


【解决方案1】:

使用 atomikos-jdbc v3.7 及之前版本,没有maxLifeTime 方法。 以后的版本有方法。因此,这似乎是 2 个 atomikos 库 jar 的问题,它们的版本不同,从而导致您的问题。

尝试使用最新版本更新您的 Atomikos 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多