[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