You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2013/05/10 21:15:05 UTC
svn commit: r1481151 - in /commons/proper/configuration/trunk/src:
main/java/org/apache/commons/configuration/
test/java/org/apache/commons/configuration/
Author: oheger
Date: Fri May 10 19:15:05 2013
New Revision: 1481151
URL: http://svn.apache.org/r1481151
Log:
Configuration interface now extends SynchronizerSupport.
Implementations of the interface methods are provided by AbstractConfiguration.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java?rev=1481151&r1=1481150&r2=1481151&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java Fri May 10 19:15:05 2013
@@ -37,6 +37,7 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration.interpol.InterpolatorSpecification;
import org.apache.commons.configuration.interpol.Lookup;
+import org.apache.commons.configuration.sync.LockMode;
import org.apache.commons.configuration.sync.NoOpSynchronizer;
import org.apache.commons.configuration.sync.Synchronizer;
import org.apache.commons.lang.BooleanUtils;
@@ -604,6 +605,53 @@ public abstract class AbstractConfigurat
}
/**
+ * {@inheritDoc} This implementation delegates to {@code beginRead()} or
+ * {@code beginWrite()}, depending on the {@code LockMode} argument.
+ * Subclasses can override these protected methods to perform additional
+ * steps when a configuration is locked.
+ *
+ * @since 2.0
+ * @throws NullPointerException if the argument is <b>null</b>
+ */
+ public final void lock(LockMode mode)
+ {
+ switch (mode)
+ {
+ case READ:
+ beginRead();
+ break;
+ case WRITE:
+ beginWrite();
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported LockMode: " + mode);
+ }
+ }
+
+ /**
+ * {@inheritDoc} This implementation delegates to {@code endRead()} or
+ * {@code endWrite()}, depending on the {@code LockMode} argument.
+ * Subclasses can override these protected methods to perform additional
+ * steps when a configuration's lock is released.
+ *
+ * @throws NullPointerException if the argument is <b>null</b>
+ */
+ public final void unlock(LockMode mode)
+ {
+ switch (mode)
+ {
+ case READ:
+ endRead();
+ break;
+ case WRITE:
+ endWrite();
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported LockMode: " + mode);
+ }
+ }
+
+ /**
* Notifies this configuration's {@link Synchronizer} that a read operation
* is about to start. This method is called by all methods which access this
* configuration in a read-only mode. Subclasses may override it to perform
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java?rev=1481151&r1=1481150&r2=1481151&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java Fri May 10 19:15:05 2013
@@ -22,6 +22,7 @@ import java.util.Map;
import org.apache.commons.configuration.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration.interpol.Lookup;
+import org.apache.commons.configuration.sync.SynchronizerSupport;
/**
@@ -55,7 +56,7 @@ import org.apache.commons.configuration.
* @author Commons Configuration team
* @version $Id$
*/
-public interface Configuration extends ImmutableConfiguration
+public interface Configuration extends ImmutableConfiguration, SynchronizerSupport
{
/**
* Return a decorator Configuration containing every key from the current
Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java?rev=1481151&r1=1481150&r2=1481151&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java Fri May 10 19:15:05 2013
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTru
import org.apache.commons.configuration.SynchronizerTestImpl.Methods;
import org.apache.commons.configuration.io.FileHandler;
+import org.apache.commons.configuration.sync.LockMode;
import org.apache.commons.configuration.sync.NoOpSynchronizer;
import org.junit.Before;
import org.junit.Test;
@@ -68,6 +69,55 @@ public class TestAbstractConfigurationSy
}
/**
+ * Tests whether a read lock can be obtained.
+ */
+ @Test
+ public void testLockRead()
+ {
+ config.lock(LockMode.READ);
+ sync.verify(Methods.BEGIN_READ);
+ }
+
+ /**
+ * Tests whether a write lock can be obtained.
+ */
+ @Test
+ public void testLockWrite()
+ {
+ config.lock(LockMode.WRITE);
+ sync.verify(Methods.BEGIN_WRITE);
+ }
+
+ /**
+ * Tests lock() with a null argument.
+ */
+ @Test(expected = NullPointerException.class)
+ public void testLockNull()
+ {
+ config.lock(null);
+ }
+
+ /**
+ * Tests whether a read lock can be released.
+ */
+ @Test
+ public void testUnlockRead()
+ {
+ config.unlock(LockMode.READ);
+ sync.verify(Methods.END_READ);
+ }
+
+ /**
+ * Tests whether a write lock can be released.
+ */
+ @Test
+ public void testUnlockWrite()
+ {
+ config.unlock(LockMode.WRITE);
+ sync.verify(Methods.END_WRITE);
+ }
+
+ /**
* Tests the correct synchronization of addProperty().
*/
@Test