Author: oheger Date: Thu Jan 18 13:02:55 2007 New Revision: 497574 URL: http://svn.apache.org/viewvc?view=rev&rev=497574 Log: CONFIGURATION-245: AbstractFileConfiguration now sends an error event when an exception occurs during a reload operation
Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestFileConfiguration.java Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java?view=diff&rev=497574&r1=497573&r2=497574 ============================================================================== --- jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java (original) +++ jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java Thu Jan 18 13:02:55 2007 @@ -115,6 +115,7 @@ { initReloadingStrategy(); setLogger(LogFactory.getLog(getClass())); + addErrorLogListener(); } /** @@ -775,6 +776,16 @@ strategy.init(); } + /** + * Performs a reload operation if necessary. This method is called on each + * access of this configuration. It asks the associated reloading strategy + * whether a reload should be performed. If this is the case, the + * configuration is cleared and loaded again from its source. If this + * operation causes an exception, the registered error listeners will be + * notified. The error event passed to the listeners is of type + * <code>EVENT_RELOAD</code> and contains the exception that caused the + * event. + */ public void reload() { synchronized (reloadLock) @@ -810,7 +821,7 @@ } catch (Exception e) { - getLogger().warn("Error when reloading configuration", e); + fireError(EVENT_RELOAD, null, null, e); // todo rollback the changes if the file can't be reloaded } finally Modified: jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestFileConfiguration.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestFileConfiguration.java?view=diff&rev=497574&r1=497573&r2=497574 ============================================================================== --- jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestFileConfiguration.java (original) +++ jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestFileConfiguration.java Thu Jan 18 13:02:55 2007 @@ -26,6 +26,9 @@ import java.io.IOException; import java.io.PrintWriter; +import org.apache.commons.configuration.event.ConfigurationErrorEvent; +import org.apache.commons.configuration.event.ConfigurationErrorListener; +import org.apache.commons.configuration.reloading.FileAlwaysReloadingStrategy; import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; import junit.framework.TestCase; @@ -520,6 +523,51 @@ assertNull("File name was not reset", copy.getFileName()); assertNotSame("Reloading strategy was not reset", config .getReloadingStrategy(), copy.getReloadingStrategy()); + } + + /** + * Tests whether an error log listener was registered at the configuration. + */ + public void testLogErrorListener() + { + PropertiesConfiguration config = new PropertiesConfiguration(); + assertEquals("No error log listener registered", 1, config + .getErrorListeners().size()); + } + + /** + * Tests handling of errors in the reload() method. + */ + public void testReloadError() throws ConfigurationException + { + class TestConfigurationErrorListener implements + ConfigurationErrorListener + { + ConfigurationErrorEvent event; + + int errorCount; + + public void configurationError(ConfigurationErrorEvent event) + { + this.event = event; + errorCount++; + } + }; + TestConfigurationErrorListener l = new TestConfigurationErrorListener(); + PropertiesConfiguration config = new PropertiesConfiguration( + RESOURCE_NAME); + config.clearErrorListeners(); + config.addErrorListener(l); + config.setReloadingStrategy(new FileAlwaysReloadingStrategy()); + config.getString("test"); + config.setFileName("Not existing file"); + config.getString("test"); + assertEquals("Wrong number of error events", 1, l.errorCount); + assertEquals("Wrong error type", + AbstractFileConfiguration.EVENT_RELOAD, l.event.getType()); + assertNull("Wrong property name", l.event.getPropertyName()); + assertNull("Wrong property value", l.event.getPropertyValue()); + assertNotNull("Exception is not set", l.event.getCause()); } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]