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();