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/06/12 04:51:50 UTC

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

Author: jrbauer
Date: Fri Jun 12 02:51:49 2009
New Revision: 783968

URL: http://svn.apache.org/viewvc?rev=783968&view=rev
Log:
OPENJPA-926 Do not validate access hierarchy when mapped superclass has no persistent attributes

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java   (with props)
Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?rev=783968&r1=783967&r2=783968&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java Fri Jun 12 02:51:49 2009
@@ -2138,8 +2138,9 @@
     /**
      * Assert that this class' access type is allowed.
      * If no access style is set or an explicit style is set return.
-     * Otherwise check that the superclass access style, if defaulted, is the 
-     * same as that of this receiver. 
+     * Otherwise, if the superclass has persistent attributes,  check that 
+     * the superclass access style, if defaulted, is the same as that of this 
+     * receiver. 
      */
     private void validateAccessType() {
         if (AccessCode.isEmpty(_accessType) 
@@ -2148,7 +2149,7 @@
         ClassMetaData sup = getPCSuperclassMetaData();
         while (sup != null && sup.isExplicitAccess())
         	sup = sup.getPCSuperclassMetaData();
-        if (sup != null) {
+        if (sup != null && sup.getDeclaredFields().length > 0) {
         	int supCode = sup.getAccessType();
         	if (!AccessCode.isCompatibleSuper(_accessType, supCode))
              throw new MetaDataException(_loc.get("access-inconsistent-inherit",

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java?rev=783968&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java Fri Jun 12 02:51:49 2009
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.access;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.PrePersist;
+
+/*
+ * Mapped superclass which contains no persistent attributes, but contains
+ * a callback. 
+ */
+@MappedSuperclass
+public class MappedCallbackSup {
+
+    @PrePersist
+    public void prePersist() {
+    }    
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java?rev=783968&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java Fri Jun 12 02:51:49 2009
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.access;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class PropEntity extends MappedCallbackSup {
+    
+    private int id;
+    private String name;
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Id
+    public int getId() {
+        return id;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Basic
+    public String getName() {
+        return name;
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java?rev=783968&r1=783967&r2=783968&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java Fri Jun 12 02:51:49 2009
@@ -18,6 +18,9 @@
  */
 package org.apache.openjpa.persistence.access;
 
+import java.util.Random;
+
+import javax.persistence.EntityManager;
 import javax.persistence.Query;
 
 import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
@@ -31,55 +34,81 @@
 
 public class TestDefaultAccess extends SingleEMFTestCase {
 
+    public void setUp() {
+        setUp(CLEAR_TABLES, 
+            PropEntity.class, MappedCallbackSup.class);
+    }
+
+
+    /**
+     * Validates that an property access entity extending a mapped superclass 
+     * containing no persistent fields (only a callback) does not cause access 
+     * validation failures.
+     */
+    public void testDefaultMappedSuperclassAccess() {
+        
+        EntityManager em = emf.createEntityManager();
+                
+        PropEntity pe = new PropEntity();
+        
+        pe.setId(new Random().nextInt());
+        pe.setName("Name");
+        
+        em.getTransaction().begin();
+        em.persist(pe);
+        em.getTransaction().commit();
+        em.close();
+    }
+    
     /**
      * Validates use of access specifier of FIELD in entity-mappings.
      */
     public void testEMDefaultFieldAccess() {
-        OpenJPAEntityManagerFactorySPI emf = 
+        OpenJPAEntityManagerFactorySPI emf1 = 
             (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
             createEntityManagerFactory("Access-EMFldDef",
             "org/apache/openjpa/persistence/access/" +
             "access-def-persistence.xml");
         
-        OpenJPAEntityManagerSPI em = emf.createEntityManager();
+        OpenJPAEntityManagerSPI em = emf1.createEntityManager();
         verifyDefaultFieldAccess(em);
                         
         em.close();
-        emf.close();
+        emf1.close();
     }
 
     /**
      * Validates use of access specifier of PROPERTY in entity-mappings.
      */
     public void testEMDefaultPropertyAccess() {
-        OpenJPAEntityManagerFactorySPI emf = 
+        OpenJPAEntityManagerFactorySPI emf1 = 
             (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
             createEntityManagerFactory("Access-EMPropDef",
             "org/apache/openjpa/persistence/access/" +
             "access-def-persistence.xml");
         
-        OpenJPAEntityManagerSPI em = emf.createEntityManager();
+        OpenJPAEntityManagerSPI em = emf1.createEntityManager();
         verifyDefaultPropertyAccess(em);
 
         em.close();
-        emf.close();
+        emf1.close();
     }
 
     /**
      * Validates use of access specifier of FIELD in persistence unit defaults.
      */
     public void testPUDefaultFieldAccess() {
-        OpenJPAEntityManagerFactorySPI emf = 
+        OpenJPAEntityManagerFactorySPI emf1 = 
             (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
             createEntityManagerFactory("Access-PUFldDef",
             "org/apache/openjpa/persistence/access/" +
             "access-pudef-persistence.xml");
         
-        OpenJPAEntityManagerSPI em = emf.createEntityManager();
+        OpenJPAEntityManagerSPI em = emf1.createEntityManager();
         verifyDefaultFieldAccess(em);
                         
         em.close();
-        emf.close();
+        emf1.close();
     }
 
     /**
@@ -87,17 +116,17 @@
      * defaults.
      */
     public void testPUDefaultPropertyAccess() {
-        OpenJPAEntityManagerFactorySPI emf = 
+        OpenJPAEntityManagerFactorySPI emf1 = 
             (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
             createEntityManagerFactory("Access-PUPropDef",
             "org/apache/openjpa/persistence/access/" +
             "access-pudef-persistence.xml");
         
-        OpenJPAEntityManagerSPI em = emf.createEntityManager();
+        OpenJPAEntityManagerSPI em = emf1.createEntityManager();
         verifyDefaultPropertyAccess(em);
 
         em.close();
-        emf.close();
+        emf1.close();
     }
     
     private void verifyDefaultFieldAccess(OpenJPAEntityManagerSPI em) {