Repository: incubator-tamaya Updated Branches: refs/heads/master ce4eeebb3 -> 103cb951b
TAMAYA-53 Fixed bugs found by FindBugs. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/103cb951 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/103cb951 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/103cb951 Branch: refs/heads/master Commit: 103cb951b14326ad74fe74e4e16c11746db00c98 Parents: ce4eeeb Author: Oliver B. Fischer <[email protected]> Authored: Fri Jan 16 21:51:15 2015 +0100 Committer: Oliver B. Fischer <[email protected]> Committed: Fri Jan 16 21:51:15 2015 +0100 ---------------------------------------------------------------------- .../propertysource/SystemPropertySource.java | 17 +++++++++--- .../tamaya/modules/json/JSONPropertySource.java | 28 +++++++++++++++++--- .../apache/tamaya/modules/json/JSONVisitor.java | 2 +- 3 files changed, 39 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/103cb951/java8/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java ---------------------------------------------------------------------- diff --git a/java8/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java b/java8/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java index 50d788d..abfebeb 100644 --- a/java8/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java +++ b/java8/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java @@ -22,6 +22,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Properties; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.StampedLock; /** * This {@link org.apache.tamaya.spi.PropertySource} manages the system properties. @@ -29,6 +31,12 @@ import java.util.Properties; public class SystemPropertySource extends PropertiesPropertySource { /** + * Lock for internal synchronization. + */ + private StampedLock propertySourceLock = new StampedLock(); + + + /** * previous System.getProperties().hashCode() * so we can check if we need to reload */ @@ -50,10 +58,11 @@ public class SystemPropertySource extends PropertiesPropertySource { @Override public Map<String, String> getProperties() { + Lock writeLock = propertySourceLock.asWriteLock(); // only need to reload and fill our map if something has changed - if (previousHash != System.getProperties().hashCode()) { - - synchronized (this) { + try { + writeLock.lock(); + if (previousHash != System.getProperties().hashCode()) { if (previousHash != System.getProperties().hashCode()) { @@ -68,6 +77,8 @@ public class SystemPropertySource extends PropertiesPropertySource { previousHash = systemProperties.hashCode(); } } + } finally { + writeLock.unlock(); } return super.getProperties(); http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/103cb951/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java ---------------------------------------------------------------------- diff --git a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java index 58cd248..0826bf7 100644 --- a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java +++ b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java @@ -31,6 +31,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.StampedLock; import static java.lang.String.format; @@ -41,6 +43,12 @@ public class JSONPropertySource private InputResource source; private HashMap<String, String> values; + /** + * Lock for internal synchronization. + */ + private StampedLock propertySourceLock = new StampedLock(); + + public JSONPropertySource(File file) { this(file, 0); } @@ -52,10 +60,16 @@ public class JSONPropertySource @Override public int getOrdinal() { - synchronized (this) { + Lock writeLock = propertySourceLock.asWriteLock(); + + try { + writeLock.lock(); + if (values == null) { readSource(); } + } finally { + writeLock.unlock(); } return priority; @@ -75,13 +89,19 @@ public class JSONPropertySource @Override public Map<String, String> getProperties() { - synchronized (this) { + Lock writeLock = propertySourceLock.asWriteLock(); + + try { + writeLock.lock(); + if (values == null) { readSource(); } - } - return Collections.unmodifiableMap(values); + return Collections.unmodifiableMap(values); + } finally { + writeLock.unlock(); + } } protected void readSource() { http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/103cb951/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONVisitor.java ---------------------------------------------------------------------- diff --git a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONVisitor.java b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONVisitor.java index 3868431..f52afbf 100644 --- a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONVisitor.java +++ b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONVisitor.java @@ -66,7 +66,7 @@ public class JSONVisitor { } } - private class VisitingContext { + private static class VisitingContext { private String namespace; private final ObjectNode node; private final Iterator<Map.Entry<String, JsonNode>> elements;
