Author: hthomann
Date: Fri Dec 28 17:16:10 2012
New Revision: 1426585

URL: http://svn.apache.org/viewvc?rev=1426585&view=rev
Log:
OPENJPA-2257: Properly synchronized _supportedKeys in ConigurationImpl as 
contributed by Albert Lee, as well as additional changes to return a copy of 
_supportedKeys. Test case contributed by Stephan Hagedorn.

Added:
    
openjpa/branches/2.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestGetProperty.java
      - copied unchanged from r1426582, 
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestGetProperty.java
Modified:
    
openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java

Modified: 
openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java?rev=1426585&r1=1426584&r2=1426585&view=diff
==============================================================================
--- 
openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
 (original)
+++ 
openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
 Fri Dec 28 17:16:10 2012
@@ -118,7 +118,7 @@ public class ConfigurationImpl
     private boolean _globals = false;
     private String _auto = null;
     private final List<Value> _vals = new ArrayList<Value>();
-    private Set<String> _supportedKeys;
+    private Set<String> _supportedKeys = new TreeSet<String>();
     
     // property listener helper
     private PropertyChangeSupport _changeSupport = null;
@@ -708,19 +708,21 @@ public class ConfigurationImpl
      * The Values that are {@linkplain Value#makePrivate() marked private} are 
filtered out. 
      */
     public Set<String> getPropertyKeys() {
-        if (_supportedKeys != null) 
-            return _supportedKeys;
-        
-        _supportedKeys = new TreeSet<String>();
-        for (Value val : _vals) {
-            if (val.isPrivate())
-                continue;
-            List<String> keys = val.getPropertyKeys();
-            for (String key : keys) {
-                _supportedKeys.add(fixPrefix(key));
+        synchronized (_supportedKeys) {
+            if (_supportedKeys.size() == 0) {
+                for (Value val : _vals) {
+                    if (val.isPrivate())
+                        continue;
+                    List<String> keys = val.getPropertyKeys();
+                    for (String key : keys) {
+                        _supportedKeys.add(fixPrefix(key));
+                    }
+                }
             }
         }
-        return _supportedKeys;
+        //OJ2257: Return a copy of _supportedKeys as calls to this method 
(e.g. 
+        //BrokerImpl.getSupportedProperties()) may add to this set.
+        return new TreeSet<String>(_supportedKeys);
     }
     
     /**


Reply via email to