Atomikos Forum

Exception when initializing UserTransactionManager bean

Hey guys,

I'm trying to integrate Atomikos with an existing (maven) project for a couple of days but had no luck yet...

I'm using:
 - Tomcat 6.0
 - 4 PostgreSQL DBs (we need to do 2PC on these DBS)
 - Hibernate 3.3.2.GA
 - Spring 3.0.0.RELEASE
 - Atomikos 3.6.2

Here is my config:

In Tomcat's context.xml, I've added:

----------------------------------
<Transaction
  factory="com.atomikos.icatch.jta.UserTransactionFactory" />
----------------------------------

In Tomcat's server.xml, I've added the 4 DBs within the <GlobalNamingResources> tag, each DB declaration looks like:

----------------------------------
<Resource name="jdbc/xxxDataSource"
    auth="Container"
    type="com.atomikos.jdbc.AtomikosDataSourceBean"
    factory="com.atomikos.tomcat.BeanFactory"
    uniqueResourceName="jdbc/xxxDataSource"
    xaDataSourceClassName="org.postgresql.xa.PGXADataSource"
    xaProperties.serverName="localhost"
    xaProperties.portNumber="5432"
    xaProperties.databaseName="db-xxx"
    xaProperties.user="postgres"
    xaProperties.password="postgres"
    maxPoolSize="100"
    minPoolSize="50" />
----------------------------------

I also added the DBs to my webapp's context.xml, with something like this for each of them:

----------------------------------
<ResourceLink name="jdbc/xxxDataSource"
      global="jdbc/xxxDataSource"
      type="com.atomikos.jdbc.AtomikosDataSourceBean"/>
----------------------------------

and to my webapp's web.xml (also for each of the DBs):

----------------------------------
  <resource-ref>
    <description>XXX Data Source</description>
    <res-ref-name>jdbc/xxxDataSource</res-ref-name>
    <res-type>
      com.atomikos.jdbc.AtomikosDataSourceBean
    </res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
----------------------------------

In my webapp's Spring file, I have (still for each of the DBs):

----------------------------------
<jee:jndi-lookup id="xxxDataSource"
                jndi-name="jdbc/xxxDataSource"/>
----------------------------------

The Spring file also contains the transaction manager related beans:

----------------------------------
<!-- Construct Atomikos UserTransactionManager,
    needed to configure Spring -->
<bean id="atomikosTransactionManager"
      class="com.atomikos.icatch.jta.UserTransactionManager"
      init-method="init" destroy-method="close">
  <!-- when close is called, should we force
      transactions to terminate or not? -->
  <property name="forceShutdown" value="false" />
</bean>

<!-- Also use Atomikos UserTransactionImp,
    needed to configure Spring -->
<bean id="atomikosUserTransaction"
      class="com.atomikos.icatch.jta.UserTransactionImp">
  <property name="transactionTimeout" value="300" />
</bean>

<bean id="transactionManager"
      class="org.springframework.transaction.jta.JtaTransactionManager">
  <property name="transactionManager"
            ref="atomikosTransactionManager" />
  <property name="userTransaction"
            ref="atomikosUserTransaction" />
</bean>

<!-- enable the configuration of transactional
    behavior based on annotations -->
<tx:annotation-driven
    transaction-manager="transactionManager" />
----------------------------------

and a session factory and a template for each DB:

----------------------------------
<bean id="xxxSessionFactory"
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <qualifier value="xxx"/>
  <property name="dataSource" ref="xxxDataSource"/>
  <property name="packagesToScan">
    <list>
      <value>abc.def.xxx</value>
      <value>abc.ghi.xxx</value>
    </list>
  </property>
  <property name="hibernateProperties">
    <props>
      <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
      <prop key="hibernate.jdbc.batch_size">20</prop>
      <prop key="hibernate.hbm2ddl.auto">validate</prop>
      <prop key="hibernate.show_sql">false</prop>
      <prop key="hibernate.transaction.factory_class">
        com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory
      </prop>
      <prop key="hibernate.transaction.manager_lookup_class">
        com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup
      </prop>
    </props>
  </property>
</bean>

<bean id="xxxHibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="xxxSessionFactory" />
  </bean>
----------------------------------

I'm getting exceptions at webapp startup:

----------------------------------
Using init file: /Developer/apache-tomcat-6.0.20/lib/jta.properties
java.util.Hashtable
java.lang.ClassCastException
java.lang.ClassCastException: java.util.Hashtable
        at com.atomikos.icatch.imp.CoordinatorLogImage.readExternal(CoordinatorLogImage.java:168)
        at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1756)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1717)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at com.atomikos.persistence.imp.SystemLogImage.readExternal(SystemLogImage.java:123)
        at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1756)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1717)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at com.atomikos.persistence.imp.FileLogStream.recover(FileLogStream.java:206)
        at com.atomikos.persistence.imp.StreamObjectLog.init(StreamObjectLog.java:104)
        at com.atomikos.persistence.imp.StateRecoveryManagerImp.init(StateRecoveryManagerImp.java:82)
        at com.atomikos.icatch.imp.TransactionServiceImp.init(TransactionServiceImp.java:699)
        at com.atomikos.icatch.imp.BaseTransactionManager.init(BaseTransactionManager.java:290)
        at com.atomikos.icatch.standalone.StandAloneTransactionManager.init(StandAloneTransactionManager.java:159)
        at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:282)
        at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:389)
        at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:63)
        at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:113)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
..........
----------------------------------

and:

----------------------------------
15:39:40,048 [main] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'atomikosTransactionManager' defined in ServletContext resource [/WEB-INF/pagesController-servlet.xml]: Invocation of init method failed; nested exception is com.atomikos.icatch.SysException: Error in init(): Error in init: Error in recover
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1401)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
...............
        at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: com.atomikos.icatch.SysException: Error in init(): Error in init: Error in recover
        at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:349)
        at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:389)
        at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:63)
        at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:113)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1529)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1468)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398)
        ... 41 more
Caused by: com.atomikos.icatch.SysException: Error in init: Error in recover
        at com.atomikos.icatch.imp.TransactionServiceImp.init(TransactionServiceImp.java:702)
        at com.atomikos.icatch.imp.BaseTransactionManager.init(BaseTransactionManager.java:290)
        at com.atomikos.icatch.standalone.StandAloneTransactionManager.init(StandAloneTransactionManager.java:159)
        at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:282)
        ... 51 more
----------------------------------

I can't find what I'm doing wrong, so any idea, suggestion, link... would be greatly appreciated :)

Thanks,
Phil
Phil Frangioni Send private email
Thursday, March 04, 2010
 
 
Hi,

This looks like an incompatible log file from a previous release.

You can try with deleting the .log file that contains the recovered transactions.

If in production mode then FIRST do this:

-put back the previous release
-start the transaction core and let it recover
-make sure all transaction requests finish

HTH
Guy Pardon Send private email
Thursday, March 04, 2010
 
 
Hey Guy, thanks for the answer!

I'm not sure what you mean by previous release: previous release of ...Atomikos?

The thing is I don't have any log file. I'm trying to setup Atomikos but didn't get it to work yet.

My jta.properties file is located in $TOMCAT_HOME/lib and contains:

----------------------
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
com.atomikos.icatch.log_base_dir=../work
com.atomikos.icatch.output_dir=../work
com.atomikos.icatch.console_log_level=DEBUG
----------------------

and the $TOMCAT_HOME/work directory doesn't contain any log file...
Phil Frangioni Send private email
Thursday, March 04, 2010
 
 
Hi,

OK in that case this looks like a class loader problem. I have no ready-made answer right now, but if you have a budget for developer access (support) then I can arrange a one-on-one remote support session. Let me know.

Thanks
Guy Pardon Send private email
Thursday, March 04, 2010
 
 

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics