1

누군가가이 오류를 도와 줄 수 있습니까? 또는 JTA Transactionmanager 사용 방법에 대한 특정 샘플 코드?Spring JTA 트랜잭션을 구성하는 방법은 무엇입니까?

저는 멀티 데이터베이스를 사용하고 있습니다. 메인 데이터베이스는 Xml에 Transactionmanager, 으로 정의되어 있으며, 나머지 DB는 java 파일의 GenericApplicationContext로 생성됩니다. XML에서

JtaTransactionManager를 설정처럼이

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" autowire="constructor"> 
    </bean> 
<tx:annotation-driven/> 

그리고 오류 코드 ..

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/spring/db.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName' 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977) 
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 
+0

어떤 응용 프로그램 서버를 사용하고 있습니까? JEE 하나 또는 Tomcat/Jetty? – abalogh

+0

Tomcat을 서버로 사용하고 있습니다. – Andrew

+0

언제이 오류가 발생합니까? – abalogh

답변

0

당신은 JTA 트랜잭션 관리자를 사용하는 경우, 당신이 필요합니다
1. 웹 서버 지원 JTA를, JBoss, Weblogic과 같이.
2. 또는 atomikos와 같은 JTA lib의 구현.

환경 (바람둥이 사용)에서는 JTA 구현 lib를 사용해야합니다. 당신은 당신이 봄 부팅을 사용하는 경우 구성에서 작업을 수행 할 필요가 없습니다,

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jta-atomikos</artifactId> 
    </dependency> 

: 그리고 당신은 봄 부팅을 사용하는 경우처럼, 치어에 추가합니다.

그러나 데이터 소스를 XADataSourceWrapper으로 묶어야합니다. 이 속성을 autowire하고 xaDataSourceWrapper.wrapDataSource()을 사용하여 XA 데이터 소스를 데이터 소스로 만들 수 있습니다.