[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