JMS / Datasource是完整的XA 2PC,由Weblogic JTA事务管理器管理。
有人可以证实上述情况吗?我的逻辑是正确的还是我错过了什么?
请征求意见和建议。
public class MyMessageListener
@Autowired
private ServiceA serviceA;
//I am not declaring this as a transcational.
public void onMessage(Message m) {
serviceA.methodA(m);
}
public class ServiceA {
@Autowired
private ServiceB serviceB;
@Autowired
private DAO dao;
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void methodA() {
try{
String res = ServiceB.methodB(m);
} catch (Exception e) {
log.(e);
}
dao.update(res);
}
public class ServiceB {
@Autowired
private DAO dao;
@Transactional
public void methodB(String m) {
dao.read()
callExtSystem() //this can throw unchecked exception
dao.insert()
}
public class DAO {
@Transactional
public read() {}
@Transactional
public insert(){}
@Transactional(propagation=Propagation.REQUIRES_NEW)
public update(){}
}
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="destination"/>
<property name="messageListener" ref="messageListener"/>
<property name="transactionManager" ref="transactionManager"/> //Weblogic JTA Manager
<property name="concurrentConsumers" value="10"/>
</bean>
<tx:jta-transaction-manager/>