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);