Index: trunk/ippToPsps/jython/loader.py
===================================================================
--- trunk/ippToPsps/jython/loader.py	(revision 33776)
+++ trunk/ippToPsps/jython/loader.py	(revision 33787)
@@ -45,10 +45,9 @@
                 self.scratchDb.disconnect()
                 continue
-            self.logger.infoPair("Using scratch Db", self.scratchDb.dbName)
             break
 
-        if not self.scratchDb.connected: 
-            self.logger.errorPair("Cannot connect to a", "scratch database")
-            return
+        if not self.scratchDb.connected:
+            self.exitProgram("Cannot connect to a scratch database")
+            raise
        
         # create Datastore objects
@@ -198,38 +197,44 @@
     
             self.ippToPspsDb.unlockTables()
+            self.ippToPspsDb.deletePendingItem(batchType, id)
+
+            # catch any raised exceptions in batch constructors
+            try:
+                if batchType == "P2":
+                    batch = DetectionBatch(self.logger,
+                            self.config,
+                            self.gpc1Db,
+                            self.ippToPspsDb,
+                            self.scratchDb,
+                            id,
+                            batchID,
+                            useFullTables)
+                elif batchType == "ST":
+                    batch = StackBatch(self.logger,
+                            self.config,
+                            self.gpc1Db,
+                            self.ippToPspsDb,
+                            self.scratchDb,
+                            id,
+                            batchID,
+                            useFullTables)
+    
+                elif batchType == "OB":
+                    batch = ObjectBatch(self.logger,
+                            self.config,
+                            self.gpc1Db,
+                            self.ippToPspsDb,
+                            self.scratchDb,
+                            id,
+                            batchID,
+                            useFullTables)
+    
+                batch.run()
    
-            self.ippToPspsDb.deletePendingItem(batchType, id)
-
-            if batchType == "P2":
-                batch = DetectionBatch(self.logger,
-                        self.config,
-                        self.gpc1Db,
-                        self.ippToPspsDb,
-                        self.scratchDb,
-                        id,
-                        batchID,
-                        useFullTables)
-            elif batchType == "ST":
-                batch = StackBatch(self.logger,
-                        self.config,
-                        self.gpc1Db,
-                        self.ippToPspsDb,
-                        self.scratchDb,
-                        id,
-                        batchID,
-                        useFullTables)
-    
-            elif batchType == "OB":
-                batch = ObjectBatch(self.logger,
-                        self.config,
-                        self.gpc1Db,
-                        self.ippToPspsDb,
-                        self.scratchDb,
-                        id,
-                        batchID,
-                        useFullTables)
-    
-            batch.run()
-    
+            # if batch fails, ignore and move on to the next one
+            except: 
+                self.logger.errorPair("Problem with this %s batch (%d)" % (batchType, id), "skipping")
+                pass
+
             if not self.checkClientStatus(): return False
     
@@ -256,6 +261,7 @@
     loader = Loader(sys.argv)
     loader.run()
-    loader.exitProgram("finished")
+    loader.exitProgram("completed")
 except Exception, e:
     print str(e)
     traceback.print_exc()
+
