[jboss-cvs] JBossAS SVN: r73442 - in branches/Branch_4_2/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:32:56 EDT 2008


Author: adrian at jboss.org
Date: 2008-05-16 07:32:56 -0400 (Fri, 16 May 2008)
New Revision: 73442

Modified:
   branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/HALocalManagedConnectionFactory.java
   branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java
   branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java
   branches/Branch_4_2/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: branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/HALocalManagedConnectionFactory.java
===================================================================
--- branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/HALocalManagedConnectionFactory.java	2008-05-16 11:31:28 UTC (rev 73441)
+++ branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/HALocalManagedConnectionFactory.java	2008-05-16 11:32:56 UTC (rev 73442)
@@ -120,10 +120,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);
@@ -136,6 +137,16 @@
          }
          catch(Exception e)
          {
+            if (con != null)
+            {
+               try
+               {
+                  con.close();
+               }
+               catch (Throwable ignored)
+               {
+               }
+            }
             log.warn("Failed to create connection for " + url + ": " + e.getMessage());
             urlSelector.failedUrl(url);
          }

Modified: branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java
===================================================================
--- branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java	2008-05-16 11:31:28 UTC (rev 73441)
+++ branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalManagedConnectionFactory.java	2008-05-16 11:32:56 UTC (rev 73442)
@@ -164,18 +164,29 @@
          log.trace("Using properties: " + logCopy);
       }
 
+      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 (Exception ignored)
+            {
+            }
+         }
          throw new JBossResourceException("Could not create connection", e);
       }
    }

Modified: branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java
===================================================================
--- branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java	2008-05-16 11:31:28 UTC (rev 73441)
+++ branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jdbc/xa/XAManagedConnectionFactory.java	2008-05-16 11:32:56 UTC (rev 73442)
@@ -128,19 +128,30 @@
          throws javax.resource.ResourceException
    {
       Properties props = getConnectionProperties(subject, cri);
+      XAConnection xaConnection = null;
       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)
       {
+         if (xaConnection != null)
+         {
+            try
+            {
+               xaConnection.close();
+            }
+            catch (Exception ignored)
+            {
+            }
+         }
          throw new JBossResourceException("Could not create connection", e);
       }
    }

Modified: branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java
===================================================================
--- branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java	2008-05-16 11:31:28 UTC (rev 73441)
+++ branches/Branch_4_2/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java	2008-05-16 11:32:56 UTC (rev 73442)
@@ -186,7 +186,21 @@
       this.user = user;
       this.pwd = pwd;
 
-      setup();
+      try
+      {
+         setup();
+      }
+      catch (Throwable t)
+      {
+         try
+         {
+            destroy();
+         }
+         catch (Throwable ignored)
+         {
+         }
+         JBossResourceException.rethrowAsResourceException("Error creating connection/session", 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,10 +333,9 @@
          }
          con.close();
       }
-      catch (JMSException e)
+      catch (Throwable e)
       {
-         throw new JBossResourceException
-            ("Could not properly close the session and connection", e);
+         throw new JBossResourceException("Could not properly close the session and connection", e);
       }
    }
 




More information about the jboss-cvs-commits mailing list