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 2011/08/18 19:20:04 UTC

svn commit: r1159318 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-kernel/src/main/java/org/apache/openjpa/conf/

Author: mikedd
Date: Thu Aug 18 17:20:04 2011
New Revision: 1159318

URL: http://svn.apache.org/viewvc?rev=1159318&view=rev
Log:
OPENJPA-2040: Default to non-strict MetaData and Mapping Factories when a user provided factory class is set.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/MappingFactoryValue.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MetaDataPlusMappingFactory.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/MappingFactoryValue.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/MappingFactoryValue.java?rev=1159318&r1=1159317&r2=1159318&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/MappingFactoryValue.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/MappingFactoryValue.java Thu Aug 18 17:20:04 2011
@@ -19,6 +19,7 @@
 package org.apache.openjpa.jdbc.conf;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.jdbc.meta.MetaDataPlusMappingFactory;
 import org.apache.openjpa.lib.conf.Configuration;
 import org.apache.openjpa.lib.conf.Configurations;
@@ -155,8 +156,20 @@ public class MappingFactoryValue
 
         // if no mapping setting, return meta factory alone, assuming it handles
         // both metadata and mapping
-        MetaDataFactory ret = (map == null) ? meta
-            : new MetaDataPlusMappingFactory(meta, map);
-        return ret;
+        MetaDataFactory ret = null;
+        if(map == null ) { 
+            ret = meta;
+        }
+        else {
+            if( conf instanceof OpenJPAConfiguration) {
+                ret = new MetaDataPlusMappingFactory(meta, map, (OpenJPAConfiguration) conf);
+            }
+            else {
+                ret = new MetaDataPlusMappingFactory(meta, map);
+            }
+        }
+        
+        return ret; 
+        
     }
 }

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MetaDataPlusMappingFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MetaDataPlusMappingFactory.java?rev=1159318&r1=1159317&r2=1159318&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MetaDataPlusMappingFactory.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MetaDataPlusMappingFactory.java Thu Aug 18 17:20:04 2011
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.meta.ClassMetaData;
 import org.apache.openjpa.meta.DelegatingMetaDataFactory;
 import org.apache.openjpa.meta.MetaDataFactory;
@@ -42,16 +43,30 @@ public class MetaDataPlusMappingFactory
 
     private final MetaDataFactory _map;
 
+    
     /**
      * Constructor; supply delegates.
      */
-    public MetaDataPlusMappingFactory(MetaDataFactory meta,
-        MetaDataFactory map) {
+    public MetaDataPlusMappingFactory(MetaDataFactory meta, MetaDataFactory map) {
+        this(meta, map, null);
+
+    }
+    
+    /**
+     * Constructor, supply delegates and Configuration. 
+     * 
+     * @param meta MetaFactory delegate, should not be null.
+     * @param map  MappingFactory delegate, should not be null.
+     * @param conf Configuration in use. Used to determine whether delegates should use strict mode. 
+     */
+    public MetaDataPlusMappingFactory(MetaDataFactory meta, MetaDataFactory map, OpenJPAConfiguration conf) {
         super(meta);
         _map = map;
 
-        meta.setStrict(true);
-        map.setStrict(true);
+        if(conf.getCompatibilityInstance().getMetaFactoriesAreStrict()) {
+            meta.setStrict(true);
+            map.setStrict(true);
+        }
     }
 
     /**

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java?rev=1159318&r1=1159317&r2=1159318&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java Thu Aug 18 17:20:04 2011
@@ -72,6 +72,7 @@ public class Compatibility {
     private boolean _convertPositionalParametersToNamed = false;
     
     private boolean _useListAttributeForArrays = false; 
+    private boolean _metaFactoriesAreStrict = false; 
     
     /**
      * Whether to require exact identity value types when creating object
@@ -640,4 +641,29 @@ public class Compatibility {
     public void setUseListAttributeForArrays(boolean useListAttribute ) { 
         _useListAttributeForArrays = useListAttribute;
     }
+
+    /**
+     * Whether the MetaDataFactory and MappingFactory should be set to strict mode. If strict mode is used a
+     * MetaDataFactory will only resolve MetaData (no JDBC mappings), and a MappingFactory will only resolve Mapping
+     * information.
+     * 
+     * @since 2.2.0
+     * @return Whether strict mode should be used.
+     */
+    public boolean getMetaFactoriesAreStrict() { 
+        return _metaFactoriesAreStrict;
+    }
+    
+    /**
+     * Set whether MetaDataFactories and MappingFactories will be strictly separate.
+     * 
+     * @since 2.2.0
+     * 
+     * @param metaFactoriesAreStrict
+     *            True if the MetaDataFactory should only process metadata, and the MappingFactory should only process
+     *            mappings.
+     */
+    public void setMetaFactoriesAreStrict(boolean metaFactoriesAreStrict) {
+        _metaFactoriesAreStrict = metaFactoriesAreStrict;
+    }
 }