diff --git a/commons/src/main/java/org/archive/bdb/BdbModule.java b/commons/src/main/java/org/archive/bdb/BdbModule.java index 8d6ca0c4..ddb4591a 100644 --- a/commons/src/main/java/org/archive/bdb/BdbModule.java +++ b/commons/src/main/java/org/archive/bdb/BdbModule.java @@ -181,7 +181,7 @@ Serializable, Closeable { } - protected ConfigPath dir = new ConfigPath("state subdirectory","state"); + protected ConfigPath dir = new ConfigPath("bdbmodule subdirectory","state"); public ConfigPath getDir() { return dir; } @@ -315,7 +315,12 @@ Serializable, Closeable { public Database openDatabase(String name, BdbConfig config, boolean recycle) - throws DatabaseException { + throws DatabaseException { + if(!isRunning()) { + // proper initialization hasn't occurred + throw new IllegalStateException( + "BdbModule not started; as a Lifecycle bean it must not be an inner bean."); + } if (databases.containsKey(name)) { throw new IllegalStateException("Database already exists: " +name); } @@ -584,8 +589,10 @@ Serializable, Closeable { public void close() { close2(); - Runtime.getRuntime().removeShutdownHook(shutdownHook); - shutdownHook = null; + if(shutdownHook!=null) { + Runtime.getRuntime().removeShutdownHook(shutdownHook); + shutdownHook = null; + } } @SuppressWarnings("unchecked") diff --git a/engine/src/main/java/org/archive/crawler/framework/CrawlController.java b/engine/src/main/java/org/archive/crawler/framework/CrawlController.java index 0b3e07a0..00faad22 100644 --- a/engine/src/main/java/org/archive/crawler/framework/CrawlController.java +++ b/engine/src/main/java/org/archive/crawler/framework/CrawlController.java @@ -26,6 +26,7 @@ import java.io.PrintWriter; import java.io.Serializable; import java.io.StringWriter; import java.util.LinkedList; +import java.util.logging.Level; import java.util.logging.Logger; import org.archive.crawler.event.CrawlStateEvent; @@ -368,7 +369,11 @@ implements Serializable, LOGGER.fine("Finished crawl."); - appCtx.stop(); + try { + appCtx.stop(); + } catch (RuntimeException re) { + LOGGER.log(Level.SEVERE,re.getMessage(),re); + } // Ok, now we are ready to exit. sendCrawlStateChangeEvent(State.FINISHED, this.sExit); } diff --git a/engine/src/main/java/org/archive/crawler/framework/CrawlJob.java b/engine/src/main/java/org/archive/crawler/framework/CrawlJob.java index 8b0f8c51..136c6d03 100644 --- a/engine/src/main/java/org/archive/crawler/framework/CrawlJob.java +++ b/engine/src/main/java/org/archive/crawler/framework/CrawlJob.java @@ -76,7 +76,10 @@ import org.xml.sax.SAXException; * * @contributor gojomo */ -public class CrawlJob implements Comparable, ApplicationListener{ +public class CrawlJob implements Comparable, ApplicationListener { + private final static Logger LOGGER = + Logger.getLogger(CrawlJob.class.getName()); + File primaryConfig; PathSharingContext ac; int launchCount; @@ -401,7 +404,10 @@ public class CrawlJob implements Comparable, ApplicationListener{ Thread launcher = new Thread(alertThreadGroup, getShortName()+" launchthread") { public void run() { startContext(); - getCrawlController().requestCrawlStart(); + CrawlController cc = getCrawlController(); + if(cc!=null) { + cc.requestCrawlStart(); + } } }; getJobLogger().log(Level.INFO,"Job launched"); @@ -426,8 +432,7 @@ public class CrawlJob implements Comparable, ApplicationListener{ ac = null; beansException(be); } catch (Exception e) { - e.printStackTrace(System.err); - getJobLogger().log(Level.SEVERE,e.getMessage(),e); + LOGGER.log(Level.SEVERE,e.getClass().getSimpleName()+": "+e.getMessage(),e); try { ac.close(); } catch (Exception e2) { diff --git a/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java b/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java index 487469c2..e3b0155e 100644 --- a/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java +++ b/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java @@ -566,7 +566,7 @@ public abstract class AbstractFrontier } catch (RuntimeException e) { // log, try to pause, continue logger.log(Level.SEVERE,"",e); - if(targetState!=State.PAUSE) { + if(targetState!=State.PAUSE && targetState!=State.FINISH) { requestState(State.PAUSE); } } diff --git a/engine/src/main/java/org/archive/crawler/reporting/StatisticsTracker.java b/engine/src/main/java/org/archive/crawler/reporting/StatisticsTracker.java index da3a88b1..c766edc7 100644 --- a/engine/src/main/java/org/archive/crawler/reporting/StatisticsTracker.java +++ b/engine/src/main/java/org/archive/crawler/reporting/StatisticsTracker.java @@ -896,7 +896,11 @@ public class StatisticsTracker //controller.addOrderToManifest(); for(Class reportClass : END_REPORTS) { - writeReportFile(reportClass); + try { + writeReportFile(reportClass); + } catch (RuntimeException re) { + logger.log(Level.SEVERE, re.getMessage(), re); + } } } diff --git a/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java b/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java index 72449571..590c6261 100644 --- a/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java +++ b/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java @@ -98,15 +98,8 @@ implements Lifecycle { if (!isRunning()) { return; } - try { - historyDb.sync(); - historyDb.close(); - } catch (DatabaseException e) { - // TODO Auto-generated catch block - throw new RuntimeException(e); - } finally { - historyDb = null; - } + bdb.closeDatabase(historyDb); + historyDb = null; } } \ No newline at end of file