Author: curtisr7
Date: Mon Oct  5 17:14:29 2009
New Revision: 821925

URL: http://svn.apache.org/viewvc?rev=821925&view=rev
Log:
OPENJPA-250: Moved preloading to later in the init process and only create MDR 
if preload is configured.

Modified:
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
    
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
    
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
    
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java?rev=821925&r1=821924&r2=821925&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
 Mon Oct  5 17:14:29 2009
@@ -85,11 +85,7 @@
     public JDBCBrokerFactory(JDBCConfiguration conf) {
         super(conf);
     }
-
-    public JDBCBrokerFactory(JDBCConfiguration conf, boolean earlyInit) {
-        super(conf, earlyInit);
-    }
-    
+   
     public Map<String,Object> getProperties() {
         // add platform property
         Map<String,Object> props = super.getProperties();

Modified: 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java?rev=821925&r1=821924&r2=821925&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
 (original)
+++ 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
 Mon Oct  5 17:14:29 2009
@@ -150,13 +150,10 @@
         return (AbstractBrokerFactory) _pool.get(key);
     }
 
-    protected AbstractBrokerFactory(OpenJPAConfiguration config) {
-       this(config, true); 
-    }
     /**
      * Constructor. Configuration must be provided on construction.
      */
-    protected AbstractBrokerFactory(OpenJPAConfiguration config, boolean 
earlyInit) {
+    protected AbstractBrokerFactory(OpenJPAConfiguration config) {
         _conf = config;
         _brokers = newBrokerSet();
         getPcClassLoaders();
@@ -167,25 +164,6 @@
                 _conf.getConnectionRetainModeConstant(), false).close(); 
         }
 
-        if (!earlyInit)
-            return;
-        // This eager metadata loading is invoked at construction. 
-        // It can not happen during the MetaDataRepository configuration 
because 
-        // within a container environment an uninitialized repository must be 
passed
-        // to the PCClassFileTransformer. If we attempt to load before 
registering
-        // the class transformer, we miss the class being defined by the JVM 
and in turn
-        // we fail to enhance our entities.
-        try {
-            MetaDataRepository mdr = config.getMetaDataRepositoryInstance();
-            mdr.preload();
-        } catch (MetaDataException e) {
-            // recognize metadata related error if using early initialization
-            throw e;
-        } catch (Throwable t) {
-            // swallow other errors because merely trying to obtain a 
repository 
-            // may trigger a database connection 
-            
_conf.getConfigurationLog().error(_loc.get("factory-init-error",t));
-        }
         initWriteBehindCallback();        
     }
 

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=821925&r1=821924&r2=821925&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 Oct  5 17:14:29 2009
@@ -315,8 +315,7 @@
      * all internal data container structures.
      * If the openjpa.MetaDataRepository plugin value preload=false is set, 
this method will noop.
      * <p>
-     * NOTE : This method is not thread safe and should ONLY be called by the 
AbstractBrokerFactory
-     * constructor.
+     * NOTE : This method is not thread safe and should ONLY be called by 
PersistenceProviderImpl.
      * 
      * @see #getPersistentTypeNames(boolean, ClassLoader)
      */

Modified: 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java?rev=821925&r1=821924&r2=821925&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
 Mon Oct  5 17:14:29 2009
@@ -42,6 +42,7 @@
 import org.apache.openjpa.lib.conf.Configurations;
 import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.Options;
 import org.apache.openjpa.meta.MetaDataModes;
 import org.apache.openjpa.meta.MetaDataRepository;
 import org.apache.openjpa.persistence.validation.ValidationUtils;
@@ -94,6 +95,16 @@
             // TODO - Can this be moved back to BrokerImpl.initialize()?
             // Create appropriate LifecycleEventManager
             loadValidator(_log, conf);
+
+            // We need to wait to preload until after we get back a fully 
configured/instantiated
+            // BrokerFactory. This is because it is possible that someone has 
extended OpenJPA
+            // functions and they need to be allowed time to configure 
themselves before we go off and
+            // start instanting configurable objects 
(ie:openjpa.MetaDataRepository). Don't catch
+            // any exceptions here because we want to fail-fast.
+            Options o = 
Configurations.parseProperties(Configurations.getProperties("openjpa.MetaDataRepository"));
+            if(o.getBooleanProperty("Preload")){
+                conf.getMetaDataRepositoryInstance().preload();
+            }
             
             return JPAFacadeHelper.toEntityManagerFactory(factory);
         } catch (Exception e) {
@@ -180,7 +191,16 @@
             OpenJPAConfiguration conf = factory.getConfiguration();
             _log = conf.getLog(OpenJPAConfiguration.LOG_RUNTIME);
             loadValidator(_log, conf);
-
+            // We need to wait to preload until after we get back a fully 
configured/instantiated
+            // BrokerFactory. This is because it is possible that someone has 
extended OpenJPA
+            // functions and they need to be allowed time to configure 
themselves before we go off and
+            // start instanting configurable objects 
(ie:openjpa.MetaDataRepository). Don't catch
+            // any exceptions here because we want to fail-fast.
+            Options o = 
Configurations.parseProperties(Configurations.getProperties("openjpa.MetaDataRepository"));
+            if(o.getBooleanProperty("Preload")){
+                conf.getAbstractBrokerFactoryInstance().preload();
+            }
+            
             return JPAFacadeHelper.toEntityManagerFactory(factory);
         } catch (Exception e) {
             throw PersistenceExceptions.toPersistenceException(e);
@@ -213,7 +233,7 @@
     protected OpenJPAConfiguration newConfigurationImpl() {
         return new OpenJPAConfigurationImpl();
     }
-    
+        
     /**
      * Java EE 5 class transformer.
      */


Reply via email to