Author: [log in to unmask] Date: Thu Jan 1 23:18:03 2015 New Revision: 1825 Log: Overhaul of conditions system initialization so it is less messy. Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java ============================================================================= --- java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java (original) +++ java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java Thu Jan 1 23:18:03 2015 @@ -1,7 +1,4 @@ package org.hps.conditions.database; - -import static org.hps.conditions.database.TableConstants.ECAL_CONDITIONS; -import static org.hps.conditions.database.TableConstants.SVT_CONDITIONS; import java.io.File; import java.io.FileInputStream; @@ -21,26 +18,23 @@ import java.util.logging.Level; import java.util.logging.Logger; -import org.hps.conditions.api.AbstractConditionsObjectCollection; import org.hps.conditions.api.ConditionsObject; +import org.hps.conditions.api.ConditionsObjectCollection; import org.hps.conditions.api.ConditionsObjectException; import org.hps.conditions.api.ConditionsRecord; import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection; import org.hps.conditions.api.ConditionsSeries; -import org.hps.conditions.ecal.EcalConditions; import org.hps.conditions.ecal.EcalConditionsConverter; import org.hps.conditions.ecal.EcalDetectorSetup; import org.hps.conditions.ecal.TestRunEcalConditionsConverter; -import org.hps.conditions.svt.SvtConditions; import org.hps.conditions.svt.SvtConditionsConverter; import org.hps.conditions.svt.SvtDetectorSetup; -import org.hps.conditions.svt.TestRunSvtConditions; import org.hps.conditions.svt.TestRunSvtConditionsConverter; -import org.hps.conditions.svt.TestRunSvtDetectorSetup; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; +import org.lcsim.conditions.ConditionsConverter; import org.lcsim.conditions.ConditionsManager; import org.lcsim.conditions.ConditionsManagerImplementation; import org.lcsim.geometry.Detector; @@ -65,50 +59,54 @@ @SuppressWarnings("rawtypes") public class DatabaseConditionsManager extends ConditionsManagerImplementation { + protected static Logger logger = LogUtil.create(DatabaseConditionsManager.class); + + protected ConverterRegistry converters = ConverterRegistry.create(); + protected TableRegistry tableRegistry = TableRegistry.create(); + protected static final String CONNECTION_PROPERTY = "org.hps.conditions.connection.file"; - protected static final String DEFAULT_CONFIG = "/org/hps/conditions/config/conditions_database_prod.xml"; - protected static final String TEST_RUN_CONFIG = "/org/hps/conditions/config/conditions_database_testrun_2012.xml"; - protected static final int TEST_RUN_MAX_RUN = 1365; - - // The default Test Run detector. - private static final String DEFAULT_TEST_RUN_DETECTOR = "HPS-TestRun-v8-5"; - - // The default Engineering Run detector. - private static final String DEFAULT_ENG_RUN_DETECTOR = "HPS-Proposal2014-v8-6pt6"; - - protected static Logger logger = LogUtil.create(DatabaseConditionsManager.class); - - protected String detectorName; - protected String ecalName = "Ecal"; - protected String svtName = "Tracker"; - protected EcalDetectorSetup ecalLoader = new EcalDetectorSetup(); - protected TestRunSvtDetectorSetup testRunSvtloader = new TestRunSvtDetectorSetup(); - protected SvtDetectorSetup svtLoader = new SvtDetectorSetup(); - - protected ConverterRegistry converters = ConverterRegistry.create(); - protected ConditionsSeriesConverter conditionsSeriesConverter = new ConditionsSeriesConverter(this); - protected TableRegistry tableRegistry = TableRegistry.create(); - protected File connectionPropertiesFile; protected ConnectionParameters connectionParameters; protected Connection connection; protected boolean isConnected = false; protected boolean loggedConnectionParameters = false; + protected static final String DEFAULT_CONFIG = "/org/hps/conditions/config/conditions_database_prod.xml"; + protected static final String TEST_RUN_CONFIG = "/org/hps/conditions/config/conditions_database_testrun_2012.xml"; + protected static final String ENGRUN_CONFIG = "/org/hps/conditions/config/conditions_database_engrun.xml"; + + protected static final int TEST_RUN_MAX_RUN = 1365; + + // The default Test Run detector. + private static final String DEFAULT_TEST_RUN_DETECTOR = "HPS-TestRun-v8-5"; + + // The default Engineering Run detector. + private static final String DEFAULT_ENG_RUN_DETECTOR = "HPS-Proposal2014-v8-6pt6"; + + protected String detectorName; + protected String ecalName = "Ecal"; + protected String svtName = "Tracker"; + protected ConditionsConverter svtConverter; + protected ConditionsConverter ecalConverter; + protected EcalDetectorSetup ecalSetup = new EcalDetectorSetup(ecalName); + protected SvtDetectorSetup svtSetup = new SvtDetectorSetup(svtName); + + + protected String tag = null; - - protected String resourceConfig = null; - protected File fileConfig = null; protected boolean isInitialized = false; protected boolean isFrozen = false; - - // Configuration from XML settings. + protected boolean isConfigured = false; + + // Configuration from XML settings. These are the defaults. protected boolean setupSvtDetector = true; protected boolean setupEcalDetector = true; protected boolean freezeAfterInitialize = false; + protected boolean closeConnectionAfterInitialize = true; protected boolean cacheAllConditions = false; - + protected boolean isTestRun = false; + /** * Class constructor. * Calling this will automatically register this @@ -119,11 +117,13 @@ registerConditionsConverter(new DetectorConditionsConverter()); setupConnectionFromSystemProperty(); ConditionsManager.setDefaultConditionsManager(this); - this.setRun(-1); + setRun(-1); for (ConditionsObjectConverter converter : converters.values()) { logger.config("registering converter for " + converter.getType()); - this.registerConditionsConverter(converter); - } + registerConditionsConverter(converter); + } + addConditionsListener(ecalSetup); + addConditionsListener(svtSetup); } /** @@ -158,14 +158,14 @@ connectionParameters = ConnectionParameters.fromResource(chooseConnectionPropertiesResource()); } - if (!this.loggedConnectionParameters) { + if (!loggedConnectionParameters) { // Print out detailed info to the log on first connection. logger.config("opening connection to " + connectionParameters.getConnectionString()); logger.config("host " + connectionParameters.getHostname()); logger.config("port " + connectionParameters.getPort()); logger.config("user " + connectionParameters.getUser()); logger.config("database " + connectionParameters.getDatabase()); - this.loggedConnectionParameters = true; + loggedConnectionParameters = true; } // Create the connection using the parameters. @@ -195,29 +195,49 @@ } /** - * Get multiple <code>ConditionsObjectCollection</code> objects that may - * have overlapping time validity information. - * @param conditionsKey The conditions key. - * @return The <code>ConditionsSeries</code> containing the matching - * <code>ConditionsObjectCollection</code>. - */ - public ConditionsSeries getConditionsSeries(String conditionsKey) { - return conditionsSeriesConverter.createSeries(conditionsKey); - } - + * Get a conditions series with one or more collections. + * @param collectionType The type of the collection. + * @param tableName The name of the data table. + * @return The conditions series. + */ + public + <ObjectType extends ConditionsObject, CollectionType extends ConditionsObjectCollection<ObjectType>> + ConditionsSeries<ObjectType, CollectionType> getConditionsSeries(Class<CollectionType> collectionType, String tableName) { + TableMetaData tableInfo = tableRegistry.findByCollectionType(collectionType); + if (tableInfo == null) { + throw new IllegalArgumentException("No table meta data found for collection type: " + collectionType); + } + Class<? extends ConditionsObject> objectType = tableInfo.getObjectClass(); + ConditionsSeriesConverter<ObjectType, CollectionType> converter = + new ConditionsSeriesConverter(objectType, collectionType); + return converter.createSeries(tableName); + } + + /** + * Get a conditions series using the default table name for the data. + * @param collectionType The type of collection. + * @return The conditions series. + */ + public + <ObjectType extends ConditionsObject, CollectionType extends ConditionsObjectCollection<ObjectType>> + ConditionsSeries<ObjectType, CollectionType> getConditionsSeries(Class<CollectionType> collectionType) { + TableMetaData tableInfo = findTableMetaData(collectionType); + return getConditionsSeries((Class<CollectionType>)tableInfo.getCollectionClass(), tableInfo.getTableName()); + } + /** * Get a given collection of the given type from the conditions database * using the default table name. * @param type The type of the conditions data. * @return A collection of objects of the given type from the conditions database */ - public <CollectionType extends AbstractConditionsObjectCollection> CollectionType getCollection(Class<CollectionType> type) { + public <CollectionType extends ConditionsObjectCollection> CollectionType getCollection(Class<CollectionType> type) { TableMetaData metaData = tableRegistry.findByCollectionType(type); if (metaData == null) { throw new RuntimeException("Table name data for condition of type " + type.getSimpleName() + " was not found."); } String tableName = metaData.getTableName(); - CollectionType conditionsCollection = this.getCachedConditions(type, tableName).getCachedData(); + CollectionType conditionsCollection = getCachedConditions(type, tableName).getCachedData(); return conditionsCollection; } @@ -233,23 +253,10 @@ if (detectorName == null) { throw new IllegalArgumentException("The detectorName argument is null."); } - - //logger.finest("setDetector - detector " + detectorName + " and run #" + runNumber); - - if (!isInitialized || !detectorName.equals(this.getDetector()) || runNumber != this.getRun()) { - //if (!isInitialized) { - // logger.fine("first time initialization"); - //} - if (!this.isFrozen) { - //if (!detectorName.equals(this.getDetector())) { - // logger.finest("detector name is different"); - //} - //if (runNumber != this.getRun()) { - // logger.finest("run number is different"); - //} - logger.info("new detector " + detectorName + " and run #" + runNumber); - //logger.fine("old detector " + this.getDetector() + " and run #" + this.getRun()); - + + if (!isInitialized || !detectorName.equals(getDetector()) || runNumber != getRun()) { + if (!isFrozen) { + logger.info("setDetector - new detector " + detectorName + " and run #" + runNumber); initialize(detectorName, runNumber); } else { logger.finest("Conditions changed but will be ignored because manager is frozen."); @@ -267,11 +274,11 @@ } /** - * True if the current run number is from the Test Run. + * True if Test Run configuration is selected. * @return True if current run is from the Test Run. */ public boolean isTestRun() { - return isTestRun(this.getRun()); + return isTestRun; } /** @@ -279,94 +286,84 @@ * configuration and loading of conditions onto the Detector. */ protected void initialize(String detectorName, int runNumber) throws ConditionsNotFoundException { - - logger.config("initializing with detector " + detectorName + " and run number " + runNumber); - - // Did the user not specify a specific configuration? - if (resourceConfig == null && fileConfig == null) { - // We will try to pick a reasonable configuration based on the run number. - if (runNumber > 0 && runNumber <= TEST_RUN_MAX_RUN) { + + logger.info("initializing detector " + detectorName + " and run " + runNumber); + + // Is not configured yet? + if (!isConfigured) { + if (isTestRun(runNumber)) { + logger.config("using Test Run configuration"); // This looks like the Test Run so use the custom configuration for it. - this.resourceConfig = DatabaseConditionsManager.TEST_RUN_CONFIG; - logger.config("using test run XML config " + this.resourceConfig); - } else { - // This is probably the Engineering Run or later so use the default configuration. - this.resourceConfig = DatabaseConditionsManager.DEFAULT_CONFIG; - logger.config("using default XML config " + this.resourceConfig); - } - } - - // Is there both a resource and file configuration specified? - if (resourceConfig != null && fileConfig != null) { - // It is an error if both of these have been set externally. - throw new RuntimeException("Both resource and file configuration are set."); + setXmlConfig(DatabaseConditionsManager.TEST_RUN_CONFIG); + } else if (runNumber > TEST_RUN_MAX_RUN) { + // Run numbers greater than max of Test Run assumed to be Eng Run (for now!). + setXmlConfig(DatabaseConditionsManager.ENGRUN_CONFIG); + } + } + + registerConverters(); + + ecalSetup.setEnabled(setupEcalDetector); + svtSetup.setEnabled(setupSvtDetector); + + // Open the database connection. + openConnection(); + + // Call the super class's setDetector method to construct the detector object. + super.setDetector(detectorName, runNumber); + + // Should all conditions sets be cached? + if (cacheAllConditions) { + // Cache the conditions sets of all registered converters. + logger.info("caching all conditions sets ..."); + cacheConditionsSets(); } - if (this.resourceConfig != null) { - // Load the resource configuration. - this.configure(getClass().getResourceAsStream(this.resourceConfig)); - } else if (this.fileConfig != null) { - try { - // Load the file configuration. - this.configure(new FileInputStream(this.fileConfig)); - } catch (FileNotFoundException e) { - throw new RuntimeException(e); - } - } - - // Is this run number from the Test Run? - if (isTestRun(runNumber)) { + if (closeConnectionAfterInitialize) { + // Close the connection. + closeConnection(); + } + + // Should the conditions system be frozen now? + if (freezeAfterInitialize) { + // Freeze the conditions system so subsequent updates will be ignored. + freeze(); + logger.info("frozen after initialize"); + } + + isInitialized = true; + + logger.config("conditions system initialized successfully"); + } + + /** + * + */ + private void registerConverters() { + if (svtConverter != null) { + // Remove old SVT converter. + removeConditionsConverter(svtConverter); + } + + if (ecalConverter != null) { + // Remove old ECAL converter. + registerConditionsConverter(ecalConverter); + } + + // Is configured for TestRun? + if (isTestRun()) { // Load Test Run specific converters. - this.registerConditionsConverter(new TestRunSvtConditionsConverter()); - this.registerConditionsConverter(new TestRunEcalConditionsConverter()); + svtConverter = new TestRunSvtConditionsConverter(); + ecalConverter = new TestRunEcalConditionsConverter(); + logger.config("registering Test Run conditions converters"); } else { // Load the default converters. - this.registerConditionsConverter(new SvtConditionsConverter()); - this.registerConditionsConverter(new EcalConditionsConverter()); - } - - // Call the super class's setDetector method to construct the detector object. - super.setDetector(detectorName, runNumber); - - // Should all conditions sets be pre-cached? - if (this.cacheAllConditions) { - // Cache the conditions sets of all registered converters. - logger.info("precaching all conditions sets ..."); - this.cacheConditionsSets(); - } - - // Should the ECAL detector be setup with conditions data? - if (this.setupEcalDetector) { - try { - // Load conditions onto the ECAL subdetector object. - setupEcal(); - } catch (Exception e) { - e.printStackTrace(); - logger.log(Level.WARNING, "Error loading ECAL conditions onto detector.", e); - } - } - - // Should the SVT detector be setup with conditions data? - if (this.setupSvtDetector) { - try { - // Load conditions onto the SVT subdetector object. - setupSvt(runNumber); - } catch (Exception e) { - e.printStackTrace(); - logger.log(Level.WARNING, "Error loading SVT conditions onto detector.", e); - } - } - - this.isInitialized = true; - - logger.config("conditions system initialized successfully"); - - // Should the conditions system be frozen now? - if (this.freezeAfterInitialize) { - logger.info("executing freeze after initialize"); - // Freeze the conditions system so subsequent updates will be ignored. - this.freeze(); - } + svtConverter = new SvtConditionsConverter(); + ecalConverter = new EcalConditionsConverter(); + logger.config("registering default conditions converters"); + } + registerConditionsConverter(svtConverter); + registerConditionsConverter(ecalConverter); } /** @@ -395,9 +392,13 @@ public void setXmlConfig(File fileConfig) { logger.config("setting XML config from file " + fileConfig.getPath()); if (!fileConfig.exists()) { - throw new IllegalArgumentException("Config file does not exist."); - } - this.fileConfig = fileConfig; + throw new IllegalArgumentException("The config file does not exist: " + fileConfig.getPath()); + } + try { + configure(new FileInputStream(fileConfig)); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } } /** @@ -406,7 +407,8 @@ */ public void setXmlConfig(String resourceConfig) { logger.config("setting XML config from resource " + resourceConfig); - this.resourceConfig = resourceConfig; + InputStream is = getClass().getResourceAsStream(resourceConfig); + configure(is); } /** @@ -492,7 +494,7 @@ * @param query The SQL query string. * @return The ResultSet from the query or null. */ - public ResultSet selectQuery(String query) { + ResultSet selectQuery(String query) { logger.fine(query); ResultSet result = null; Statement statement = null; @@ -541,9 +543,8 @@ logger.setLevel(level); logger.getHandlers()[0].setLevel(level); - this.ecalLoader.setLogLevel(level); - this.svtLoader.setLogLevel(level); - this.testRunSvtloader.setLogLevel(level); + ecalSetup.setLogLevel(level); + svtSetup.setLogLevel(level); } /** @@ -554,7 +555,7 @@ * @return The set of matching conditions records. */ public ConditionsRecordCollection findConditionsRecords(String name) { - ConditionsRecordCollection runConditionsRecords = this.getCollection(ConditionsRecordCollection.class); + ConditionsRecordCollection runConditionsRecords = getCollection(ConditionsRecordCollection.class); logger.fine("searching for condition " + name + " in " + runConditionsRecords.size() + " records"); ConditionsRecordCollection foundConditionsRecords = new ConditionsRecordCollection(); for (ConditionsRecord record : runConditionsRecords) { @@ -596,8 +597,8 @@ * any subsequent updates to run number or detector name will be ignored. */ public void freeze() { - if (this.getDetector() != null && this.getRun() != -1) { - this.isFrozen = true; + if (getDetector() != null && getRun() != -1) { + isFrozen = true; logger.config("The conditions system has been frozen and will ignore subsequent updates."); } else { logger.warning("The conditions system cannot be frozen now because it is not initialized yet."); @@ -608,7 +609,7 @@ * Un-freeze the conditions system so that updates will be received again. */ public void unfreeze() { - this.isFrozen = false; + isFrozen = false; } /** @@ -616,22 +617,29 @@ * @return True if conditions system is frozen. */ public boolean isFrozen() { - return this.isFrozen; + return isFrozen; } /** * Set the name of the ECAL sub-detector. * @param ecalName The name of the ECAL. */ - public void setEcalName(String ecalName) { + protected void setEcalName(String ecalName) { + if (ecalName == null) { + throw new IllegalArgumentException("The ecalName is null"); + } this.ecalName = ecalName; + ecalSetup.setEcalName(ecalName); } /** * Set the name of the SVT sub-detector. * @param svtName The name of the SVT. */ - public void setSvtName(String svtName) { + protected void setSvtName(String svtName) { + if (svtName == null) { + throw new IllegalArgumentException("The svtName is null"); + } this.svtName = svtName; } @@ -649,7 +657,7 @@ * @throws SQLException If there is a database error. * @throws ConditionsObjectException If there is a problem with the ConditionsObjects. */ - public <ObjectType extends ConditionsObject> void insertCollection(AbstractConditionsObjectCollection<ObjectType> collection) throws SQLException, ConditionsObjectException { + public <ObjectType extends ConditionsObject> void insertCollection(ConditionsObjectCollection<ObjectType> collection) throws SQLException, ConditionsObjectException { if (collection == null) { throw new IllegalArgumentException("The collection is null."); @@ -665,7 +673,7 @@ } if (collection.getCollectionId() == -1) { try { - collection.setCollectionId(this.getNextCollectionID(tableMetaData.getTableName())); + collection.setCollectionId(getNextCollectionID(tableMetaData.getTableName())); } catch (ConditionsObjectException e) { throw new RuntimeException(e); } @@ -673,7 +681,11 @@ logger.info("inserting collection with ID " + collection.getCollectionId() + " and key " + collection.getTableMetaData().getKey() + " into table " + tableMetaData.getTableName()); - openConnection(); + boolean openedConnection = false; + if (!isConnected()) { + openConnection(); + openedConnection = true; + } PreparedStatement preparedStatement = null; @@ -712,7 +724,9 @@ } catch (Exception e) { } - closeConnection(); + if (openedConnection) { + closeConnection(); + } } /** @@ -754,7 +768,7 @@ * @return The table information or null if does not exist. */ public TableMetaData findTableMetaData(String name) { - return this.tableRegistry.findByTableName(name); + return tableRegistry.findByTableName(name); } /** @@ -763,7 +777,7 @@ * @return The table information or null if does not exist. */ public TableMetaData findTableMetaData(Class<?> type) { - return this.tableRegistry.findByCollectionType(type); + return tableRegistry.findByCollectionType(type); } /* @@ -771,34 +785,7 @@ * Private methods below here. * ******************************* */ - - /** - * Setup the ECAL subdetector with conditions information. - */ - private void setupEcal() { - logger.config("setting up ECAL conditions on detector"); - EcalConditions conditions = getCachedConditions(EcalConditions.class, ECAL_CONDITIONS).getCachedData(); - ecalLoader.load(this.getDetectorObject().getSubdetector(ecalName), conditions); - logger.fine("done setting up ECAL conditions on detector"); - } - - /** - * Set the SVT subdetector with conditions information. - * @param runNumber The run number. - */ - private void setupSvt(int runNumber) { - if (isTestRun(runNumber)) { - logger.config("loading Test Run SVT detector conditions"); - TestRunSvtConditions svtConditions = getCachedConditions(TestRunSvtConditions.class, SVT_CONDITIONS).getCachedData(); - testRunSvtloader.load(getDetectorObject().getSubdetector(svtName), svtConditions); - } else { - logger.config("loading default SVT detector conditions"); - SvtConditions svtConditions = getCachedConditions(SvtConditions.class, SVT_CONDITIONS).getCachedData(); - svtLoader.load(getDetectorObject().getSubdetector(svtName), svtConditions); - } - logger.config("done loading SVT detector conditions"); - } - + /** * Cache conditions sets for all known tables. */ @@ -806,7 +793,7 @@ for (TableMetaData meta : tableRegistry.values()) { try { logger.fine("caching conditions " + meta.key + " with type "+ meta.collectionClass.getCanonicalName()); - this.getCachedConditions(meta.collectionClass, meta.key); + getCachedConditions(meta.collectionClass, meta.key); } catch (Exception e) { logger.warning("could not cache conditions " + meta.key); } @@ -843,20 +830,6 @@ * @param in the InputStream which should be in XML format */ private void configure(InputStream in) { - - // Create XML document from stream. - Document config = createDocument(in); - - loadConfiguration(config); - } - - /** - * Create an XML document from an <code>InputStream</code>. - * @param in The InputStream. - * @return The XML document. - */ - private static Document createDocument(InputStream in) { - // Create an XML document from an InputStream. SAXBuilder builder = new SAXBuilder(); Document config = null; try { @@ -864,9 +837,15 @@ } catch (JDOMException | IOException e) { throw new RuntimeException(e); } - return config; - } - + loadConfiguration(config); + try { + in.close(); + } catch (IOException e) { + logger.warning(e.getMessage()); + } + isConfigured = true; + } + /** * Setup the database connection from a file specified by a Java system * property setting. This is possibly overridden by subsequent, direct API calls to @@ -879,7 +858,7 @@ if (!f.exists()) { throw new RuntimeException("Connection properties file from " + CONNECTION_PROPERTY + " does not exist."); } - this.setConnectionProperties(f); + setConnectionProperties(f); } } @@ -887,6 +866,7 @@ * Load configuration information from an XML document. * @param document The XML document. */ + // TODO: Add detectorName and runNumber settings. private void loadConfiguration(Document document) { Element node = document.getRootElement().getChild("configuration"); @@ -896,22 +876,52 @@ Element element = node.getChild("setupSvtDetector"); if (element != null) { - this.setupSvtDetector = Boolean.parseBoolean(element.getText()); + setupSvtDetector = Boolean.parseBoolean(element.getText()); + logger.config("setupSvtDetector = " + setupSvtDetector); } element = node.getChild("setupEcalDetector"); if (element != null) { - this.setupEcalDetector = Boolean.parseBoolean(element.getText()); + setupEcalDetector = Boolean.parseBoolean(element.getText()); + logger.config("setupEcalDetector = " + setupEcalDetector); + } + + element = node.getChild("ecalName"); + if (element != null) { + setEcalName(element.getText()); + } + + element = node.getChild("svtName"); + if (element != null) { + setSvtName(element.getText()); } element = node.getChild("freezeAfterInitialize"); if (element != null) { - this.freezeAfterInitialize = Boolean.parseBoolean(element.getText()); + freezeAfterInitialize = Boolean.parseBoolean(element.getText()); + logger.config("freezeAfterInitialize = " + freezeAfterInitialize); } element = node.getChild("cacheAllCondition"); if (element != null) { - this.cacheAllConditions = Boolean.parseBoolean(element.getText()); + cacheAllConditions = Boolean.parseBoolean(element.getText()); + logger.config("cacheAllConditions = " + cacheAllConditions); + } + + element = node.getChild("isTestRun"); + if (element != null) { + isTestRun = Boolean.parseBoolean(element.getText()); + logger.config("isTestRun = " + isTestRun); + } + + element = node.getChild("logLevel"); + if (element != null) { + setLogLevel(Level.parse(element.getText())); + } + + element = node.getChild("closeConnectionAfterInitialize"); + if (element != null) { + closeConnectionAfterInitialize = Boolean.parseBoolean(element.getText()); } } }