You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2009/09/23 17:07:31 UTC

svn commit: r818134 - /openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java

Author: jrbauer
Date: Wed Sep 23 15:07:31 2009
New Revision: 818134

URL: http://svn.apache.org/viewvc?rev=818134&view=rev
Log:
OPENJPA-1325 Defer embeddable population until after class metadata is parsed.

Modified:
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?rev=818134&r1=818133&r2=818134&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java Wed Sep 23 15:07:31 2009
@@ -114,6 +114,8 @@
     // after embeddables are loaded.
     private static final Map<Class<?>, ArrayList<MetaDataContext>> 
         _embeddables = new HashMap<Class<?>, ArrayList<MetaDataContext>>();
+    private static final Map<Class<?>, Integer> 
+        _embeddableAccess = new HashMap<Class<?>, Integer>();
 
     static {
         _elems.put(ELEM_PKG, ELEM_PKG);
@@ -896,7 +898,7 @@
             
             if (embeddable) {
                 meta.setEmbeddable();
-                addDeferredEmbeddableMetaData(_cls, access);
+                setDeferredEmbeddableAccessType(_cls, access);
             }
         }
         
@@ -1955,8 +1957,12 @@
 	            new Class<?>[_embeddables.size()]);
 	        for (int i = classes.length - 1 ; i >= 0; i--) {
 	            try {
+	                Integer access = _embeddableAccess.get(classes[i]);
+	                if (access == null) {
+	                    access = AccessCode.UNKNOWN;
+	                }
 	                addDeferredEmbeddableMetaData(classes[i], 
-	                    AccessCode.UNKNOWN);
+	                    access);
 	            }
 	            catch (Exception e) {
 	                throw new MetaDataException(
@@ -1996,6 +2002,10 @@
             _embeddables.remove(embedType);
         }
     }
+    protected void setDeferredEmbeddableAccessType(Class<?> embedType,
+        int access) {
+        _embeddableAccess.put(embedType, access);
+    }
 
     /*
      * Clear any deferred metadata
@@ -2003,6 +2013,7 @@
     @Override
     protected void clearDeferredMetaData() {
         _embeddables.clear();
+        _embeddableAccess.clear();
     }
 
     /*