Spring-JMS를 사용하면 DefaultMessageListenerContainer을 통해 외부 트랜잭션 컨텍스트 내에서 메시지를 수신 할 수 있습니다.TransactionManager를 사용하여 Spring JmsTemplate을 사용하여 메시지 작성
그러나 에 문서화 된 방법은 메시지가 JmsTemplate.send(…)
를 통해 내가이 주어진 TransactionManager
를 사용하도록 강제 할 수있는 방법을 볼 수 없습니다 물품.
누구나 올바른 방향으로 나를 가리킬 수 있습니까?
자세한 정보는 : 내가, 내가 아래의 조언을 의심 할 이유가 없다 동안 그래서
org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is oracle.jms.AQjmsException: could not use local transaction commit in a global transaction
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534)
Caused by: oracle.jms.AQjmsException: could not use local transaction commit in a global transaction
at oracle.jms.AQjmsSession.commitNoCheck(AQjmsSession.java:1053)
at oracle.jms.AQjmsSession.commit(AQjmsSession.java:1021)
at org.springframework.jms.support.JmsUtils.commitIfNecessary(JmsUtils.java:217)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:573)
at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:536)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:466)
... 24 more
Caused by: java.sql.SQLException: could not use local transaction commit in a global transaction
at oracle.jdbc.driver.PhysicalConnection.disallowGlobalTxnMode(PhysicalConnection.java:6647)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3635)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3680)
at oracle.jdbc.OracleConnectionWrapper.commit(OracleConnectionWrapper.java:133)
at oracle.jms.AQjmsSession.commitNoCheck(AQjmsSession.java:1049)
... 29 more
: 트랜잭션 관리를 보장하는 것은에서 오라클 AQjmsFactory.getQueueConnectionFactory(dataSource)
결과에 대해 JmsTemplate.write
를 사용하여, (WebSphereUowTransactionManager
)로 볼 수 있습니다 AQ JMS가 커밋을 시도하지 못하게하는 방법을 파악할 수 없으므로 테스트 할 수 없습니다. 내가 더 배울수록 갱신 될 것이다.
감사합니다. Spring이 다른 비 Spring 프로세스에 의해 시작될 때 Spring은 트랜잭션을 찾을 수 있습니까? 내일 알게 될거야 ... – Synesso
@ 시니 오네 : 네, 그렇습니다.JTA 트랜잭션은 Spring이 아닌 컨테이너에 의해 관리된다. – skaffman