You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2010/02/17 21:52:25 UTC
svn commit: r911174 -
/openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
Author: mikedd
Date: Wed Feb 17 20:52:24 2010
New Revision: 911174
URL: http://svn.apache.org/viewvc?rev=911174&view=rev
Log:
OPENJPA-1350:
Synchronize when registering aliases
Modified:
openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
Modified: openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=911174&r1=911173&r2=911174&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Wed Feb 17 20:52:24 2010
@@ -117,7 +117,7 @@
private Map _ifaces = Collections.synchronizedMap(new HashMap());
private Map _queries = new HashMap();
private Map _seqs = new HashMap();
- private Map _aliases = Collections.synchronizedMap(new HashMap());
+ private Map<String, List<Class<?>>> _aliases = Collections.synchronizedMap(new HashMap<String, List<Class<?>>>());
private Map _pawares = Collections.synchronizedMap(new HashMap());
private Map _nonMapped = Collections.synchronizedMap(new HashMap());
@@ -1568,9 +1568,11 @@
if (_locking) {
synchronized (_registered) {
_registered.add(cls);
+ registerAlias(cls);
}
} else {
_registered.add(cls);
+ registerAlias(cls);
}
}
@@ -1588,6 +1590,33 @@
}
}
}
+
+ /**
+ * Register the given class to the list of known aliases.
+ * The alias is registered only if the class has been enhanced.
+ *
+ */
+ void registerAlias(Class<?> cls) {
+ registerAlias(PCRegistry.getTypeAlias(cls), cls);
+ }
+
+ public void registerAlias(String alias, Class<?> cls) {
+ if (alias == null)
+ return;
+ try {
+ if (alias != null) {
+ List<Class<?>> classes = _aliases.get(alias);
+ if (classes == null)
+ classes = new ArrayList<Class<?>>(3);
+ if (!classes.contains(cls)) {
+ classes.add(cls);
+ _aliases.put(alias, classes);
+ }
+ }
+ } catch (IllegalStateException ise) {
+ // the class has not been registered to PCRegistry
+ }
+ }
/**
* Updates our datastructures with the latest registered classes.
@@ -1701,33 +1730,16 @@
// set alias for class
String alias = PCRegistry.getTypeAlias(cls);
if (alias != null) {
- if(_locking){
- setAliasForClassLocking(alias, cls);
- }else{
- setAliasForClassInternal(alias, cls);
+ if (_locking) {
+ synchronized (_aliases) {
+ registerAlias(alias, cls);
+ }
+ } else {
+ registerAlias(alias, cls);
}
}
}
- /**
- * Private worker method for use by processRegisterClasses.
- */
- private void setAliasForClassLocking(String alias, Class cls){
- synchronized(_aliases){
- setAliasForClassInternal(alias, cls);
- }
- }
- /**
- * Private worker method for use by processRegisterClasses.
- */
- private void setAliasForClassInternal(String alias, Class cls){
- List classList = (List) _aliases.get(alias);
- if (classList == null) {
- classList = new ArrayList(3);
- _aliases.put(alias, classList);
- }
- if (!classList.contains(cls))
- classList.add(cls);
- }
+
/**
* Private worker method for use by processRegisterClasses.
*/