[cvs] expresso commit by lhamel: introduce DBRecordNotDeletedException, and

JCorporate Ltd jcorp at jcorporate.com
Thu Mar 3 23:37:18 UTC 2005


Log Message:
-----------
introduce DBRecordNotDeletedException, and log at the debug level if this occurs.

Modified Files:
--------------
    expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj:
        DBObject.java

Revision Data
-------------
Index: DBObject.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/DBObject.java,v
retrieving revision 1.246
retrieving revision 1.247
diff -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/DBObject.java -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/DBObject.java -u -r1.246 -r1.247
--- expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/DBObject.java
+++ expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/DBObject.java
@@ -85,6 +85,7 @@
 import com.jcorporate.expresso.core.db.DBConnection;
 import com.jcorporate.expresso.core.db.DBConnectionPool;
 import com.jcorporate.expresso.core.db.DBException;
+import com.jcorporate.expresso.core.db.exception.DBRecordNotDeletedException;
 import com.jcorporate.expresso.core.db.exception.DBRecordNotFoundException;
 import com.jcorporate.expresso.core.misc.ConfigJdbc;
 import com.jcorporate.expresso.core.misc.ConfigManager;
@@ -1916,11 +1917,12 @@
             }
         }
 
+        // if no record was deleted, we throw a special error which is typically ignored
         if (myConnection.getUpdateCount() == 0) {
-            log.error("No record(s) deleted for SQL '" +
-                    sqlCommand.toString() + "'");
-            throw new DBException("No record(s) deleted.");
+            throw new DBRecordNotDeletedException("No record(s) deleted for SQL '" +
+                    sqlCommand.toString() + "'") ;
         }
+
         if (isCached()) {
             removeFromCache(this);
         }
@@ -1944,7 +1946,6 @@
             myUpdates = null;
         } /* if */
 
-
         setStatus(BaseDataObject.STATUS_DELETED);
         notifyListeners(EVENT_DELETE);
     } /* delete() */
@@ -1960,14 +1961,6 @@
     public synchronized void deleteAll()
             throws DBException {
 
-
-// Old Memory intensive way of doing it :)
-//        ArrayList list = searchAndRetrieveList();
-//        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
-//            DBObject object = (DBObject) iterator.next();
-//            object.delete();
-//        }
-
         //Build an object that we're going to query with.
         DBObject testObject = newInstance();
         DataObjectMetaData metadata = getMetaData();
@@ -2016,40 +2009,16 @@
             num = al.size();
             for (Iterator i = al.iterator(); i.hasNext();) {
                 DBObject oneObject = (DBObject) i.next();
-                oneObject.delete();
+                try {
+                    oneObject.delete();
+                } catch (DBRecordNotDeletedException e) {
+                    // record does not exist--no problem.  Perhaps another thread deleted it first.
+                    log.debug("Not deleted: " + e.getMessage());
+                }
             }
 
             al.clear(); // help gc
         } while (num >= 100);
-
-
-//        ArrayList retrievedFieldList = new ArrayList();
-//
-//        DBConnection listingConnection = null;
-//        try {
-//            listingConnection = createAndExecuteSearch(retrievedFieldList);
-//            //Only allocate if we're gonna load this record
-//            DBObject myObj = newInstance();
-//
-//
-//            while (listingConnection.next()) {
-//                myObj.clear();
-//                loadFromConnection(myObj,listingConnection,retrievedFieldList);
-//                myObj.delete();
-//            }
-//        } catch (DBException de) {
-//            log.error("Error performing deleteAll", de);
-//            throw new DBException(de);
-//        } catch (Throwable t) {
-//            log.error("Error performing deleteAll", t);
-//            throw new DBException("Error performing deleteAll", t);
-//        } finally {
-//            if (getLocalConnection() == null) {
-//                if (listingConnection != null) {
-//                    getConnectionPool().release(listingConnection);
-//                }
-//            }
-//        }
     }
 
     /**
@@ -2131,10 +2100,6 @@
             myConnection.executeUpdate(commandToExecute);
 
         } catch (DBException e) {
-            /**
-             * @todo will rollback here prevent rollback by calling routine?
-             */
-
             throw ((DBException) e.fillInStackTrace());
         } finally {
             if (getLocalConnection() == null) {
@@ -2145,35 +2110,8 @@
         if (myConnection.getUpdateCount() == 0) {
             log.debug("No record(s) deleted for SQL '" +
                     sqlCommand.toString() + "'");
-//			throw new DBException("No record(s) deleted.");
         }
-//		if (isCached()) {
-//			removeFromCache(this);
-//		}
-
-        /* Now log the change if we are logging */
-        if (getDef().isLoggingEnabled()) {
-            ChangeLog myChangeLog = null;
-            if (getLocalConnection() != null) {
-                myChangeLog = new ChangeLog(getLocalConnection());
-            } else {
-                myChangeLog = new ChangeLog();
-            }
-            myChangeLog.setDataContext(getDataContext());
-            myChangeLog.setField("ObjectChanged", myClassName);
-            myChangeLog.setField("RecordKey", getMyKeys());
-            myChangeLog.setField("Operation", "D");
-            myChangeLog.setField("ChangedField", "ALL");
-            myChangeLog.add();
-
-            /* We're done tracking changes */
-            myUpdates = null;
-        } /* if */
-
-
-//		setStatus(BaseDataObject.STATUS_DELETED);
-//		notifyListeners("D");
-    } /* doDeleteAll() */
+    }
 
 
     /**
@@ -2242,8 +2180,9 @@
             if (foundValues) {
                 try {
                     detailObj.deleteAll();
-                } catch (DBException ex) {
-                    log.error("Error deleting detail object", ex);
+                } catch (DBRecordNotDeletedException ex) {
+                    //  not really an error case--another thread may have already deleted.
+                    log.info("Not deleted: " + ex.getMessage() );
                 }
             }
         } /* for each detail */


More information about the cvs mailing list