2014-07-25 3 views
0

코어 Java 응용 프로그램에서 분산 트랜잭션 관리자를 사용할 수 있습니까? 어떤 컨테이너에서도 실행되지 않습니까?핵심 Java 응용 프로그램의 분산 트랜잭션 관리

JMS 대기열에서 메시지를 읽고 데이터베이스에 씁니다. 데이터베이스에 쓰는 것이 실패하면 완료 트랜잭션이 롤백되어야합니다. JOTM을 사용하려고 생각하고 있지만 구성 방법을 모르겠습니다. 또한 응용 프로그램이 어떤 서버에서도 실행되지 않기 때문에 그러한 종류의 구성이 가능한지 확실하지 않습니다. 어떤 제안이라도 도움이 될 것입니다. 미리 감사드립니다.

+0

저는 14 년 이상 * core * Java로 서버를 작성해 왔으며 일반 Java로는 약간의 코딩으로이 작업을 수행 할 수 있습니다. –

+0

감사합니다. 당신이 저에게 동일한 견본을 제공해 줄 수 있다면 정말 도움이 될 것입니다. – Partha

+0

이 작업을 수행하는 코드를 작성하는 경향이 있지만 약 5 년 동안은 그렇지 않습니다. 그러나 JMS는 트랜잭션이되도록 설정할 수 있으며 메시지를 커밋()할지 여부를 결정합니다. –

답변

1

Spring blog entry은 컨테이너 외부에서 JTA를 구성하는 방법을 설명합니다. JOTM은 설명 된 옵션 중 하나입니다.

당신의 경우에는 ChainedTransactionManager를 사용하여 JTA를 시뮬레이션하는 것이 더 간단 할 것입니다. 최소한의 Spring 설정으로 거의 동일한 효과를 얻습니다. 아래와 같이 구성한 다음 청취자에 @Transactional(value="chainedTransactionManager")을 지정하십시오.

@Bean 
JmsTransactionManager jmsTransactionManager(ConnectionFactory connectionFactory) { 
    JmsTransactionManager manager = new JmsTransactionManager(); 
    manager.setConnectionFactory(connectionFactory); 
    return manager; 
} 

@Bean 
JpaTransactionManager jpaTransactionManager() { 
    JpaTransactionManager manager = new JpaTransactionManager(); 
    return manager; 
} 

//Encapsulating TM used to commit/rollback JMS and JPA together, without overhead of JTA. Note that JMS should be listed first, as transactions commit in reverse order and JMS less likely to fail. 
@Bean 
ChainedTransactionManager chainedTransactionManager(JmsTransactionManager jmsTransactionManager, JpaTransactionManager jpaTransactionManager){ 
    ChainedTransactionManager manager = new ChainedTransactionManager(jmsTransactionManager, jpaTransactionManager); 
    return manager; 
} 
+0

user392909, 이전 스프링에서 JOTM을 사용하여 분산 트랜잭션 관리를 사용했습니다. 하지만 여기에서는 스프링을 사용하지 않습니다. 그건 우리가 컨테이너가 없다는 것을 의미합니다. 애플리케이션이 컨테이너 내부에서 실행되지 않는 경우 분산 트랜잭션 (JOTM 또는 다른 도구를 사용하여)을 처리 할 수있는 방법이 있는지 알고 싶습니다. – Partha

+0

아, 죄송합니다. 질문을 잘못 읽고 전에 물어 본 것을하지 않았습니다. JOTM이 아닌 Atomikos로 시작하는 것이 더 널리 사용되고 최근에 업데이트 된 것으로 보입니다. 다음은 그 예입니다 : http://www.atomikos.com/Documentation/GettingStartedWithTransactionsEssentials#Simple_JTA_example – mrcrabs

관련 문제