You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2019/06/27 10:47:42 UTC

[tomee] 03/05: Explicitly check where a openejb-cmp-generated-orm.xml descriptor may have been included incorrectly.

This is an automated email from the ASF dual-hosted git repository.

jgallimore pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit 70da11645afc940ddaea4fd60bd388ae525a1808
Author: Jonathan Gallimore <jo...@jrg.me.uk>
AuthorDate: Thu Jun 27 11:45:10 2019 +0100

    Explicitly check where a openejb-cmp-generated-orm.xml descriptor may have been included
    incorrectly.
---
 .../arquillian/tests/cmp/sample/custom-orm.xml     |  4 ++--
 .../apache/openejb/config/CmpJpaConversion.java    | 22 +++++++++++++++++-----
 .../openejb/core/cmp/cmp2/Cmp2Generator.java       |  2 +-
 3 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/resources/org/apache/openejb/arquillian/tests/cmp/sample/custom-orm.xml b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/resources/org/apache/openejb/arquillian/tests/cmp/sample/custom-orm.xml
index b6414e4..2605550 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/resources/org/apache/openejb/arquillian/tests/cmp/sample/custom-orm.xml
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/resources/org/apache/openejb/arquillian/tests/cmp/sample/custom-orm.xml
@@ -31,7 +31,7 @@
                 <column name="movie_name" length="250"/>
             </basic>
             <basic name="genre"/>
-            <many-to-many mapped-by="movies" name="actors" />
+            <many-to-many mapped-by="movies" name="actors" target-entity="openejb.org.apache.openejb.arquillian.tests.cmp.sample.Actor" access="FIELD"/>
         </attributes>
     </entity>
     <entity class="openejb.org.apache.openejb.arquillian.tests.cmp.sample.Actor" name="Actor">
@@ -47,7 +47,7 @@
             <basic name="name">
                 <column name="actor_name" length="250"/>
             </basic>
-            <many-to-many name="movies"/>
+            <many-to-many name="movies" target-entity="openejb.org.apache.openejb.arquillian.tests.cmp.sample.Movie" access="FIELD"/>
         </attributes>
     </entity>
 </entity-mappings>
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java b/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
index be9dbbd..1acac8a 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
@@ -134,7 +134,6 @@ class CmpJpaConversion implements DynamicDeployer {
             appModule.setCmpMappings(cmpMappings);
         }
 
-        // todo scan existing persistence module for all entity mappings and don't generate mappings for them
 
         final Set<String> definedMappedClasses = new HashSet<>();
 
@@ -151,12 +150,12 @@ class CmpJpaConversion implements DynamicDeployer {
             }
         }
 
-        // we process this one jar-file at a time...each contributing to the 
-        // app mapping data 
+        // we process this one jar-file at a time...each contributing to the
+        // app mapping data
         for (final EjbModule ejbModule : appModule.getEjbModules()) {
             final EjbJar ejbJar = ejbModule.getEjbJar();
 
-            // scan for CMP entity beans and merge the data into the collective set 
+            // scan for CMP entity beans and merge the data into the collective set
             for (final EnterpriseBean enterpriseBean : ejbJar.getEnterpriseBeans()) {
                 if (isCmpEntity(enterpriseBean)) {
                     processEntityBean(ejbModule, definedMappedClasses, cmpMappings, (EntityBean) enterpriseBean);
@@ -164,7 +163,7 @@ class CmpJpaConversion implements DynamicDeployer {
             }
 
             // if there are relationships defined in this jar, get a list of the defined
-            // entities and process the relationship maps. 
+            // entities and process the relationship maps.
             final Relationships relationships = ejbJar.getRelationships();
             if (relationships != null) {
 
@@ -193,8 +192,21 @@ class CmpJpaConversion implements DynamicDeployer {
         if (!cmpMappings.getEntity().isEmpty()) {
             final PersistenceUnit persistenceUnit = getCmpPersistenceUnit(appModule);
 
+            final boolean generatedOrmXmlProvided = appModule.getClassLoader().getResource(GENERATED_ORM_XML) != null;
             if (! persistenceUnit.getMappingFile().contains(GENERATED_ORM_XML)) {
+                // explicit check for openejb-cmp-generated-orm, as this is generated and added to <mapping-file>
+                if (generatedOrmXmlProvided) {
+                    LOGGER.warning("App module " + appModule.getModuleId() + " provides " + GENERATED_ORM_XML + ", but does not " +
+                            "specify it using <mapping-file> in persistence.xml for the CMP persistence unit, and it may conflict " +
+                            "with the generated mapping file. Consider renaming the file and explicitly referencing it in persistence.xml");
+                }
                 persistenceUnit.getMappingFile().add(GENERATED_ORM_XML);
+            } else {
+                if (generatedOrmXmlProvided) {
+                    LOGGER.warning("App module " + appModule.getModuleId() + " provides " + GENERATED_ORM_XML + " and additionally "
+                            + cmpMappings.getEntity().size() + "mappings have been generated. Consider renaming the " + GENERATED_ORM_XML + " in " +
+                            "your deployment archive to avoid any conflicts.");
+                }
             }
 
             for (final Entity entity : cmpMappings.getEntity()) {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java b/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java
index e04e549..de64f4a 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java
@@ -751,7 +751,7 @@ public class Cmp2Generator implements Opcodes {
 
         // return this.${cmrField.name}Cmr.get(this.${cmdField.name});  
         // this takes the value stored in the CMR field (which might be a single value or 
-        // a Set or Collection), and hands it to the appropriate accessor. 
+        // a Set or Collection), and hands it to the appropriate accessor.
         mv.visitMethodInsn(INVOKEVIRTUAL, cmrField.getAccessorInternalName(), "get", cmrField.getCmrStyle().getGetterDescriptor(), false);
         // if the style is a single value, then we're going to need to cast this 
         // to the target class before returning.