[
https://jira.jboss.org/browse/JBTM-789?page=com.atlassian.jira.plugin.sys...
]
Mauro Molinari updated JBTM-789:
--------------------------------
Attachment: Patch JBTM-789.txt
This is my proposed patch, based on the discussion in the forum topic.
The patch applies to com.arjuna.ats.internal.jdbc.ConnectionImple.close() and the semantic
is the following.
First of all, both connections (the physical one and the recovery one) are always closed
together. To ensure this, I created a private closeConnectionsImmediately() method which
is called wherever needed.
If the transaction is not active, close the connections immediately.
Otherwise, check if the transaction is valid. If it is not, close the connections
immediately and launch an "invalid transaction" exception.
Otherwise (so, there's a valid transaction), try to delist the resource. In case of
errors launch an exception. However, in any case, a finally block is executed in which the
following check is performed. If we DO have a ConnectionModifier AND it says that the JDBC
driver does not support multiple connections, then close immediately. In all the other
cases, just register a transaction synchronization to close the connections after
transaction termination. This is all done in a finally block, otherwise a connection leak
may occur if something goes wrong (i.e.: if the delist of resources fails).
I hope this can help in some way.
XA connections leak when no modifier available
----------------------------------------------
Key: JBTM-789
URL:
https://jira.jboss.org/browse/JBTM-789
Project: JBoss Transaction Manager
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: JTA
Affects Versions: 4.11.0
Environment: JBoss Transactions 4.11, Tomcat, Spring
Reporter: Mauro Molinari
Assignee: Mark Little
Priority: Critical
Attachments: Patch JBTM-789.txt
I recently upgraded JBossTS from 4.6.1 GA to 4.11 Final. I see that bug JBTM-532 that I
opened against 4.5 and 4.6 should have been fixed in 4.8.0. However, besides still having
a null _theModifier when using PostgreSQL, the current (4.11) implementation of
com.arjuna.ats.internal.jdbc.ConnectionImple.close() has a problem.
I mean, if _theModifier is null, a comment says: "no indication about connections,
so assume close immediately". However in this case only _theConnection
(java.sql.Connection) is closed and set to null, while
_recoveryConnection.closeCloseCurrentConnection() is not called, leading to an
XAConnection leak.
What I would expect is that if _theModifier is null, a log entry were added but nothing
else were done; in particular I would expect not to return and let the following "if
(!delayClose)" (towards the end of the method) close both the connections
immediately.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira