You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2007/08/21 02:45:24 UTC

svn commit: r567886 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/ openjpa-kernel/src/main/java/org/apache/openjpa/conf/ openjpa-kernel/src/main/java/org/a...

Author: pcl
Date: Mon Aug 20 17:45:23 2007
New Revision: 567886

URL: http://svn.apache.org/viewvc?rev=567886&view=rev
Log:
OPENJPA-293. Allow runtime redefinition to be disabled via a configuration setting. We really should sweep through the code and change ImplHelper to take a Configuration as an argument, but that won't change the behavior; it'll just make some of the validations more eager.

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementConfiguration.java
Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Param.java
    openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryKey.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java
    openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/conf/localizer.properties
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configuration.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.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/EntityManagerImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Param.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Param.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Param.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Param.java Mon Aug 20 17:45:23 2007
@@ -64,7 +64,8 @@
 
     public void setImplicitType(Class type) {
         _type = type;
-        _container = (getMetaData() == null || !ImplHelper.isManagedType(type))
+        _container = (getMetaData() == null || !ImplHelper.isManagedType(
+            getMetaData().getRepository().getConfiguration(), type))
             && (Collection.class.isAssignableFrom(type)
             || Map.class.isAssignableFrom(type));
     }

Modified: openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java (original)
+++ openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java Mon Aug 20 17:45:23 2007
@@ -62,7 +62,9 @@
      * will need to do state comparisons to detect changes to newly inserted
      * instances after a flush has been called.
      *
-     * @return the new subclasses
+     * @return the new subclasses, or <code>null</code> if subclassing is
+     * disabled in <code>conf</code> or <code>classes</code> is
+     * <code>null</code>.
      *
      * @since 1.0.0
      */
@@ -74,6 +76,8 @@
             return null;
         if (classes.size() == 0)
             return Collections.EMPTY_LIST;
+        if (!conf.getRuntimeClassOptimization())
+            return null;
 
         Log log = conf.getLog(OpenJPAConfiguration.LOG_ENHANCE);
         boolean redefine = ClassRedefiner.canRedefineClasses();

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java Mon Aug 20 17:45:23 2007
@@ -1337,24 +1337,24 @@
 	 *
 	 * @since 0.3.2.3
 	 */
-	public void setRetryClassRegistration (boolean warn);
+	public void setRetryClassRegistration(boolean warn);
 
-	/**
-	 * Wrapper for JCA usage of {@link #setRetryClassRegistration(boolean)}.
-	 *
-	 * @since 0.3.2.3
-	 */
-	public void setRetryClassRegistration (Boolean warn);
+    /**
+     * Wrapper for JCA usage of {@link #setRetryClassRegistration(boolean)}.
+     *
+     * @since 0.3.2.3
+     */
+	public void setRetryClassRegistration(Boolean warn);
 
 	/**
 	 * Backwards compatibility options.
 	 */
-	public String getCompatibility ();
+	public String getCompatibility();
 
 	/**
 	 * Backwards compatibility options.
 	 */
-	public void setCompatibility (String compatibility);
+	public void setCompatibility(String compatibility);
 
 	/**
 	 * Backwards compatibility options.
@@ -1395,4 +1395,25 @@
      * @since 1.0.0
      */
     public BrokerFactoryEventManager getBrokerFactoryEventManager();
+
+    /**
+     * Whether or not runtime class optimization is enabled.
+     *
+     * @since 1.0.0
+     */
+    public boolean getRuntimeClassOptimization();
+
+    /**
+     * Whether or not runtime class optimization is enabled.
+     *
+     * @since 1.0.0
+     */
+    public void setRuntimeClassOptimization(Boolean enabled);
+
+    /**
+     * Wrapper for JCA usage of {@link #setRetryClassRegistration(boolean)}.
+     *
+     * @since 1.0.0
+     */
+    public void setRuntimeClassOptimization(boolean enabled);
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java Mon Aug 20 17:45:23 2007
@@ -131,6 +131,7 @@
     public ObjectValue orphanedKeyPlugin;
     public ObjectValue compatibilityPlugin;
     public QueryCompilationCacheValue queryCompilationCachePlugin;
+    public BooleanValue runtimeClassOptimization;
 
     // custom values
     public BrokerFactoryValue brokerFactoryPlugin;
@@ -479,6 +480,9 @@
             "getQueryCompilationCacheInstance");
         addValue(queryCompilationCachePlugin);
         
+        runtimeClassOptimization = addBoolean("RuntimeClassOptimization");
+        runtimeClassOptimization.setDefault("true");
+
         // initialize supported options that some runtimes may not support
         supportedOptions.add(OPTION_NONTRANS_READ);
         supportedOptions.add(OPTION_OPTIMISTIC);
@@ -1422,6 +1426,19 @@
         return _brokerFactoryEventManager;
     }
 
+    public boolean getRuntimeClassOptimization() {
+        return runtimeClassOptimization.get();
+    }
+
+    public void setRuntimeClassOptimization(Boolean enabled) {
+        setRuntimeClassOptimization(enabled.booleanValue());
+    }
+
+    public void setRuntimeClassOptimization(boolean enabled) {
+        assertNotReadOnly();
+        runtimeClassOptimization.set(enabled);
+    }
+
     public void instantiateAll() {
         super.instantiateAll();
         getMetaDataRepositoryInstance();
@@ -1439,7 +1456,6 @@
     }
     
     public Value[] getDynamicValues() {
-    	return new Value[] {dataCacheTimeout,fetchBatchSize,lockTimeout};
+    	return new Value[] { dataCacheTimeout, fetchBatchSize, lockTimeout };
     }
-
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryKey.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryKey.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryKey.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryKey.java Mon Aug 20 17:45:23 2007
@@ -181,7 +181,8 @@
                 case JavaTypes.COLLECTION:
                 case JavaTypes.MAP:
                 case JavaTypes.OBJECT:
-                    if (!ImplHelper.isManagedType(types[i]))
+                    if (!ImplHelper.isManagedType(
+                        q.getStoreContext().getConfiguration(), types[i]))
                         return null;
                     break;
             }

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=567886&r1=567885&r2=567886&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 Mon Aug 20 17:45:23 2007
@@ -1596,10 +1596,8 @@
 
         int val = _repos.getValidate();
         boolean runtime = (val & _repos.VALIDATE_RUNTIME) != 0;
-        // ##### what to do here? This should essentially never fail anymore.
-        // ##### Maybe remove altogether?
         boolean validate =
-            !ImplHelper.isManagedType(_type)
+            !ImplHelper.isManagedType(getRepository().getConfiguration(), _type)
             || (val & MetaDataRepository.VALIDATE_UNENHANCED) == 0;
 
         // we only do any actions for metadata mode
@@ -1628,10 +1626,8 @@
             log.trace(_loc.get((embed) ? "resolve-embed-meta" : "resolve-meta",
                 this + "@" + System.identityHashCode(this)));
 
-        // ##### what to do here? This should essentially never fail anymore.
-        // ##### either remove, or convert to warning.
         if (runtime && !_type.isInterface() &&
-            !ImplHelper.isManagedType(_type))
+            !ImplHelper.isManagedType(getRepository().getConfiguration(),_type))
             throw new MetaDataException(_loc.get("not-enhanced", _type));
 
         // are we the target of an embedded value?

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java Mon Aug 20 17:45:23 2007
@@ -1639,11 +1639,9 @@
 
         MetaDataRepository repos = getRepository();
         int validate = repos.getValidate();
-        // ##### what to do here? This should essentially never fail anymore.
-        // ##### Maybe remove the isManagedType check.
         if ((validate & MetaDataRepository.VALIDATE_META) != 0
-            && (!ImplHelper
-            .isManagedType(_owner.getDescribedType())
+            && (!ImplHelper.isManagedType(repos.getConfiguration(),
+                _owner.getDescribedType())
             || (validate & MetaDataRepository.VALIDATE_UNENHANCED) == 0)) {
             validateLRS();
             if ((validate & repos.VALIDATE_RUNTIME) == 0)

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Mon Aug 20 17:45:23 2007
@@ -288,7 +288,7 @@
         ClassMetaData meta = getMetaDataInternal(cls, envLoader);
         if (meta == null && mustExist) {
             if (cls != null &&
-                !ImplHelper.isManagedType(cls))
+                !ImplHelper.isManagedType(_conf, cls))
                 throw new MetaDataException(_loc.get("no-meta-notpc", cls)).
                     setFatal(false);
 

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java Mon Aug 20 17:45:23 2007
@@ -201,7 +201,7 @@
         if (val == null || _identity != null)
             return;
 
-        if (ImplHelper.isManagedType(val.getClass()))
+        if (ImplHelper.isManagedType(null, val.getClass()))
             _identity = Boolean.TRUE;
         else
             _identity = Boolean.FALSE;

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java Mon Aug 20 17:45:23 2007
@@ -64,7 +64,7 @@
 
         // don't serialize persistent objects exceptions to prevent
         // reading in all the state
-        if (!ImplHelper.isManagedType(ob.getClass()))
+        if (!ImplHelper.isManagedType(null, ob.getClass()))
             return false;
 
         // now do an actual test to see if we will be
@@ -94,7 +94,7 @@
             return ob.getClass().getName() + "-" + oid.toString();
         }
 
-        if (ImplHelper.isManagedType(ob.getClass())) {
+        if (ImplHelper.isManagedType(null, ob.getClass())) {
             // never call toString() on a PersistenceCapable, since
             // it may access persistent fields; fall-back to using
             // the standard object stringification mechanism. New

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java Mon Aug 20 17:45:23 2007
@@ -210,10 +210,13 @@
      *
      * @param type the class to test
      * @return true if the class is manageable.
+     *
+     * @since 1.0.0
      */
-    public static boolean isManagedType(Class type) {
-        return PersistenceCapable.class.isAssignableFrom(type)
-            || type != null && PCRegistry.isRegistered(type);
+    public static boolean isManagedType(OpenJPAConfiguration conf, Class type) {
+        return (PersistenceCapable.class.isAssignableFrom(type) || conf == null)
+            || (type != null && conf.getRuntimeClassOptimization()
+                && PCRegistry.isRegistered(type));
     }
 
     /**

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java Mon Aug 20 17:45:23 2007
@@ -610,7 +610,7 @@
     protected BCClass generateProxyBeanBytecode(Class type, boolean runtime) {
         if (Modifier.isFinal(type.getModifiers()))
             return null;
-        if (ImplHelper.isManagedType(type))
+        if (ImplHelper.isManagedType(null, type))
             return null;
 
         // we can only generate a valid proxy if there is a copy constructor

Modified: openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/conf/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/conf/localizer.properties?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/conf/localizer.properties (original)
+++ openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/conf/localizer.properties Mon Aug 20 17:45:23 2007
@@ -541,16 +541,11 @@
 Compatibility-expert: true
 Compatibility-interface: org.apache.openjpa.conf.Compatibility
 
-QueryCompilationCache-name: Query compilation cache
-QueryCompilationCache-desc: Plugin used to cache query compilation data. \
-    Must implement java.util.Map. Does not need to be thread-safe -- it will \
-    be wrapped via the Collections.synchronizedMap() method if it does not \
-    extend org.apache.openjpa.util.CacheMap.
-QueryCompilationCache-type: General
-QueryCompilationCache-cat: Cache.Queries
-QueryCompilationCache-displayorder: 50
-QueryCompilationCache-expert: true
-QueryCompilationCache-interface: java.util.Map
+RuntimeClassOptimization-name: Runtime class optimization
+RuntimeClassOptimization-desc: Either "true" or "false".
+RuntimeClassOptimization-type: General
+RuntimeClassOptimization-cat: Optimization
+RuntimeClassOptimization-displayorder: 50
 
 no-named-cf: use a DataSource bound to JNDI
 diff-specs: Attempt to configure for multiple specifications.  Was configured \

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configuration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configuration.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configuration.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configuration.java Mon Aug 20 17:45:23 2007
@@ -227,18 +227,24 @@
     /**
      * Modifies a <em>dynamic</em> property of this receiver even when 
      * {@link #setReadOnly(boolean) frozen}. 
+     *
+     * @since 1.0.0
      */
     public void modifyDynamic(String property, Object newValue);
     
     /**
      * Affirms if the given property can be modified <em>dynamically</em> i.e.
      * even after the receiver is {@link #setReadOnly(boolean) frozen}. 
+     *
+     * @since 1.0.0
      */
     public boolean isDynamic(String property);
     
     /**
      * Gets the values that can be modified <em>dynamically</em> i.e.
      * even after the receiver is {@link #setReadOnly(boolean) frozen}. 
+     *
+     * @since 1.0.0
      */
     public Value[] getDynamicValues();
 }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java Mon Aug 20 17:45:23 2007
@@ -75,7 +75,7 @@
     }
 
     public void testImplHelperCalls() {
-        assertTrue(ImplHelper.isManagedType(getUnenhancedClass()));
+        assertTrue(ImplHelper.isManagedType(null, getUnenhancedClass()));
 
         UnenhancedType un = newUnenhancedInstance();
         assertFalse(un instanceof PersistenceCapable);

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementConfiguration.java?rev=567886&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementConfiguration.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementConfiguration.java Mon Aug 20 17:45:23 2007
@@ -0,0 +1,47 @@
+/*
+ * 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.enhance;
+
+import javax.persistence.EntityManager;
+
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+import org.apache.openjpa.util.ImplHelper;
+
+public class TestEnhancementConfiguration
+    extends SingleEMFTestCase {
+
+    public void testEnhancementConfiguration() {
+        try {
+            emf = createEMF(
+                "openjpa.RuntimeClassOptimization", "false",
+                UnenhancedFieldAccess.class, CLEAR_TABLES);
+            assertFalse(ImplHelper.isManagedType(emf.getConfiguration(),
+                UnenhancedFieldAccess.class));
+            EntityManager em = emf.createEntityManager();
+            em.getTransaction().begin();
+            em.persist(new UnenhancedFieldAccess());
+            em.getTransaction().rollback();
+            fail("should not be possible to fully-initialize a system " +
+                "that depends on unenhanced types but disables runtime" +
+                "redefinition.");
+        } catch (Exception e) {
+            // expected
+        }
+    }
+}
\ No newline at end of file

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=567886&r1=567885&r2=567886&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 Mon Aug 20 17:45:23 2007
@@ -1571,7 +1571,7 @@
             meta.setQueryString(query.query());
             meta.setLanguage(QueryLanguages.LANG_SQL);
             Class res = query.resultClass();
-            if (ImplHelper.isManagedType(res))
+            if (ImplHelper.isManagedType(getConfiguration(), res))
                 meta.setCandidateType(res);
             else if (!void.class.equals(res))
                 meta.setResultType(res);

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java Mon Aug 20 17:45:23 2007
@@ -515,7 +515,8 @@
         if (entity == null)
             return false;
         OpenJPAStateManager sm = _broker.getStateManager(entity);
-        if (sm == null && !ImplHelper.isManagedType(entity.getClass()))
+        if (sm == null
+            && !ImplHelper.isManagedType(getConfiguration(), entity.getClass()))
             throw new ArgumentException(_loc.get("not-entity",
                 entity.getClass()), null, null, true);
         return sm != null && !sm.isDeleted();

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java Mon Aug 20 17:45:23 2007
@@ -189,9 +189,10 @@
     /**
      * Returns true if the specified class is an entity or embeddable type.
      */
-    public static boolean isManagedType(Class cls) {
+    public static boolean isManagedType(EntityManager em, Class cls) {
         try {
-            return ImplHelper.isManagedType(cls);
+            return ImplHelper.isManagedType(
+                JPAFacadeHelper.toBroker(em).getConfiguration(), cls);
         } catch (Exception e) {
             throw PersistenceExceptions.toPersistenceException(e);
         }

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java?rev=567886&r1=567885&r2=567886&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java Mon Aug 20 17:45:23 2007
@@ -19,6 +19,7 @@
 package org.apache.openjpa.persistence;
 
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
@@ -29,12 +30,12 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.lang.reflect.Method;
 import javax.persistence.FlushModeType;
 import javax.persistence.Query;
 import javax.persistence.TemporalType;
 
 import org.apache.commons.collections.map.LinkedMap;
+import org.apache.openjpa.enhance.Reflection;
 import org.apache.openjpa.kernel.DelegatingQuery;
 import org.apache.openjpa.kernel.DelegatingResultList;
 import org.apache.openjpa.kernel.Filters;
@@ -43,7 +44,7 @@
 import org.apache.openjpa.kernel.exps.FilterListener;
 import org.apache.openjpa.lib.rop.ResultList;
 import org.apache.openjpa.lib.util.Localizer;
-import org.apache.openjpa.enhance.Reflection;
+import org.apache.openjpa.util.ImplHelper;
 
 /**
  * Implementation of {@link Query} interface.
@@ -168,7 +169,7 @@
 
     public OpenJPAQuery setResultClass(Class cls) {
         _em.assertNotCloseInvoked();
-        if (OpenJPAPersistence.isManagedType(cls))
+        if (ImplHelper.isManagedType(_em.getConfiguration(), cls))
             _query.setCandidateType(cls, true);
         else
             _query.setResultType(cls);

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=567886&r1=567885&r2=567886&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 Mon Aug 20 17:45:23 2007
@@ -1468,7 +1468,7 @@
         String val = attrs.getValue("result-class");
         if (val != null) {
             Class type = classForName(val);
-            if (ImplHelper.isManagedType(type))
+            if (ImplHelper.isManagedType(getConfiguration(), type))
                 meta.setCandidateType(type);
             else
                 meta.setResultType(type);