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.
|