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/05/13 05:04:58 UTC

svn commit: r774177 - in /openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/ openjpa-persistence/src/main/java/org/apache/openjpa/persistence/

Author: jrbauer
Date: Wed May 13 03:04:58 2009
New Revision: 774177

URL: http://svn.apache.org/viewvc?rev=774177&view=rev
Log:
OPENJPA-926 Add annotation support for embeddables and correct Transient issue

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java?rev=774177&r1=774176&r2=774177&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java Wed May 13 03:04:58 2009
@@ -26,14 +26,11 @@
 
 import javax.persistence.Query;
 
-import org.apache.openjpa.jdbc.ant.ReverseMappingToolTask.AccessType;
 import org.apache.openjpa.meta.AccessCode;
 import org.apache.openjpa.meta.ClassMetaData;
-import org.apache.openjpa.meta.FieldMetaData;
 import org.apache.openjpa.meta.MetaDataRepository;
 import org.apache.openjpa.persistence.ArgumentException;
 import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
-import org.apache.openjpa.persistence.test.AllowFailure;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
 public class TestExplicitAccess extends SingleEMFTestCase {
@@ -48,17 +45,15 @@
             AbstractMappedSuperProperty.class, FieldSub.class,
             MappedSuperProperty.class, FieldSub2.class,
             SuperPropertyEntity.class, FieldSub3.class,
-            MixedMappedSuper.class, MixedFieldSub.class //,
-            // These persistent types are commented out until
-            // support for embeddable access types is complete
-//            FieldEmbedEntity.class, EmbedFieldAccess.class,
-//            PropEmbedEntity.class, EmbedPropAccess.class,
-//            PropMixedEntity.class, EmbedMixedAccess.class,
-//            MixedNestedEmbedEntity.class, EmbedInnerProp.class,
-//            EmbedOuterField.class, MixedMultEmbedEntity.class,
-//            FieldAccessPropStratsEntity.class, 
-//            PropAccessFieldStratsEntity.class,
-          /*  EmbedId.class */);
+            MixedMappedSuper.class, MixedFieldSub.class,
+            FieldEmbedEntity.class, EmbedFieldAccess.class,
+            PropEmbedEntity.class, EmbedPropAccess.class,
+            PropMixedEntity.class, EmbedMixedAccess.class,
+            MixedNestedEmbedEntity.class, EmbedInnerProp.class,
+            EmbedOuterField.class, MixedMultEmbedEntity.class,
+            FieldAccessPropStratsEntity.class, 
+            PropAccessFieldStratsEntity.class,
+            EmbedId.class);
     }
 
     
@@ -626,8 +621,6 @@
      * Validates an embeddable with field access can be used within an
      * entity with property access
      */
-    @AllowFailure(value=true, 
-        message="Support for explicit Access on embeddables is not complete.")
     public void testEmbeddablesField() {
         OpenJPAEntityManagerSPI em = emf.createEntityManager();
         
@@ -675,8 +668,6 @@
      * Validates an embeddable with property access can be used within an
      * entity with field access
      */
-    @AllowFailure(value=true, 
-        message="Support for explicit Access on embeddables is not complete.")
     public void testEmbeddablesProperty() {
         OpenJPAEntityManagerSPI em = emf.createEntityManager();
         
@@ -724,8 +715,6 @@
      * Validates an embeddable with mixed access can be used within an
      * entity with mixed access
      */
-    @AllowFailure(value=true, 
-        message="Support for explicit Access on embeddables is not complete.")
     public void testMixedEmbeddables() {
         OpenJPAEntityManagerSPI em = emf.createEntityManager();
         
@@ -776,8 +765,6 @@
      * Validates that a mix of access types can be used within
      * an embeddable stack.
      */
-    @AllowFailure(value=true, 
-        message="Support for explicit Access on embeddables is not complete.")
     public void testNestedEmbeddables() {
         OpenJPAEntityManagerSPI em = emf.createEntityManager();
         
@@ -828,8 +815,6 @@
      * Validates that a mix of access types can be used by an
      * an entity with mulitple embeddables.
      */
-    @AllowFailure(value=true, 
-        message="Support for explicit Access on embeddables is not complete.")
     public void testMultipleEmbeddables() {
         OpenJPAEntityManagerSPI em = emf.createEntityManager();
         
@@ -901,8 +886,6 @@
      * strategies from within an entity with explicit field access (except for
      * the id field, which is field default)
      */
-    @AllowFailure(value=true, 
-        message="Support for explicit Access on embeddables is not complete.")
     public void testPropertyAccessStrategies() {
         OpenJPAEntityManagerSPI em = emf.createEntityManager();
 
@@ -995,8 +978,6 @@
      * strategies from within an entity with explicit property access (except
      * for the id field, which is property default)
      */
-    @AllowFailure(value=true, 
-        message="Support for explicit Access on embeddables is not complete.")
     public void testFieldAccessStrategies() {
         OpenJPAEntityManagerSPI em = emf.createEntityManager();
 

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java?rev=774177&r1=774176&r2=774177&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java Wed May 13 03:04:58 2009
@@ -1446,7 +1446,7 @@
         fmd.setEmbedded(true);
         
         if (fmd.getEmbeddedMetaData() == null)
-            fmd.addEmbeddedMetaData();
+            fmd.addEmbeddedMetaData(getAccessCode(fmd.getDeclaredType()));
     }
 
     /**
@@ -1577,7 +1577,7 @@
                     "Persistent(embedded=true)"));
             fmd.setEmbedded(true);
             if (fmd.getEmbeddedMetaData() == null) {
-                fmd.addEmbeddedMetaData();
+                fmd.addEmbeddedMetaData(getAccessCode(fmd.getDeclaredType()));
             }
         }
     }
@@ -1604,7 +1604,8 @@
                     "PersistentCollection(embeddedElement=true)"));
             fmd.getElement().setEmbedded(true);
             if (fmd.getElement().getEmbeddedMetaData() == null) {
-                fmd.getElement().addEmbeddedMetaData();
+                fmd.getElement().addEmbeddedMetaData(
+                    getAccessCode(fmd.getElement().getDeclaredType()));
             }
         }
     }
@@ -1630,7 +1631,7 @@
         if (!isEnum && JavaTypes.maybePC(elem)) {
             elem.setEmbedded(true);
             if (elem.getEmbeddedMetaData() == null)
-                elem.addEmbeddedMetaData();
+                elem.addEmbeddedMetaData(getAccessCode(elem.getDeclaredType()));
         }
     }
     
@@ -1655,7 +1656,8 @@
                     "PersistentMap(embeddedKey=true)"));
             fmd.getKey().setEmbedded(true);
             if (fmd.getKey().getEmbeddedMetaData() == null) {
-                fmd.getKey().addEmbeddedMetaData();
+                fmd.getKey().addEmbeddedMetaData(
+                    getAccessCode(fmd.getKey().getDeclaredType()));
             }
         }
         if (anno.elementEmbedded()) {
@@ -1664,7 +1666,8 @@
                     "PersistentMap(embeddedValue=true)"));
             fmd.getElement().setEmbedded(true);
             if (fmd.getElement().getEmbeddedMetaData() == null)
-                fmd.getElement().addEmbeddedMetaData();
+                fmd.getElement().addEmbeddedMetaData(
+                    getAccessCode(fmd.getElement().getDeclaredType()));
         }
     }
 

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java?rev=774177&r1=774176&r2=774177&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java Wed May 13 03:04:58 2009
@@ -594,7 +594,12 @@
     	return member != null && member instanceof AnnotatedElement
     	    && annotatedFilter.includes((AnnotatedElement)member);
     }
-    
+
+    private boolean isNotTransient(Member member) {
+        return member != null && member instanceof AnnotatedElement
+            && nonTransientFilter.includes((AnnotatedElement)member);
+    }
+
     /**
      * Gets either the instance field or the getter method depending upon the 
      * access style of the given meta-data.
@@ -609,7 +614,8 @@
         	access;
         if (field == null && getter == null)
         	error(meta, _loc.get("access-no-property", cls, property));
-    	if (isAnnotated(field) && isAnnotated(getter))
+    	if ((isNotTransient(getter) && isAnnotated(getter)) && 
+    	     isNotTransient(field) && isAnnotated(field))
     		throw new IllegalStateException(_loc.get("access-duplicate", 
     			field, getter).toString());