[jboss-svn-commits] JBL Code SVN: r11307 - in labs/jbossesb/trunk/product/core: rosetta/src/org/jboss/internal/soa/esb/couriers and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Apr 24 12:18:55 EDT 2007


Author: kevin.conner at jboss.com
Date: 2007-04-24 12:18:55 -0400 (Tue, 24 Apr 2007)
New Revision: 11307

Modified:
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
   labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java
   labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/helpers/persist/JdbcCleanConn.java
Log:
Tidied up database transaction access and exception reporting: JBESB-513

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2007-04-24 15:58:20 UTC (rev 11306)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2007-04-24 16:18:55 UTC (rev 11307)
@@ -118,14 +118,27 @@
                 throw new ManagedLifecycleException("Unexpected registry exception", re) ;
             }
             
+            boolean failure = true ;
             try
             {
                 prepareStatements();
+                failure = false ;
             }
             catch (final SQLException sqle)
             {
                 throw new ManagedLifecycleException("Unexpected error initialising statements", sqle);
             }
+            finally
+            {
+                if (failure)
+                {
+                    if (_dbConn != null)
+                    {
+                        _dbConn.release();
+                        _dbConn = null ;
+                    }
+                }
+            }
         }
 
         /**
@@ -230,8 +243,8 @@
 				}
 				else
 				{
-					thrown.printStackTrace();
-					_logger.error(text, thrown);
+                                        _logger.error(text);
+					_logger.debug(text, thrown);
 					changeStatusToError();
 				}
 			}
@@ -384,7 +397,6 @@
 	protected void prepareStatements () throws SQLException
 	{
 		_PSscan = getDbConn().prepareStatement(scanStatement());
-		_PSsel4U = getDbConn().prepareStatement(selectForUpdStatement());
 		_PSupdate = getDbConn().prepareStatement(updateStatement());
 		_PSdeleteRow = getDbConn().prepareStatement(deleteStatement());
 	} // ________________________________
@@ -424,31 +436,31 @@
 		}
 		catch (InvocationTargetException ex)
 		{
-			_logger.error(ex);
+			_logger.debug(ex);
 			
 			throw new ConfigurationException(ex);
 		}
 		catch (IllegalAccessException ex)
 		{
-			_logger.error(ex);
+			_logger.debug(ex);
 			
 			throw new ConfigurationException(ex);
 		}
 		catch (InstantiationException ex)
 		{
-			_logger.error(ex);
+			_logger.debug(ex);
 			
 			throw new ConfigurationException(ex);
 		}
 		catch (ClassNotFoundException ex)
 		{
-			_logger.error(ex);
+			_logger.debug(ex);
 			
 			throw new ConfigurationException(ex);
 		}
 		catch (NoSuchMethodException ex)
 		{
-			_logger.error(ex);
+			_logger.debug(ex);
 			
 			throw new ConfigurationException(ex);
 		}
@@ -456,15 +468,11 @@
 
 	protected List<Map<String, Object>> pollForCandidates ()
 	{
-		JdbcCleanConn oConn = null;
 		List<Map<String, Object>> oResults = new ArrayList<Map<String, Object>>();
+                final JdbcCleanConn oConn = getDbConn();
 		try
 		{
-			oConn = getDbConn();
-			String sScan = scanStatement();
-
-			PreparedStatement PS = oConn.prepareStatement(sScan);
-			ResultSet RS = oConn.execQueryWait(PS, 1);
+			ResultSet RS = oConn.execQueryWait(_PSscan, 1);
 			ResultSetMetaData meta = RS.getMetaData();
 			while (RS.next())
 			{
@@ -481,9 +489,20 @@
 		}
 		catch (Exception e)
 		{
-			_logger.warn("Some triggers might not have been returned", e);
+                    _logger.debug("Some triggers might not have been returned", e);
 		}
-		_logger.debug("Returning " + oResults.size() + " rows.\n");
+                finally
+                {
+                    try
+                    {
+                        oConn.rollback() ;
+                    }
+                    catch (final SQLException sqle) {}
+                }
+                if (_logger.isDebugEnabled())
+                {
+                    _logger.debug("Returning " + oResults.size() + " rows.\n");
+                }
 		return oResults;
 	} // ________________________________
 
@@ -541,12 +560,10 @@
 	{
 		StringBuilder sb = new StringBuilder().append("update ").append(
 				_tableName).append(" set ").append(_inProcessField).append(
-				" = ? where ");
-		int iCurr = 0;
+				" = ? where ").append(_inProcessField).append(" = ?");
 		for (String sCurr : _keys)
 		{
-			if (iCurr++ > 0) sb.append(" and ");
-			sb.append(sCurr).append(" = ?");
+			sb.append(" and ").append(sCurr).append(" = ?");
 		}
 		return sb.toString();
 	} // ________________________________
@@ -611,19 +628,12 @@
 	{
 		try
 		{
-			getDbConn().rollback();
-		}
-		catch (Exception e)
-		{
-			_logger.error("Unable to get DB connection.", e);
-			throw new IllegalStateException("Unable to get DB connection.", e);
-		}
-
-		try
-		{
 			int iParm = 1;
 			for (String sColName : _keys)
-				_PSdeleteRow.setObject(iParm++, _currentRow.get(sColName));
+                        {
+                                final String val = String.valueOf(_currentRow.get(sColName));
+				_PSdeleteRow.setString(iParm++, val);
+                        }
 
 			try
 			{
@@ -633,7 +643,7 @@
 			}
 			catch (Exception e)
 			{
-				_logger.error("Delete row has failed.  Rolling back!!", e);
+				_logger.debug("Delete row has failed.  Rolling back!!", e);
 			}
 
 			try
@@ -642,12 +652,12 @@
 			}
 			catch (Exception e)
 			{
-				_logger.error("Unable to rollback delete row", e);
+				_logger.debug("Unable to rollback delete row", e);
 			}
 		}
 		catch (Exception e)
 		{
-			_logger.error("Unexpected exception.", e);
+			_logger.debug("Unexpected exception.", e);
 		}
 		return false;
 	} // ________________________________
@@ -681,57 +691,44 @@
 		}
 		catch (Exception e)
 		{
-			_logger.error("Unable to get DB connection.", e);
+			_logger.debug("Unable to get DB connection.", e);
 			throw new IllegalStateException("Unable to get DB connection.", e);
 		}
 
 		try
 		{
-			int iParm = 1;
+			int iParm = 3;
 			for (String sColName : _keys)
 			{
 				Object oVal = String.valueOf(_currentRow.get(sColName));
-				_PSsel4U.setObject(iParm, oVal);
-				// parameters are +1 in update statement
-				_PSupdate.setObject(++iParm, oVal);
+				_PSupdate.setObject(iParm++, oVal);
 			}
 
 			try
 			{
-				ResultSet resultSet = getDbConn().execQueryWait(_PSsel4U, 5);
+                            _PSupdate.setString(1, getStatus(toState));
+                            _PSupdate.setString(2, getStatus(fromState));
+                            final int count = getDbConn().execUpdWait(_PSupdate, 5);
+                            if (count == 1)
+                            {
+                                getDbConn().commit();
 
-				if (resultSet.next())
-				{
-					String sOldStatus = resultSet.getString(1).substring(0, 1);
+				if (_logger.isDebugEnabled())
+					_logger.debug("Successfully changed row state from " + fromState + " to " + toState + ".");
 
-					if (sOldStatus.equalsIgnoreCase(getStatus(fromState)))
-					{
-						_PSupdate.setString(1, getStatus(toState));
-						getDbConn().execUpdWait(_PSupdate, 5);
-						getDbConn().commit();
-
-						if (_logger.isDebugEnabled())
-							_logger
-									.debug("Successfully changed row state from " + fromState + " to " + toState + ".");
-
-						return true;
-					}
-					else
-					{
-						_logger
-								.warn("Cannot change row state from " + fromState + " to " + toState + ".  Row not in state " + fromState);
-						return false;
-					}
-				}
-				_logger
-						.error("Row status change to " + toState + " has failed.  Rolling back!!");
+				return true;
+                            }
+                            else
+                            {
+                                    _logger.warn("Cannot change row state from " + fromState + " to " + toState + ".  Number of rows in state " + fromState + " = " + count);
+                                    return false;
+                            }
 			}
 			catch (Exception e)
 			{
-				_logger
-						.error(
-								"Row status change to " + toState + " has failed.  Rolling back!!",
-								e);
+                            final String message = "Row status change to " + toState + " has failed.  Rolling back!!" ;
+                            _logger.error(message);
+                            _logger.debug(message, e);
 			}
 
 			try
@@ -740,14 +737,16 @@
 			}
 			catch (Exception e)
 			{
-				_logger.error(
-						"Unable to rollback row status change to " + fromState
-								.name(), e);
+                            final String message = "Unable to rollback row status change to " + fromState ;
+                            _logger.error(message) ;
+                            _logger.debug(message, e) ;
 			}
 		}
 		catch (Exception e)
 		{
-			_logger.error("Unexpected exception.", e);
+                    final String message = "Unexpected exception." ;
+                    _logger.error(message) ;
+                    _logger.debug(message, e) ;
 		}
 
 		return false;
@@ -812,7 +811,7 @@
 
 	protected String[] _columns, _keys;
 
-	protected PreparedStatement _PSscan, _PSsel4U, _PSupdate, _PSdeleteRow;
+	protected PreparedStatement _PSscan, _PSupdate, _PSdeleteRow;
 
 	protected JdbcCleanConn _dbConn;
 

Modified: labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java
===================================================================
--- labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java	2007-04-24 15:58:20 UTC (rev 11306)
+++ labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java	2007-04-24 16:18:55 UTC (rev 11307)
@@ -96,7 +96,8 @@
 			}
 			catch (Exception e)
 			{
-				_logger.info("Unable to release connection", e);
+                                _logger.info("Unable to release connection");
+                                _logger.debug("Unable to release connection", e);
 			}
 		}
 
@@ -171,11 +172,11 @@
 					}
 					catch (Exception roll)
 					{
-						_logger.error(roll);
+						_logger.debug(roll);
 					}
 				}
 				
-				_logger.error("SQL error", e);
+				_logger.debug("SQL exception during deliver", e);
 				throw new CourierException(e);
 			}
 			catch (Exception e)
@@ -193,9 +194,9 @@
 				+ ((millis < 100) ? 100 : millis);
 		do
 		{
-			ResultSet RS = getRowList();
-			try
-			{
+                        try
+                        {
+                                ResultSet RS = getRowList();
 				while (null != RS && RS.next())
 				{
 					String messageId = RS.getString(1);
@@ -203,25 +204,36 @@
 						continue;
 					return result;
 				}
-				try
-				{
-					long lSleep = limit - System.currentTimeMillis();
-					if (_pollLatency < lSleep)
-						lSleep = _pollLatency;
-					if (lSleep > 0)
-						Thread.sleep(lSleep);
-				}
-				catch (InterruptedException e)
-				{
-					return null;
-				}
-			}
+                        }
 			catch (SQLException e)
 			{
-				_logger.error(e);
+				_logger.debug("SQL Exception during pickup", e);
 				return null;
 			}
-
+                        finally
+                        {
+                            // Added to make sure we release transactions from all paths
+                            if (_conn != null)
+                            {
+                                try
+                                {
+                                    _conn.rollback() ;
+                                }
+                                catch (final SQLException sqle) {} //ignore
+                            }
+                        }
+                        try
+                        {
+                                long lSleep = limit - System.currentTimeMillis();
+                                if (_pollLatency < lSleep)
+                                        lSleep = _pollLatency;
+                                if (lSleep > 0)
+                                        Thread.sleep(lSleep);
+                        }
+                        catch (InterruptedException e)
+                        {
+                                return null;
+                        }
 		} while (System.currentTimeMillis() <= limit);
 		return null;
 	} // ________________________________
@@ -337,7 +349,7 @@
 
 	private void jdbcConnectRetry(Exception exc)
 	{
-		_logger.error("DB problem, will try to reconnect", exc);
+		_logger.debug("DB problem, will try to reconnect", exc);
 		if (null != _conn)
 			_conn.release();
 		_conn = null;
@@ -402,7 +414,7 @@
 			}
 			catch (Exception e)
 			{
-				_logger.error("Unable to prepare SQL statement", e);
+				_logger.debug("Unable to prepare SQL statement", e);
 				return null;
 			}
 		return _prepGetList;
@@ -448,9 +460,7 @@
 			}
 			catch (Exception e)
 			{
-				e.printStackTrace();
-
-				_logger.error(e);
+				_logger.debug(e);
 				return null;
 			}
 		}
@@ -471,7 +481,7 @@
 			}
 			catch (Exception e)
 			{
-				_logger.error(e);
+				_logger.debug(e);
 				return null;
 			}
 		return _prepUpdateStatus;
@@ -496,7 +506,7 @@
 			}
 			catch (Exception e)
 			{
-				_logger.error(e);
+				_logger.debug(e);
 				return null;
 			}
 		return _prepInsert;
@@ -514,7 +524,7 @@
 			}
 			catch (Exception e)
 			{
-				_logger.error(e);
+				_logger.debug(e);
 				return null;
 			}
 		return _prepDelete;

Modified: labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/helpers/persist/JdbcCleanConn.java
===================================================================
--- labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/helpers/persist/JdbcCleanConn.java	2007-04-24 15:58:20 UTC (rev 11306)
+++ labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/helpers/persist/JdbcCleanConn.java	2007-04-24 16:18:55 UTC (rev 11307)
@@ -151,15 +151,15 @@
 				}
 				catch (InterruptedException ex)
 				{
-					m_oLogger.warn("Thread interrupted.", ex);
+					m_oLogger.debug("Thread interrupted.", ex);
 				}
 			}
 		}
-		m_oLogger.error("execQueryWait() FAILED", eRet);
+		m_oLogger.debug("execQueryWait() FAILED", eRet);
 		throw eRet;
 	} // __________________________________
 
-	public void execUpdWait(PreparedStatement p_PS, int p_iQtry)
+	public int execUpdWait(PreparedStatement p_PS, int p_iQtry)
 			throws SQLException
 	{
 		if (null == m_conn)
@@ -173,8 +173,7 @@
 		{
 			try
 			{
-				p_PS.executeUpdate();
-				return;
+				return p_PS.executeUpdate();
 			}
 			catch (SQLException e)
 			{
@@ -188,11 +187,11 @@
 				}
 				catch (InterruptedException ex)
 				{
-					m_oLogger.warn("Thread interrupted.", ex);
+					m_oLogger.debug("Thread interrupted.", ex);
 				}
 			}
 		}
-		m_oLogger.error("execUpdWait() FAILED", eRet);
+		m_oLogger.debug("execUpdWait() FAILED", eRet);
 		throw eRet;
 	} // __________________________________
 
@@ -226,22 +225,20 @@
 				}
 				catch (InterruptedException ex)
 				{
-					m_oLogger.warn("Thread interrupted.", ex);
+					m_oLogger.debug("Thread interrupted.", ex);
 				}
 			}
 		}
 
 		if (eRet != null)
 		{
-			m_oLogger.error("connect() FAILED", eRet);
+			m_oLogger.debug("connect() FAILED", eRet);
 			throw eRet;
 		}
 
 		if (m_conn == null)
 		{
-			m_oLogger.error("connect() FAILED: no connection");
-
-			throw new RuntimeException();
+			throw new RuntimeException("connect() FAILED: no connection");
 		}
 
 		m_conn.setAutoCommit(false);




More information about the jboss-svn-commits mailing list