Author: oheger Date: Thu May 10 17:26:21 2018 New Revision: 1831358 URL: http://svn.apache.org/viewvc?rev=1831358&view=rev Log: CONFIGURATION-687: Changes on reloading of combined configurations.
The reloading controller of a ReloadingCombinedConfigurationBuilder is now created only once on first access. When triggering a reloading check it is important that all child configuration sources are included. Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/ReloadingCombinedConfigurationBuilder.java commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/CombinedReloadingController.java commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestCombinedReloadingController.java Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/ReloadingCombinedConfigurationBuilder.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/ReloadingCombinedConfigurationBuilder.java?rev=1831358&r1=1831357&r2=1831358&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/ReloadingCombinedConfigurationBuilder.java (original) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/ReloadingCombinedConfigurationBuilder.java Thu May 10 17:26:21 2018 @@ -123,6 +123,21 @@ public class ReloadingCombinedConfigurat } /** + * {@inheritDoc} This implementation makes sure that the reloading state of + * the managed reloading controller is reset. Note that this has to be done + * here and not in {@link #initResultInstance(CombinedConfiguration)} + * because it must be outside of a synchronized block; otherwise, a + * dead-lock situation can occur. + */ + @Override + public CombinedConfiguration getConfiguration() throws ConfigurationException + { + CombinedConfiguration result = super.getConfiguration(); + reloadingController.resetReloadingState(); + return result; + } + + /** * {@inheritDoc} This implementation creates a builder for XML * configurations with reloading support. */ @@ -145,7 +160,10 @@ public class ReloadingCombinedConfigurat throws ConfigurationException { super.initResultInstance(result); - reloadingController = createReloadingController(); + if (reloadingController == null) + { + reloadingController = createReloadingController(); + } } /** Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/CombinedReloadingController.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/CombinedReloadingController.java?rev=1831358&r1=1831357&r2=1831358&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/CombinedReloadingController.java (original) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/CombinedReloadingController.java Thu May 10 17:26:21 2018 @@ -172,20 +172,23 @@ public class CombinedReloadingController /** * {@inheritDoc} This implementation delegates to the managed - * controllers. If one of them returns <b>true</b> from its check - * method, iteration is aborted, and result is <b>true</b>. + * controllers. For all of them the {@code checkForReloading()} + * method is called, giving them the chance to trigger a reload if + * necessary. If one of these calls returns <b>true</b>, the result of + * this method is <b>true</b>, otherwise <b>false</b>. */ @Override public boolean isReloadingRequired() { + boolean result = false; for (ReloadingController rc : owner.getSubControllers()) { if (rc.checkForReloading(null)) { - return true; + result = true; } } - return false; + return result; } /** Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestCombinedReloadingController.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestCombinedReloadingController.java?rev=1831358&r1=1831357&r2=1831358&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestCombinedReloadingController.java (original) +++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestCombinedReloadingController.java Thu May 10 17:26:21 2018 @@ -118,6 +118,8 @@ public class TestCombinedReloadingContro Boolean.FALSE); EasyMock.expect(subControllers[1].checkForReloading(null)).andReturn( Boolean.TRUE); + EasyMock.expect(subControllers[2].checkForReloading(null)).andReturn( + Boolean.FALSE); replaySubControllers(); assertTrue("Wrong result", ctrl.checkForReloading("someData")); verifySubSontrollers(); @@ -149,6 +151,10 @@ public class TestCombinedReloadingContro CombinedReloadingController ctrl = setUpController(); EasyMock.expect(subControllers[0].checkForReloading(null)).andReturn( Boolean.TRUE); + EasyMock.expect(subControllers[1].checkForReloading(null)).andReturn( + Boolean.FALSE); + EasyMock.expect(subControllers[2].checkForReloading(null)).andReturn( + Boolean.FALSE); for (ReloadingController rc : subControllers) { rc.resetReloadingState();