WebSpherev7内のSpringv3アプリケーションで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マネージャーでミックスするというこの記事を参照しているので、大丈夫です。しかし、それはそのようには機能しません。代わりに、次のコードでは、メッセージは破壊的に読み取られ、例外がスローされたときにロールバックされません。
トランザクションロジックは(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)
}
}
WebSphereのJTAトランザクションマネージャーをSpringで使用する方法を誰かにアドバイスできますか?