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,


Reply via email to