[jboss-cvs] JBossAS SVN: r73443 - in trunk/connector/src/main/org/jboss/resource/adapter: jdbc/xa and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri May 16 07:41:08 EDT 2008
Author: adrian at jboss.org
Date: 2008-05-16 07:41:08 -0400 (Fri, 16 May 2008)
New Revision: 73443
Modified:
trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java
trunk/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java
trunk/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java
Log:
[JBAS-5526] - Make sure real connections are closed when an error occurs during initialization
Modified: trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java 2008-05-16 11:32:56 UTC (rev 73442)
+++ trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java 2008-05-16 11:41:08 UTC (rev 73443)
@@ -199,18 +199,29 @@
private LocalManagedConnection getLocalManagedConnection(Properties props,Properties copy)
throws JBossResourceException
{
+ Connection con = null;
try
{
String url = getConnectionURL();
Driver d = getDriver(url);
- Connection con = d.connect(url, copy);
+ con = d.connect(url, copy);
if (con == null)
throw new JBossResourceException("Wrong driver class for this connection URL");
return new LocalManagedConnection(this, con, props, transactionIsolation, preparedStatementCacheSize);
}
- catch (Exception e)
+ catch (Throwable e)
{
+ if (con != null)
+ {
+ try
+ {
+ con.close();
+ }
+ catch (Throwable ignored)
+ {
+ }
+ }
throw new JBossResourceException("Could not create connection", e);
}
}
@@ -228,10 +239,11 @@
{
log.trace("Trying to create a connection to " + url);
}
+ Connection con = null;
try
{
Driver d = getDriver(url);
- Connection con = d.connect(url, copy);
+ con = d.connect(url, copy);
if(con == null)
{
log.warn("Wrong driver class for this connection URL: " + url);
@@ -244,6 +256,16 @@
}
catch(Exception e)
{
+ if (con != null)
+ {
+ try
+ {
+ con.close();
+ }
+ catch (Throwable ignored)
+ {
+ }
+ }
log.warn("Failed to create connection for " + url + ": " + e.getMessage());
urlSelector.failedUrlObject(url);
}
Modified: trunk/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java 2008-05-16 11:32:56 UTC (rev 73442)
+++ trunk/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java 2008-05-16 11:41:08 UTC (rev 73443)
@@ -439,20 +439,29 @@
public ManagedConnection getXAManagedConnection(Subject subject, ConnectionRequestInfo cri)
throws javax.resource.ResourceException
{
+ XAConnection xaConnection = null;
Properties props = getConnectionProperties(subject, cri);
try
{
final String user = props.getProperty("user");
final String password = props.getProperty("password");
- XAConnection xaConnection = (user != null)
+ xaConnection = (user != null)
? getXADataSource().getXAConnection(user, password)
: getXADataSource().getXAConnection();
return newXAManagedConnection(props, xaConnection);
}
- catch (Exception e)
+ catch (Throwable e)
{
+ try
+ {
+ if (xaConnection != null)
+ xaConnection.close();
+ }
+ catch (Throwable ignored)
+ {
+ }
throw new JBossResourceException("Could not create connection", e);
}
}
Modified: trunk/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java 2008-05-16 11:32:56 UTC (rev 73442)
+++ trunk/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java 2008-05-16 11:41:08 UTC (rev 73443)
@@ -186,7 +186,21 @@
this.user = user;
this.pwd = pwd;
- setup();
+ try
+ {
+ setup();
+ }
+ catch (Throwable t)
+ {
+ try
+ {
+ destroy();
+ }
+ catch (Throwable ignored)
+ {
+ }
+ JBossResourceException.rethrowAsResourceException("Error during setup", t);
+ }
}
//---- ManagedConnection API ----
@@ -269,7 +283,7 @@
*/
public void destroy() throws ResourceException
{
- if (isDestroyed) return;
+ if (isDestroyed || con == null) return;
isDestroyed = true;
@@ -292,21 +306,24 @@
{
if (info.getType() == JmsConnectionFactory.TOPIC)
{
- topicSession.close();
- if (xaTransacted) {
+ if (topicSession != null)
+ topicSession.close();
+ if (xaTransacted && xaTopicSession != null) {
xaTopicSession.close();
}
}
else if (info.getType() == JmsConnectionFactory.QUEUE)
{
- queueSession.close();
- if (xaTransacted)
+ if (queueSession != null)
+ queueSession.close();
+ if (xaTransacted && xaQueueSession != null)
xaQueueSession.close();
}
else
{
- session.close();
- if (xaTransacted)
+ if (session != null)
+ session.close();
+ if (xaTransacted && xaSession != null)
xaSession.close();
}
}
@@ -316,7 +333,7 @@
}
con.close();
}
- catch (JMSException e)
+ catch (Throwable e)
{
throw new JBossResourceException
("Could not properly close the session and connection", e);
More information about the jboss-cvs-commits
mailing list