Author: jmesnil
Date: 2010-04-30 10:56:42 -0400 (Fri, 30 Apr 2010)
New Revision: 9190
Modified:
trunk/src/main/org/hornetq/ra/HornetQRAManagedConnection.java
Log:
https://jira.jboss.org/jira/browse/HORNETQ-349: Clarify XA/transaction behavior of
resource adapter
* use a non-transacted JMS session for work performed outside a TX branch (JCA 1.6
?\194?\1677.15.1.1)
Modified: trunk/src/main/org/hornetq/ra/HornetQRAManagedConnection.java
===================================================================
--- trunk/src/main/org/hornetq/ra/HornetQRAManagedConnection.java 2010-04-30 12:41:09 UTC
(rev 9189)
+++ trunk/src/main/org/hornetq/ra/HornetQRAManagedConnection.java 2010-04-30 14:56:42 UTC
(rev 9190)
@@ -90,8 +90,11 @@
// Physical JMS connection stuff
private Connection connection;
+ // auto-commit session, used outside XA or Local transaction
private Session session;
+ private Session transactedSession;
+
private XASession xaSession;
private XAResource xaResource;
@@ -124,6 +127,7 @@
connection = null;
session = null;
+ transactedSession = null;
xaSession = null;
xaResource = null;
@@ -251,6 +255,11 @@
session.close();
}
+ if (transactedSession != null)
+ {
+ transactedSession.close();
+ }
+
if (xaSession != null)
{
xaSession.close();
@@ -268,7 +277,7 @@
}
catch (Throwable e)
{
- throw new ResourceException("Could not properly close the session and
connection", e);
+ throw new ResourceException("Could not properly close the transactedSession
and connection", e);
}
}
@@ -562,12 +571,24 @@
}
else
{
- if (HornetQRAManagedConnection.trace)
+ if (inManagedTx)
{
- HornetQRAManagedConnection.log.trace("getSession() -> session "
+ xaSession.getSession());
+ if (HornetQRAManagedConnection.trace)
+ {
+ HornetQRAManagedConnection.log.trace("getSession() ->
transactedSession " + transactedSession);
+ }
+
+ return transactedSession;
}
+ else
+ {
+ if (HornetQRAManagedConnection.trace)
+ {
+ HornetQRAManagedConnection.log.trace("getSession() -> session
" + session);
+ }
- return session;
+ return session;
+ }
}
}
@@ -737,7 +758,8 @@
connection.setExceptionListener(this);
xaSession = ((XATopicConnection)connection).createXATopicSession();
- session = ((TopicConnection)connection).createTopicSession(transacted,
acknowledgeMode);
+ transactedSession =
((TopicConnection)connection).createTopicSession(transacted, acknowledgeMode);
+ session = ((TopicConnection)connection).createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
}
else if (cri.getType() == HornetQRAConnectionFactory.QUEUE_CONNECTION)
{
@@ -753,7 +775,8 @@
connection.setExceptionListener(this);
xaSession = ((XAQueueConnection)connection).createXAQueueSession();
- session = ((QueueConnection)connection).createQueueSession(transacted,
acknowledgeMode);
+ transactedSession =
((QueueConnection)connection).createQueueSession(transacted, acknowledgeMode);
+ session = ((QueueConnection)connection).createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
}
else
{
@@ -769,7 +792,8 @@
connection.setExceptionListener(this);
xaSession = ((XAConnection)connection).createXASession();
- session = connection.createSession(transacted, acknowledgeMode);
+ transactedSession = connection.createSession(transacted, acknowledgeMode);
+ session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
}
}
catch (JMSException je)