You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2009/11/03 21:56:12 UTC
svn commit: r832552 - in /openjpa/sandboxes/perf:
openjpa-kernel/src/main/java/org/apache/openjpa/conf/
openjpa-kernel/src/main/java/org/apache/openjpa/enhance/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/
openjpa-kernel/src/main/java/org/ap...
Author: curtisr7
Date: Tue Nov 3 20:56:10 2009
New Revision: 832552
URL: http://svn.apache.org/viewvc?rev=832552&view=rev
Log:
MDR preload refactoring. Added openjpa.Performance property. New testcase.
Added:
openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestPerformanceConfiguration.java (with props)
Modified:
openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java
openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/kernel/TestBrokerImpl.java
openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
Modified: openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java?rev=832552&r1=832551&r2=832552&view=diff
==============================================================================
--- openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java (original)
+++ openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java Tue Nov 3 20:56:10 2009
@@ -135,6 +135,7 @@
public QueryCompilationCacheValue queryCompilationCachePlugin;
public IntValue runtimeUnenhancedClasses;
public CacheMarshallersValue cacheMarshallerPlugins;
+ public StringValue performance;
// custom values
public BrokerFactoryValue brokerFactoryPlugin;
@@ -504,6 +505,9 @@
runtimeUnenhancedClasses.setDefault("supported");
runtimeUnenhancedClasses.setString("supported");
runtimeUnenhancedClasses.setAliasListComprehensive(true);
+
+ // Not used for anything. Handled in PersistenceProductDerivation.
+ performance = addString("Performance");
cacheMarshallerPlugins = (CacheMarshallersValue)
addValue(new CacheMarshallersValue(this));
Modified: openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java?rev=832552&r1=832551&r2=832552&view=diff
==============================================================================
--- openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java (original)
+++ openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java Tue Nov 3 20:56:10 2009
@@ -28,7 +28,6 @@
import org.apache.openjpa.lib.util.ReferenceMap;
import org.apache.openjpa.lib.util.concurrent.ConcurrentReferenceHashMap;
import org.apache.openjpa.util.UserException;
-import org.apache.openjpa.util.InvalidStateException;
/**
* Tracks registered persistence-capable classes.
@@ -55,10 +54,13 @@
public static void addRegisterClassListener(RegisterClassListener rcl) {
if (rcl == null)
return;
-
+
// we have to be positive that every listener gets notified for
// every class, so lots of locking
synchronized (_listeners) {
+ if (_listeners.contains(rcl) == true) {
+ return;
+ }
_listeners.add(rcl);
}
synchronized (_metas) {
Modified: openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java?rev=832552&r1=832551&r2=832552&view=diff
==============================================================================
--- openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java (original)
+++ openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java Tue Nov 3 20:56:10 2009
@@ -259,7 +259,7 @@
* Load the configured persistent classes list. Performed automatically
* whenever a broker is created.
*/
- private void loadPersistentTypes(ClassLoader envLoader) {
+ public void loadPersistentTypes(ClassLoader envLoader) {
// if we've loaded the persistent types and the class name list
// is empty, then we can simply return. Note that there is a
// potential threading scenario in which _persistentTypesLoaded is
Modified: openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=832552&r1=832551&r2=832552&view=diff
==============================================================================
--- openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ openjpa/sandboxes/perf/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Tue Nov 3 20:56:10 2009
@@ -28,6 +28,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -115,15 +116,15 @@
private final Map _seqs = new HashMap();
// these are set in endConfiguration()
- private Map _oids;
- private Map _impls;
- private Map _ifaces;
- private Map _aliases;
- private Map _pawares;
- private Map _nonMapped;
+ private Map _oids = Collections.synchronizedMap(new HashMap());
+ private Map _impls = Collections.synchronizedMap(new HashMap());
+ private Map _ifaces = Collections.synchronizedMap(new HashMap());
+ private Map _aliases = Collections.synchronizedMap(new HashMap());
+ private Map _pawares = Collections.synchronizedMap(new HashMap());
+ private Map _nonMapped = Collections.synchronizedMap(new HashMap());
// map of classes to lists of their subclasses
- private Map _subs;
+ private Map _subs = Collections.synchronizedMap(new HashMap());
// xml mapping
protected final XMLMetaData[] EMPTY_XMLMETAS;
@@ -140,8 +141,9 @@
// we buffer up any classes that register themselves to prevent
// reentrancy errors if classes register during a current parse (common)
- private final Collection _registered = new HashSet();
-
+ private final Collection<Class<?>> _registered = new HashSet<Class<?>>();
+ private boolean _registeredEmpty = true;
+
// set of metadatas we're in the process of resolving
private final InheritanceOrderedMetaDataList _resolving =
new InheritanceOrderedMetaDataList();
@@ -153,13 +155,10 @@
private LifecycleEventManager.ListenerList _listeners =
new LifecycleEventManager.ListenerList(3);
- private ReentrantLock _lock = null;
- // If true, all configured persistent classes will be eagerly loaded.
- protected boolean _eagerPersistentTypes = false;
+ private ReentrantLock _lock = new ReentrantLock();
protected boolean _eagerPersistentMetaData = false;
protected boolean _noLock = false;
- private static final String EAGER_PERSISTENT_TYPES = "EagerPersistentTypes";
private static final String EAGER_PERSISTENT_META_DATA = "EagerPersistentMetaData";
/**
@@ -287,23 +286,7 @@
else
_sourceMode &= ~mode;
}
-
- /**
- * Sets whether this repository will load all known persistent classes at initialization.
- * Defaults to false.
- */
- public void setEagerPersistentTypes(boolean b) {
- _eagerPersistentTypes = b;
- }
-
- /**
- * Sets whether this repository will load all known persistent classes at initialization.
- * Defaults to false.
- */
- public boolean getEagerPersistentTypes() {
- return _eagerPersistentTypes;
- }
-
+
/**
* Sets whether this repository will load all MetaData for all known persistent classes at initialization.
* Defaults to false.
@@ -327,40 +310,25 @@
return _noLock;
}
/**
- * If the openjpa.MetaDataRepository plugin value EagerPersistentMetaData=false and
- * EagerPersistentTypes=false , this method will noop. If EagerPersistentTypes=true this method
- * gets the list of persistent classes and loads them (Class.forName(..)). If EagerPersistentMetaData=true, this
+ * If the openjpa.MetaDataRepository plugin value EagerPersistentMetaData=false , this method will noop. If EagerPersistentMetaData=true, this
* method will load all persistent classes and ALL MetaData for those persistent classes.
* <p>
- * EagerPersistentMetaData=true implies EagerPersistentTypes=true.
+ * If noLock=true, calling this method will remove ALL locking from this class if EagerPersistentMetaData=true.
* <p>
*
- * If noLock=true, calling this method will also remove ALL locking from this class.
- * <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 the PersistenceProviderImpl.
*/
public void initializeEager() {
- if (_eagerPersistentMetaData == false && _eagerPersistentTypes == false) {
+ if (_eagerPersistentMetaData == false) {
return;
}
-
- if (_log.isTraceEnabled()) {
- _log.trace("MetaDataRepository NoLock=" + _noLock + ", EagerPersistentTypes=" + _eagerPersistentTypes
- + ", EagerPersistentMetaData=" + _eagerPersistentMetaData);
+ // If pooling EMFs, this method may be invoked more than once. Only perform this work once.
+ if (_eagerProcessingComplete == true) {
+ return;
}
-
- // Remove locking and use unsynchronized maps if we're loading all MetaData
- if (_noLock == true && _eagerPersistentMetaData == true) {
- _oids = new HashMap();
- _impls = new HashMap();
- _ifaces = new HashMap();
- _aliases = new HashMap();
- _pawares = new HashMap();
- _nonMapped = new HashMap();
- _subs = new HashMap();
- _lock = null;
+
+ if (_log.isTraceEnabled()) {
+ _log.trace("MetaDataRepository NoLock=" + _noLock + ", EagerPersistentMetaData=" + _eagerPersistentMetaData);
}
MultiClassLoader multi = AccessController.doPrivileged(J2DoPrivHelper.newMultiClassLoaderAction());
@@ -377,25 +345,26 @@
.trace(MetaDataRepository.class.getName() + " found the following classes : " + classes.toString());
}
+ List<Class> loaded = new ArrayList<Class>();
for (String c : classes) {
try {
Class<?> cls = AccessController.doPrivileged((J2DoPrivHelper.getForNameAction(c, true, multi)));
- if (_eagerPersistentMetaData == true) {
- // TODO -- need to test this
- // resolveAll(multi);
- // // Load query metadata
- // _factory.load(cls, MODE_QUERY, multi);
- _factory.load(cls, MODE_ALL, multi);
- }
+ loaded.add(cls);
+ // This call may be unnecessary?
+ _factory.load(cls, MODE_ALL, multi);
} catch (PrivilegedActionException pae) {
throw new MetaDataException(_loc.get("repos-initializeEager-error"), pae);
}
- }// end for
-
- // Hook this class in early so we can process registered classes and add them
- // to _aliases list.
+ }
+ resolveAll(multi);
+
+ // Hook in this class as a listener and process registered classes list to populate _aliases list.
PCRegistry.addRegisterClassListener(this);
processRegisteredClasses(multi);
+ if (_noLock == true) {
+ _lock = null;
+ }
+ _eagerProcessingComplete = true;
}
protected void lock() {
@@ -472,7 +441,7 @@
// check cache
processRegisteredClasses(envLoader);
List classList = (List) _aliases.get(alias);
-
+
// multiple classes may have been defined with the same alias: we
// will filter by checking against the current list of the
// persistent types and filter based on which classes are loadable
@@ -1151,6 +1120,7 @@
* @param mustExist if true, throws a {@link MetaDataException}
* if no metadata is found
*/
+ boolean _eagerProcessingComplete = false;
public ClassMetaData getMetaData(Object oid, ClassLoader envLoader,
boolean mustExist) {
if (oid == null && mustExist)
@@ -1563,7 +1533,7 @@
}
}
}
-
+
/**
* Updates our datastructures with the latest registered classes.
*/
@@ -1685,8 +1655,9 @@
classList = new ArrayList(3);
_aliases.put(alias, classList);
}
- if (!classList.contains(cls))
+ if (!classList.contains(cls)){
classList.add(cls);
+ }
} finally {
unlock();
}
@@ -1773,19 +1744,20 @@
}
public void endConfiguration() {
- _oids = Collections.synchronizedMap(new HashMap());
- _impls = Collections.synchronizedMap(new HashMap());
- _ifaces = Collections.synchronizedMap(new HashMap());
- _aliases = Collections.synchronizedMap(new HashMap());
- _pawares = Collections.synchronizedMap(new HashMap());
- _nonMapped = Collections.synchronizedMap(new HashMap());
- _subs = Collections.synchronizedMap(new HashMap());
- _lock = new ReentrantLock();
-
initializeMetaDataFactory();
if (_implGen == null) {
_implGen = new InterfaceImplGenerator(this);
}
+ if (_eagerPersistentMetaData == true && _noLock == true) {
+ _oids = new HashMap();
+ _impls = new HashMap();
+ _ifaces = new HashMap();
+ _aliases = new HashMap();
+ _pawares = new HashMap();
+ _nonMapped = new HashMap();
+ _subs = new HashMap();
+ // Wait till we're done loading MetaData to remove lock.
+ }
}
private void initializeMetaDataFactory() {
@@ -2300,8 +2272,7 @@
* EagerPersistentMetaData set to true.
*/
public static boolean needsInitializeEager(Options o) {
- if (o.getBooleanProperty(EAGER_PERSISTENT_TYPES) == true
- || o.getBooleanProperty(EAGER_PERSISTENT_META_DATA) == true) {
+ if (o.getBooleanProperty(EAGER_PERSISTENT_META_DATA) == true) {
return true;
}
return false;
Added: openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestPerformanceConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestPerformanceConfiguration.java?rev=832552&view=auto
==============================================================================
--- openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestPerformanceConfiguration.java (added)
+++ openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestPerformanceConfiguration.java Tue Nov 3 20:56:10 2009
@@ -0,0 +1,108 @@
+/*
+ * 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.conf;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openjpa.lib.conf.Configurations;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.kernel.common.apps.RuntimeTest1;
+import org.apache.openjpa.persistence.test.PersistenceTestCase;
+
+public class TestPerformanceConfiguration extends PersistenceTestCase {
+
+ public void testPerformanceLevel1() throws Exception {
+ OpenJPAEntityManagerFactorySPI emf = null;
+ try {
+ // Pass in an Entity because one of the properties requires one.
+ emf = createEMF(RuntimeTest1.class, "openjpa.Performance", "1");
+ OpenJPAConfiguration conf = emf.getConfiguration();
+
+ Map<String, Boolean> props =
+ stringPropertiesToMap(Configurations.getProperties(conf.getMetaDataRepository()));
+ assertTrue(props.get("EagerPersistentMetaData"));
+ assertTrue(props.get("NoLock"));
+
+ props = stringPropertiesToMap(Configurations.getProperties(conf.getBrokerImpl()));
+ assertTrue(props.get("SuppressBatchOleLogging"));
+
+ // Test Dianne's stuff
+ } finally {
+ emf.close();
+ }
+ }
+
+ public void testPerformanceLevel1MDRCollision() throws Exception {
+ OpenJPAEntityManagerFactorySPI emf = null;
+ try {
+ // Pass in an Entity because one of the properties requires one.
+ emf =
+ createEMF(RuntimeTest1.class, "openjpa.Performance", "1", "openjpa.MetaDataRepository", "NoLock=false");
+ OpenJPAConfiguration conf = emf.getConfiguration();
+
+ // Make sure that we didn't wipe the user specified data.
+ Map<String, Boolean> props =
+ stringPropertiesToMap(Configurations.getProperties(conf.getMetaDataRepository()));
+ assertTrue(props.get("EagerPersistentMetaData") == null);
+ assertFalse(props.get("NoLock"));
+
+ props = stringPropertiesToMap(Configurations.getProperties(conf.getBrokerImpl()));
+ assertTrue(props.get("SuppressBatchOleLogging"));
+
+ } finally {
+ emf.close();
+ }
+ }
+
+ public void testPerformanceLevel1BrokerImplCollision() throws Exception {
+ OpenJPAEntityManagerFactorySPI emf = null;
+ try {
+ // Pass in an Entity because one of the properties requires one.
+ emf =
+ createEMF(RuntimeTest1.class, "openjpa.Performance", "1", "openjpa.BrokerImpl",
+ "SuppressBatchOleLogging=false");
+ OpenJPAConfiguration conf = emf.getConfiguration();
+
+ // Make sure that we didn't wipe the user specified data.
+ Map<String, Boolean> props =
+ stringPropertiesToMap(Configurations.getProperties(conf.getMetaDataRepository()));
+ assertTrue(props.get("EagerPersistentMetaData"));
+ assertTrue(props.get("NoLock"));
+
+ props = stringPropertiesToMap(Configurations.getProperties(conf.getBrokerImpl()));
+ assertFalse(props.get("SuppressBatchOleLogging"));
+
+ } finally {
+ emf.close();
+ }
+ }
+
+ static Map<String, Boolean> stringPropertiesToMap(String str) {
+ List<String> properties = Arrays.asList(str.split("[,]"));
+ Map<String, Boolean> res = new HashMap<String, Boolean>();
+ for (String p : properties) {
+ String[] t = p.split("[=]");
+ res.put(t[0], Boolean.parseBoolean(t[1]));
+ }
+ return res;
+ }
+}
Propchange: openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/conf/TestPerformanceConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/kernel/TestBrokerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/kernel/TestBrokerImpl.java?rev=832552&r1=832551&r2=832552&view=diff
==============================================================================
--- openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/kernel/TestBrokerImpl.java (original)
+++ openjpa/sandboxes/perf/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/kernel/TestBrokerImpl.java Tue Nov 3 20:56:10 2009
@@ -31,15 +31,18 @@
public void setUp() {
setUp(CLEAR_TABLES, NamedEntity.class, "openjpa.FetchBatchSize", 100, "openjpa.BrokerImpl",
- "SuppressBatchOleLogging=true");
+ "SuppressBatchOleLogging=true",NamedEntity.class);
}
public void test() {
+
+ }
+ public void testSuppressBatchOleLogging() {
EntityManager em1 = emf.createEntityManager();
EntityManager em2 = emf.createEntityManager();
List<NamedEntity> entities = new ArrayList<NamedEntity>();
em1.getTransaction().begin();
- for (int i = 0; i < 75; i++) {
+ for (int i = 0; i < 5; i++) {
NamedEntity e = new NamedEntity();
entities.add(e);
em1.persist(e);
@@ -58,7 +61,6 @@
em1.getTransaction().commit();
em2.getTransaction().commit();
} catch (RollbackException ole) {
- ole.printStackTrace();
String msg = ole.getCause().getMessage();
if (msg.contains("NamedEntity")) {
fail("Shouldn't have found any Entity information in the OLE message");
Modified: openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java?rev=832552&r1=832551&r2=832552&view=diff
==============================================================================
--- openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java (original)
+++ openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java Tue Nov 3 20:56:10 2009
@@ -30,6 +30,7 @@
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
+
import javax.persistence.spi.PersistenceUnitInfo;
import javax.persistence.spi.PersistenceUnitTransactionType;
@@ -453,6 +454,8 @@
_source = source;
}
+ static final int MAX_PERF_LEVEL = 1;
+
@Override
public void setInto(Configuration conf) {
if (conf instanceof OpenJPAConfiguration) {
@@ -473,6 +476,49 @@
addProperty(key, Configurations.combinePlugins(orig,
(String) override));
}
+
+ // Setup Performance configuration properties.
+ Map props = getProperties();
+ Object perfLevel = props.get(ProductDerivations.getConfigurationKey("Performance", getProperties()));
+ if (perfLevel instanceof String) {
+ int level = 0;
+ try {
+ level = Integer.parseInt((String) perfLevel);
+ if(level > MAX_PERF_LEVEL){
+ level = MAX_PERF_LEVEL;
+ Log log = oconf.getLog(OpenJPAConfiguration.LOG_RUNTIME);
+ // We missed translation. What to do about this?
+ if(log.isInfoEnabled()){
+ // LOG ME
+ }
+ }
+ } catch (NumberFormatException nfe) {
+ if (Boolean.parseBoolean((String) perfLevel) == true) {
+ // If true, set to maximum perfLevel.
+ level = MAX_PERF_LEVEL;
+ } else {
+ level = 0;
+ }
+ }// end catch
+
+ // The reason that there is a switch here is that in the future when(if) there is another
+ // performance level, the new level will include the older(lower) levels. ie: Level 2 would include
+ // changes that were a part of Level 1.
+ switch (level) {
+ case 1:
+ // TODO -- add a trace point if we found a user property conflicting with
+ // the performance prop?
+ String key = ProductDerivations.getConfigurationKey("MetaDataRepository", getProperties());
+ if (props.containsKey(key) == false) {
+ addProperty(key, "NoLock=true,EagerPersistentMetaData=true");
+ }
+ key = ProductDerivations.getConfigurationKey("BrokerImpl", getProperties());
+ if (props.containsKey(key) == false) {
+ addProperty(key, "SuppressBatchOleLogging=true");
+ }
+ break;
+ }
+ }
}
super.setInto(conf, null);
Modified: openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java?rev=832552&r1=832551&r2=832552&view=diff
==============================================================================
--- openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java (original)
+++ openjpa/sandboxes/perf/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java Tue Nov 3 20:56:10 2009
@@ -20,6 +20,7 @@
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
+import java.security.AccessController;
import java.security.ProtectionDomain;
import java.util.Map;
@@ -33,12 +34,14 @@
import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
import org.apache.openjpa.enhance.PCClassFileTransformer;
+import org.apache.openjpa.kernel.AbstractBrokerFactory;
import org.apache.openjpa.kernel.Bootstrap;
import org.apache.openjpa.kernel.BrokerFactory;
import org.apache.openjpa.lib.conf.Configuration;
import org.apache.openjpa.lib.conf.ConfigurationProvider;
import org.apache.openjpa.lib.conf.Configurations;
import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.util.J2DoPrivHelper;
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.lib.util.Options;
import org.apache.openjpa.meta.MetaDataModes;
@@ -90,7 +93,12 @@
// any exceptions here because we want to fail-fast.
OpenJPAConfiguration conf = factory.getConfiguration();
Options o = Configurations.parseProperties(Configurations.getProperties(conf.getMetaDataRepository()));
- if(MetaDataRepository.needsInitializeEager(o) == true){
+ if (MetaDataRepository.needsInitializeEager(o) == true) {
+ MetaDataRepository mdr = conf.getMetaDataRepositoryInstance();
+ mdr.setValidate(MetaDataRepository.VALIDATE_RUNTIME, true);
+ mdr.setResolve(MetaDataRepository.MODE_MAPPING_INIT, true);
+ ((AbstractBrokerFactory) factory).loadPersistentTypes((ClassLoader) AccessController.doPrivileged(
+ J2DoPrivHelper.getContextClassLoaderAction()));
conf.getMetaDataRepositoryInstance().initializeEager();
}
@@ -175,7 +183,12 @@
// any exceptions here because we want to fail-fast.
OpenJPAConfiguration conf = factory.getConfiguration();
Options o = Configurations.parseProperties(Configurations.getProperties(conf.getMetaDataRepository()));
- if(MetaDataRepository.needsInitializeEager(o) == true){
+ if (MetaDataRepository.needsInitializeEager(o) == true) {
+ MetaDataRepository mdr = conf.getMetaDataRepositoryInstance();
+ mdr.setValidate(MetaDataRepository.VALIDATE_RUNTIME, true);
+ mdr.setResolve(MetaDataRepository.MODE_MAPPING_INIT, true);
+ ((AbstractBrokerFactory) factory).loadPersistentTypes((ClassLoader) AccessController
+ .doPrivileged(J2DoPrivHelper.getContextClassLoaderAction()));
conf.getMetaDataRepositoryInstance().initializeEager();
}