Oracle 이 XA 를 위한 구성이 되어있지 않을 경우 다음과 같은 오류가 발생할 수 있다.
error
WARN[ 12 - 11 - 09 16 : 09 : 38 ]-Error in recovery (com.atomikos.logging.Slf4jLogger.logWarning(Slf4jLogger.java: 24 )) javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java: 709 ) at com.atomikos.datasource.xa.XATransactionalResource.recover(XATransactionalResource.java: 579 ) at com.atomikos.datasource.xa.XATransactionalResource.endRecovery(XATransactionalResource.java: 669 ) at com.atomikos.icatch.imp.TransactionServiceImp.recover(TransactionServiceImp.java: 604 ) at com.atomikos.datasource.xa.XATransactionalResource.setRecoveryService(XATransactionalResource.java: 495 ) at com.atomikos.icatch.system.Configuration.installRecoveryService(Configuration.java: 252 ) at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java: 269 ) at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java: 405 ) at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java: 569 ) 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(AbstractAutowireCapableBeanFactory.java: 1546 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java: 1487 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java: 1419 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java: 518 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java: 455 ) at org.springframework.beans.factory.support.AbstractBeanFactory$ 1 .getObject(AbstractBeanFactory.java: 293 ) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java: 222 ) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java: 290 ) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java: 192 ) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java: 283 ) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java: 192 ) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java: 585 ) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java: 895 ) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 425 ) at org.springframework.test.AbstractSingleSpringContextTests.createApplicationContext(AbstractSingleSpringContextTests.java: 216 ) at org.springframework.test.AbstractSingleSpringContextTests.loadContextLocations(AbstractSingleSpringContextTests.java: 192 ) at org.springframework.test.AbstractSingleSpringContextTests.loadContext(AbstractSingleSpringContextTests.java: 172 ) at org.springframework.test.AbstractSpringContextTests.getContext(AbstractSpringContextTests.java: 133 ) at org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java: 101 ) at junit.framework.TestCase.runBare(TestCase.java: 132 ) at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java: 79 ) at junit.framework.TestResult$ 1 .protect(TestResult.java: 110 ) at junit.framework.TestResult.runProtected(TestResult.java: 128 ) at junit.framework.TestResult.run(TestResult.java: 113 ) at junit.framework.TestCase.run(TestCase.java: 124 ) at junit.framework.TestSuite.runTest(TestSuite.java: 243 ) at junit.framework.TestSuite.run(TestSuite.java: 238 ) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java: 83 ) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java: 49 ) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java: 38 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 467 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 683 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 390 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java: 197 ) WARN[ 12 - 11 - 09 16 : 09 : 38 ]-ERROR IN RECOVERY (com.atomikos.logging.Slf4jLogger.logWarning(Slf4jLogger.java: 24 )) com.atomikos.datasource.ResourceException: Error in recovery at com.atomikos.datasource.xa.XATransactionalResource.recover(XATransactionalResource.java: 590 ) at com.atomikos.datasource.xa.XATransactionalResource.endRecovery(XATransactionalResource.java: 669 ) at com.atomikos.icatch.imp.TransactionServiceImp.recover(TransactionServiceImp.java: 604 ) at com.atomikos.datasource.xa.XATransactionalResource.setRecoveryService(XATransactionalResource.java: 495 ) at com.atomikos.icatch.system.Configuration.installRecoveryService(Configuration.java: 252 ) at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java: 269 ) at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java: 405 ) at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java: 569 ) 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(AbstractAutowireCapableBeanFactory.java: 1546 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java: 1487 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java: 1419 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java: 518 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java: 455 ) at org.springframework.beans.factory.support.AbstractBeanFactory$ 1 .getObject(AbstractBeanFactory.java: 293 ) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java: 222 ) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java: 290 ) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java: 192 ) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java: 283 ) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java: 192 ) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java: 585 ) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java: 895 ) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 425 ) at org.springframework.test.AbstractSingleSpringContextTests.createApplicationContext(AbstractSingleSpringContextTests.java: 216 ) at org.springframework.test.AbstractSingleSpringContextTests.loadContextLocations(AbstractSingleSpringContextTests.java: 192 ) at org.springframework.test.AbstractSingleSpringContextTests.loadContext(AbstractSingleSpringContextTests.java: 172 ) at org.springframework.test.AbstractSpringContextTests.getContext(AbstractSpringContextTests.java: 133 ) at org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java: 101 ) at junit.framework.TestCase.runBare(TestCase.java: 132 ) at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java: 79 ) at junit.framework.TestResult$ 1 .protect(TestResult.java: 110 ) at junit.framework.TestResult.runProtected(TestResult.java: 128 ) at junit.framework.TestResult.run(TestResult.java: 113 ) at junit.framework.TestCase.run(TestCase.java: 124 ) at junit.framework.TestSuite.runTest(TestSuite.java: 243 ) at junit.framework.TestSuite.run(TestSuite.java: 238 ) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java: 83 ) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java: 49 ) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java: 38 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 467 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 683 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 390 ) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java: 197 ) |
또한 오라클 최신 드라이버를 항상 사용할 것을 권장한다. (오라클 9에 접속할 때도 마찬가지)
pom.xml
< dependency > < groupId >com.oracle</ groupId > < artifactId >ojdbc6</ artifactId > < version >11.2.0.3</ version > </ dependency > ... < repositories > < repository > < id >codelds</ id > </ repository > </ repositories > |
그리고 XA 를 위한 오라클 설정은 다음과 같다.
grant.sql
grant select on sys.dba_pending_transactions to < user name >; grant select on sys.pending_trans$ to < user name >; grant select on sys.dba_2pc_pending to < user name >; grant execute on sys.dbms_system to < user name >; |
참조 문서