From 7d4b41dbfe0513d1debb0a32880369bbfddfdb60 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 13 Jan 2009 11:56:52 +0000 Subject: [PATCH] SWS-473 --- .../ws/transport/jms/JmsMessageSender.java | 1 + .../ws/transport/jms/JmsSenderConnection.java | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java b/support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java index 8659f54f..e6011000 100644 --- a/support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java +++ b/support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java @@ -148,6 +148,7 @@ public class JmsMessageSender extends JmsDestinationAccessor implements WebServi wsConnection.setResponseDestination(resolveResponseDestination(jmsSession, uri)); wsConnection.setTimeToLive(JmsTransportUtils.getTimeToLive(uri)); wsConnection.setTextMessageEncoding(textMessageEncoding); + wsConnection.setSessionTransacted(isSessionTransacted()); wsConnection.setPostProcessor(postProcessor); return wsConnection; } diff --git a/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java b/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java index d9dd42b8..158683fe 100644 --- a/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java +++ b/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java @@ -79,6 +79,8 @@ public class JmsSenderConnection extends AbstractSenderConnection { private MessagePostProcessor postProcessor; + private boolean sessionTransacted = false; + /** Constructs a new JMS connection with the given parameters. */ protected JmsSenderConnection(ConnectionFactory connectionFactory, Connection connection, @@ -142,6 +144,10 @@ public class JmsSenderConnection extends AbstractSenderConnection { this.postProcessor = postProcessor; } + void setSessionTransacted(boolean sessionTransacted) { + this.sessionTransacted = sessionTransacted; + } + /* * URI */ @@ -209,6 +215,9 @@ public class JmsSenderConnection extends AbstractSenderConnection { } connection.start(); messageProducer.send(requestMessage); + if (session.getTransacted() && isSessionLocallyTransacted(session)) { + JmsUtils.commitIfNecessary(session); + } } catch (JMSException ex) { throw new JmsTransportException(ex); @@ -218,9 +227,14 @@ public class JmsSenderConnection extends AbstractSenderConnection { } } + /** @see org.springframework.jms.core.JmsTemplate#isSessionLocallyTransacted(Session) */ + private boolean isSessionLocallyTransacted(Session session) { + return sessionTransacted && !ConnectionFactoryUtils.isSessionTransactional(session, connectionFactory); + } + /* - * Receiving - */ + * Receiving + */ protected void onReceiveBeforeRead() throws IOException { MessageConsumer messageConsumer = null;