2015-11-08 02:47:22:WARN main atomikos - ERROR IN RECOVERY com.atomikos.datasource.ResourceException: Error in recovery at com.atomikos.datasource.xa.XATransactionalResource.recover(XATransactionalResource.java:596) at com.atomikos.datasource.xa.XATransactionalResource.endRecovery(XATransactionalResource.java:670) at com.atomikos.icatch.imp.TransactionServiceImp.recover(TransactionServiceImp.java:635) at com.atomikos.icatch.imp.TransactionServiceImp.init(TransactionServiceImp.java:741) at com.atomikos.icatch.imp.BaseTransactionManager.init(BaseTransactionManager.java:217) at com.atomikos.icatch.standalone.StandAloneTransactionManager.init(StandAloneTransactionManager.java:104) at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:307) at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:413) at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:90) at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:140) 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:597) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod
解决方案:将数据源AtomikosDataSourceBean替换成AtomikosNonXADataSourceBean。
如:
<bean id="oracleDS" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <description>oracle xa datasource</description> <property name="uniqueResourceName"> <value>oracle_ds</value> </property> <property name="xaDataSourceClassName"> <value>oracle.jdbc.xa.client.OracleXADataSource</value> </property> <property name="xaProperties"> <props> <prop key="user">${oracle.connection.username}</prop> <prop key="password">${oracle.connection.password}</prop> <prop key="URL">${oracle.connection.url}</prop> </props> </property> <property name="testQuery" value="select 1 from dual" /> <property name="poolSize" value="3"/> </bean>
替换成:
<bean id="oracleDS" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean" init-method="init" destroy-method="close" p:uniqueResourceName="oracle_ds" p:testQuery="select 1 from dual "> <property name="driverClassName" value="${oracle.connection.driverClass}" /> <property name="url" value="${oracle.connection.url}" /> <property name="user" value="${oracle.connection.username}" /> <property name="password" value="${oracle.connection.password}" /> <property name="poolSize" value="5" /> <property name="maxPoolSize" value="30" /> </bean>
2015-11-08 10:18:57:WARN main atomikos - Error delegating 'createClob' call java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.createClob()Ljava/sql/Clob; 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:597) at com.atomikos.jdbc.nonxa.AtomikosThreadLocalConnection.invoke(AtomikosThreadLocalConnection.java:306) at $Proxy30.createClob(Unknown Source) 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:597) at org.hibernate.engine.jdbc.JdbcSupportLoader.useContextualLobCreation(JdbcSupportLoader.java:97) at org.hibernate.engine.jdbc.JdbcSupportLoader.loadJdbcSupport(JdbcSupportLoader.java:52) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:118) at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2863) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870) at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:793) at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:715) at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:189) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods 2015-11-08 10:18:57:INFO main org.hibernate.engine.jdbc.JdbcSupportLoader - Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 2015-11-08 10:18:57:INFO main org.hibernate.cfg.SettingsFactory - Database -> name : Oracle
解决方案:
在SessionFacory配置中,加入
<prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
相关推荐
该Demo实现的是一个Web项目下操作两个数据库,实现分布式事务
基于若依项目改造的多模块分布式事务,使用了atomikos进行分布式事务的管理。
集成atomikos实现分布式事务.zip
spring + JTA + atomikos实现分布式事务, 高大上的技术
NULL 博文链接:https://tws502934462.iteye.com/blog/1186912
日常我们会遇到跨数据库的操作,而首当其冲的就是解决事务的问题,本案例就是利用atomikos解决跨数据库事务问题
基于XA的非Maven 基于SpringMVC+Spring+MyBatis+Atomikos的分布式事务处理案例源码,亲自测试可以使用。能SSM多数据源环境和分布式环境下事务处理问题.
spring mybatis atomikos 分布式事务 自己写的小demo 包含依赖包
基于springboot框架实现一些常用的功能
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo,两条数据源,是满足事务唯一性的,看清楚是demo
spring+hibernate+atomikos实现多数据源分布式事务管理
springboot-jpa hibernate,mybatis +atomikos 多数据库事务管理 springboot2.05版本,该项目实现mybatis,hibernate多数据源事务的控制
本文整合了一个spring和atomikos的demo,并且通过案例演示说明atomikos的作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
atomikos jar,spring 分布式事务提交框架
配置Atomikos分布式事务所需jar包
这是一个使用Spring+druid+atomikos的分布式事务demo,若有错误请指出
spring+druid+atomikos分布式事务,多数据源切换!其中包括配置文件
J2EE操作多个数据库时需要考虑分布式事务,Atomikos分布式事务是你不错的选择
Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源,分别向两个不同的数据里面插入数据同时失败和成功,调用接口方式原理一样。
spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制