[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