Spring,XA和WebSphere

时间:2011-03-24 05:48:56

标签: spring websphere xa transactionmanager

我正在尝试在WebSphere v7中的Spring v3应用程序中使用XA事务。

我的应用上下文显示:

<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"/>

我在UOW txn管理器中引用this article表示混合,你会没事的。但它不会那样工作。相反,在以下代码中,消息被破坏性地读取,并且在抛出异常时回滚。

事务逻辑是(在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)
  }
}

有人可以建议我如何在Spring中使用WebSphere的JTA事务管理器吗?

1 个答案:

答案 0 :(得分:0)

首先,我真的希望看到readNextMessage的代码,因为这可能是罪魁祸首。

队列连接工厂是否设置为XA资源。您正在尝试将JTA用于事务,因此据我所知您需要相应地配置消息qcf。

您无需为事务设置JmsTemplate,因为这些事务由QueueConnectionFactory处理。

旁注:如果您只是处理mq,可以跳过UOW JTA提供程序并使用事务处理的JMS会话,这应该可以正常工作。