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);
}
/**