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