开发者

Spring, XA and WebSphere

开发者 https://www.devze.com 2023-02-19 04:24 出处:网络
I am trying to get XA transactions working in a Spring v3 application inside WebSphere v7. My App Context reads:

I am trying to get XA transactions working in a Spring v3 application inside WebSphere v7.

My App Context reads:

<bean id="jmsConnectionFactory" 
     开发者_高级运维   class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jms/MQConnectionFactory"/>
    <property name="resourceRef" value="true"/>
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="jmsConnectionFactory"/>
</bean>

<jee:jndi-lookup id="myDB" jndi-name="jdbc/myDB"/>

<bean id="txManager"
    class="org.springframework.transaction.jta.WebSphereUowTransactionManager" />

<tx:annotation-driven transaction-manager="txManager"/>

I'm referencing this article that says mix in the UOW txn manager and you'll be fine. But it doesn't work that way. Instead, in the following code, the message is destructively read and is not rolled back when an exception is thrown.

The transactional logic is (in scala):

@Transactional(rollbackFor = Array(classOf[Throwable]))
def processNextMessage(category: String) = {
  val maybeMessage = readNextMessage(category) // <- this is a destructive read

  for (message <- maybeMessage) {
    // this is temporary code for testing
    throw new RuntimeException("blaaaaaah")
    // end temporary code

    // sendToQueue(message, queue)
    // writeToMessageStore(message)
  }
}

Can anyone advise how I can use WebSphere's JTA transaction manager with Spring?


First of all, I would really like to see the code for readNextMessage as that may be the culprit.

Is the queue connection factory set up as an XA resource. You are trying to use JTA for transactions, so as far as I know you need to configure the message qcf accordingly.

You do not have to setup the JmsTemplate for transactions, as these are handled by the QueueConnectionFactory.

On a side note: if you are just dealing with mq, you can skip the UOW JTA provider and use transacted JMS sessions, which should work fine.

0

精彩评论

暂无评论...
验证码 换一张
取 消