Author: [log in to unmask] Date: Wed Sep 23 13:25:49 2015 New Revision: 3684 Log: Add data caching. Modified: java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java Modified: java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java ============================================================================= --- java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java (original) +++ java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java Wed Sep 23 13:25:49 2015 @@ -21,6 +21,22 @@ * @author Jeremy McCormick, SLAC */ public final class RunManager implements ConditionsListener { + + /** + * Simple class for caching data. + */ + private class DataCache { + TriggerConfig triggerConfig; + List<EpicsData> epicsData; + List<ScalerData> scalerData; + RunSummary runSummary; + RunSummary fullRunSummary; + } + + /** + * The data cache of run information. + */ + private DataCache dataCache; /** * The default connection parameters for read-only access to the run database. @@ -156,7 +172,17 @@ * @param run the run number */ public void setRun(final int run) { - this.run = run; + + if (this.run == null || run != this.run) { + + LOGGER.info("setting new run " + run); + + // Set the run number. + this.run = run; + + // Reset the data cache. + this.dataCache = new DataCache(); + } } /** @@ -166,7 +192,10 @@ */ public RunSummary getRunSummary() { checkRunNumber(); - return factory.createRunSummaryDao().getRunSummary(this.run); + if (this.dataCache.runSummary == null) { + this.dataCache.runSummary = factory.createRunSummaryDao().getRunSummary(this.run); + } + return this.dataCache.runSummary; } /** @@ -176,7 +205,10 @@ */ public RunSummary getFullRunSummary() { checkRunNumber(); - return factory.createRunSummaryDao().readFullRunSummary(this.run); + if (this.dataCache.fullRunSummary == null) { + this.dataCache.fullRunSummary = factory.createRunSummaryDao().readFullRunSummary(this.run); + } + return this.dataCache.fullRunSummary; } /** @@ -186,7 +218,11 @@ */ public TriggerConfig getTriggerConfig() { checkRunNumber(); - return factory.createTriggerConfigDao().getTriggerConfig(run); + if (this.dataCache.triggerConfig == null) { + LOGGER.info("loading trigger config for run " + this.run); + this.dataCache.triggerConfig = factory.createTriggerConfigDao().getTriggerConfig(run); + } + return this.dataCache.triggerConfig; } /** @@ -197,7 +233,11 @@ */ public List<EpicsData> getEpicsData(EpicsType epicsType) { checkRunNumber(); - return factory.createEpicsDataDao().getEpicsData(epicsType, this.run); + if (this.dataCache.epicsData == null) { + LOGGER.info("loading EPICS data for run " + this.run); + this.dataCache.epicsData = factory.createEpicsDataDao().getEpicsData(epicsType, this.run); + } + return this.dataCache.epicsData; } /** @@ -207,7 +247,11 @@ */ public List<ScalerData> getScalerData() { checkRunNumber(); - return factory.createScalerDataDao().getScalerData(run); + if (this.dataCache.scalerData == null) { + LOGGER.info("loading scaler data for run " + this.run); + this.dataCache.scalerData = factory.createScalerDataDao().getScalerData(run); + } + return this.dataCache.scalerData; } /** @@ -217,11 +261,6 @@ * @throws SQLException if there is a database query error */ public void insertRun(final RunSummary runSummary) throws SQLException { - // Don't do anything if the run number has already been set. - if (run == this.run) { - return; - } - LOGGER.info("updating run database for run " + runSummary.getRun()); // Create object for updating run info in the database.