Author: awhite
Date: Mon Oct 2 10:39:28 2006
New Revision: 452141
URL: http://svn.apache.org/viewvc?view=rev&rev=452141
Log:
Trying a new approach to automatic enhancement in a container. Might have to
revert.
Modified:
incubator/openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
Modified:
incubator/openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java
URL:
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java?view=diff&rev=452141&r1=452140&r2=452141
==============================================================================
---
incubator/openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java
(original)
+++
incubator/openjpa/trunk/openjpa-kernel-5/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java
Mon Oct 2 10:39:28 2006
@@ -44,12 +44,12 @@
private static final Localizer _loc = Localizer.forPackage
(PCClassFileTransformer.class);
- private boolean _transforming = false;
private final MetaDataRepository _repos;
private final PCEnhancer.Flags _flags;
private final ClassLoader _tmpLoader;
private final Log _log;
private final Set _names;
+ private boolean _transforming = false;
/**
* Constructor.
@@ -92,14 +92,6 @@
_repos = repos;
_tmpLoader = tmpLoader;
- // ensure that we are using the temporary class loader for
- // all class resolution
- repos.getConfiguration().setClassResolver(new ClassResolver() {
- public ClassLoader getClassLoader(Class context, ClassLoader env) {
- return _tmpLoader;
- }
- });
-
_log = repos.getConfiguration().
getLog(OpenJPAConfiguration.LOG_ENHANCE);
_flags = flags;
@@ -112,7 +104,6 @@
public byte[] transform(ClassLoader loader, String className,
Class redef, ProtectionDomain domain, byte[] bytes)
throws IllegalClassFormatException {
-
if (loader == _tmpLoader)
return null;
@@ -123,7 +114,6 @@
return null;
_transforming = true;
-
try {
Boolean enhance = needsEnhance(className, redef, bytes);
if (enhance != null && _log.isTraceEnabled())
Modified:
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
URL:
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java?view=diff&rev=452141&r1=452140&r2=452141
==============================================================================
---
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
(original)
+++
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
Mon Oct 2 10:39:28 2006
@@ -21,7 +21,6 @@
import java.security.ProtectionDomain;
import java.util.Map;
import java.util.Properties;
-
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@@ -30,6 +29,7 @@
import javax.persistence.spi.PersistenceUnitInfo;
import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
import org.apache.openjpa.enhance.PCClassFileTransformer;
import org.apache.openjpa.kernel.Bootstrap;
import org.apache.openjpa.kernel.BrokerFactory;
@@ -39,6 +39,7 @@
import org.apache.openjpa.lib.conf.ProductDerivations;
import org.apache.openjpa.meta.MetaDataModes;
import org.apache.openjpa.meta.MetaDataRepository;
+import org.apache.openjpa.util.ClassResolver;
/**
@@ -89,16 +90,15 @@
if (cp == null)
return null;
+ // add enhancer
+ String ctOpts = (String) Configurations.getProperty
+ (CLASS_TRANSFORMER_OPTIONS, pui.getProperties());
+ pui.addTransformer(new ClassTransformerImpl(cp, ctOpts,
+ pui.getNewTempClassLoader()));
+
BrokerFactory factory = Bootstrap.newBrokerFactory(cp,
pui.getClassLoader());
- OpenJPAEntityManagerFactory emf =
- OpenJPAPersistence.toEntityManagerFactory(factory);
- Properties p = pui.getProperties();
- String ctOpts = (String) Configurations.getProperty
- (CLASS_TRANSFORMER_OPTIONS, p);
- pui.addTransformer(new ClassTransformerImpl(emf.getConfiguration(),
- ctOpts, pui.getNewTempClassLoader()));
- return emf;
+ return OpenJPAPersistence.toEntityManagerFactory(factory);
} catch (Exception e) {
throw PersistenceExceptions.toPersistenceException(e);
}
@@ -112,13 +112,31 @@
private final ClassFileTransformer _trans;
- private ClassTransformerImpl(OpenJPAConfiguration conf, String options,
- ClassLoader tempClassLoader) {
- MetaDataRepository repos = conf.getMetaDataRepositoryInstance().
- newInstance();
+ private ClassTransformerImpl(ConfigurationProvider cp, String props,
+ final ClassLoader tmpLoader) {
+ // create an independent conf for enhancement
+ OpenJPAConfiguration conf = new OpenJPAConfigurationImpl();
+ cp.setInto(conf);
+ // don't allow connections
+ conf.setConnectionUserName(null);
+ conf.setConnectionPassword(null);
+ conf.setConnectionURL(null);
+ conf.setConnectionDriverName(null);
+ conf.setConnectionFactoryName(null);
+ // use the tmp loader for everything
+ conf.setClassResolver(new ClassResolver() {
+ public ClassLoader getClassLoader(Class context,
+ ClassLoader env) {
+ return tmpLoader;
+ }
+ });
+ conf.setReadOnly(true);
+ conf.instantiateAll();
+
+ MetaDataRepository repos = conf.getMetaDataRepositoryInstance();
repos.setResolve(MetaDataModes.MODE_MAPPING, false);
_trans = new PCClassFileTransformer(repos,
- Configurations.parseProperties(options), tempClassLoader);
+ Configurations.parseProperties(props), tmpLoader);
}
public byte[] transform(ClassLoader cl, String name,