Author: curtisr7
Date: Mon May 3 15:55:16 2010
New Revision: 940490
URL: http://svn.apache.org/viewvc?rev=940490&view=rev
Log:
OPENJPA-1646: Move DataCacheManager initialization to EMF creation time to
close timing window.
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
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=940490&r1=940489&r2=940490&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 May 3 15:55:16 2010
@@ -679,24 +679,15 @@ public class OpenJPAConfigurationImpl
dataCacheManagerPlugin.set(dcm);
}
- // This boolean is used for double checked locking. We want to minimize
the amount of time that
- // we're locking here.
- private boolean dataCacheManagerInitialized = false;
public DataCacheManager getDataCacheManagerInstance() {
- if (dataCacheManagerInitialized == false) {
- synchronized (this) {
- if (dataCacheManagerInitialized == false) {
- DataCacheManager dcm = (DataCacheManager)
dataCacheManagerPlugin.get();
- if (dcm == null) {
- dcm = (DataCacheManager)
dataCacheManagerPlugin.instantiate(DataCacheManager.class, this);
- dcm.initialize(this, dataCachePlugin,
queryCachePlugin);
- }
- dataCacheManagerInitialized = true;
- return dcm;
- }
+ DataCacheManager dcm = (DataCacheManager) dataCacheManagerPlugin.get();
+ if (dcm == null) {
+ dcm = (DataCacheManager)
dataCacheManagerPlugin.instantiate(DataCacheManager.class, this);
+ if (dcm != null) {
+ dcm.initialize(this, dataCachePlugin, queryCachePlugin);
}
}
- return (DataCacheManager) dataCacheManagerPlugin.get();
+ return dcm;
}
public void setDataCache(String dataCache) {
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=940490&r1=940489&r2=940490&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 May 3 15:55:16 2010
@@ -102,12 +102,8 @@ public class PersistenceProviderImpl
// Create appropriate LifecycleEventManager
loadValidator(factory);
- // 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.
- preloadMetaDataRepository(factory);
+ // Perform post BrokerFactory initialization.
+ postBrokerFactoryInitialization(factory);
return JPAFacadeHelper.toEntityManagerFactory(factory);
} catch (Exception e) {
@@ -203,12 +199,8 @@ public class PersistenceProviderImpl
// Create appropriate LifecycleEventManager
loadValidator(factory);
- // 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.
- preloadMetaDataRepository(factory);
+ // Perform post BrokerFactory initialization.
+ postBrokerFactoryInitialization(factory);
return JPAFacadeHelper.toEntityManagerFactory(factory);
} catch (Exception e) {
@@ -258,10 +250,9 @@ public class PersistenceProviderImpl
}
/**
- * Private worker method that will call to the MetaDataRepository to
preload if the provided
- * BrokerFactory is configured to do so.
+ * Private worker method that will perform initialization that needs to
happen AFTER BrokerFactory creation.
*/
- private void preloadMetaDataRepository(BrokerFactory factory){
+ private void postBrokerFactoryInitialization(BrokerFactory factory){
// 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
@@ -279,6 +270,9 @@ public class PersistenceProviderImpl
.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction()));
mdr.preload();
}
+
+ // Get a DataCacheManager instance up front to avoid threading
concerns on first call.
+ conf.getDataCacheManagerInstance();
}
/**