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 2011/11/05 18:17:33 UTC

svn commit: r1197994 [7/10] - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ant/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-jdbc/src/main/java/org/...

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringListValue.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringListValue.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringListValue.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringListValue.java Sat Nov  5 17:17:26 2011
@@ -32,7 +32,7 @@ import serp.util.Strings;
  *
  * @author Abe White
  */
-public class StringListValue extends Value<String[]> {
+public class StringListValue extends Value {
 
     public static final String[] EMPTY = new String[0];
     private static final Localizer s_loc = Localizer.forPackage
@@ -41,7 +41,7 @@ public class StringListValue extends Val
     private String[] _values = EMPTY;
 
     public StringListValue(String prop) {
-        super(String[].class, prop);
+        super(prop);
     }
 
     /**
@@ -60,6 +60,10 @@ public class StringListValue extends Val
         return _values;
     }
 
+    public Class<String []> getValueType() {
+        return String[].class;
+    }
+    
     /**
      * Unalias the value list.  This method defers to super.unalias()
      * UNLESS the string passed is a list of values for a property that
@@ -130,7 +134,7 @@ public class StringListValue extends Val
     }
 
     protected void setInternalObject(Object obj) {
-        set((String[])obj);
+        set((String[]) obj);
     }
     
     protected List<String> getAliasList() {

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringValue.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringValue.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringValue.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/StringValue.java Sat Nov  5 17:17:26 2011
@@ -25,12 +25,16 @@ import org.apache.commons.lang.StringUti
  *
  * @author Marc Prud'hommeaux
  */
-public class StringValue extends Value<String> {
+public class StringValue extends Value {
 
     private String value;
 
     public StringValue(String prop) {
-        super(String.class, prop);
+        super(prop);
+    }
+
+    public Class<String> getValueType() {
+        return String.class;
     }
 
     /**
@@ -60,7 +64,11 @@ public class StringValue extends Value<S
     }
     
     protected void setInternalObject(Object obj) {
-        set(obj == null ? null : obj.toString());
+        if (obj instanceof String) {
+            set((String) obj);
+        } else {
+            set(obj == null ? null : obj.toString());
+        }
     }
 }
 

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Value.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Value.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Value.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Value.java Sat Nov  5 17:17:26 2011
@@ -31,69 +31,44 @@ import org.apache.openjpa.lib.util.Local
 import org.apache.openjpa.lib.util.ParseException;
 
 /**
- * A value of a user-configurable property.
- * The runtime {@link Configuration configuration} is essentially comprised of a set of values.
- * <br>
- * Each Value is identified by a property key. A value can also have other {@link #getEquivalentKeys() equivalent 
- * keys}. The user can configure using either the primary or the equivalent keys. For example, the user can configure
- * the JDBC driver either by <tt>openjpa.ConnectionDriverName</tt> or <tt>javax.persistence.jdbc.driver</tt>.
- * <br>
- * A Value can be aliased. For example, a value of a fully qualified class name 
- * <tt>org.apache.openjpa.ee.ManagedRuntime</tt> can be aliased simply as <tt>managed</tt>.
- * Some values can have a {@link #isAliasListComprehensive() fixed} set of aliases such as values that represents
- * an enumeration. 
- * <br>
- * A Value may have a {@link #getDefault() default} value. Setting a default value does not imply that the vale is 
- * set to the default value. The value is explicitly set by {@link #setObject(Object) set} method. 
- * <br>
- * The values are often printed on console etc. hence the values that carry sensitive information such as 
- * password can be {@link #hide() hidden}.
- * <br>
- * Most values get frozen after an OpenJPA runtime is initialized. However, a value can be modified at runtime
- * only if it is declared as {@link #setDynamic(boolean) dynamic}. Dynamic change of a value is significant because
- * the identity of a OpenJPA runtime is hash code of {@link Configuration configuration} which, in turn, is hash code
- * of its values. This identity is critical to locate a OpenJPA runtime. The dynamic values remember their original 
- * value and that original value is used its hash code computation.
- * <br>
- * Listeners can be {@link #addListener(ValueListener) added} to a value to be notified of changes.
- * <p>
- * Value is made generic since version 2.2.0. The generic type implies the type of value e.g. Value&ltInteger&gt; 
- * holds integer value. 
+ * A configuration value.
  *
  * @author Marc Prud'hommeaux
  * @author Pinaki Poddar
  */
-public abstract class Value<T> implements Cloneable {
+public abstract class Value implements Cloneable {
 
-    private static final String[] EMPTY_ALIASES  = new String[0];
-    private static final Set<String> EMPTY_SET = Collections.emptySet();
-    
-    public static final String INVISIBLE = "******";
+    private static final String[] EMPTY_ALIASES = new String[0];
     private static final Localizer s_loc = Localizer.forPackage(Value.class);
+    public static final String INVISIBLE = "******";
     
-    private final String _prop;
-    private final Class<T> _type;
-    private String loadKey;
-    private String def;
-    private String[] aliases;
-    private String getter;
-    private List<ValueListener> listeners;
-    private boolean aliasListComprehensive;
-    private Class<?> scope;
-    private boolean isDynamic;
-    private String originalValue;
-    private Set<String> otherNames;
-    private boolean _hidden;
-    private boolean _private;
+    private String prop = null;
+    private String loadKey = null;
+    private String def = null;
+    private String[] aliases = null;
+    private String getter = null;
+    private List<ValueListener> listeners = null;
+    private boolean aliasListComprehensive = false;
+    private Class scope = null;
+    private boolean isDynamic = false;
+    private String originalValue = null;
+    private Set<String> otherNames = null;
+    private boolean _hidden  = false;
+    private boolean _private = false;
     
     /**
+     * Default constructor.
+     */
+    public Value() {
+    }
+
+    /**
      * Constructor. Supply the property name.
      *
      * @see #setProperty
      */
-    public Value(Class<T> type, String prop) {
-    	_type = type;
-        _prop  = prop;
+    public Value(String prop) {
+        setProperty(prop);
     }
 
     /**
@@ -101,10 +76,18 @@ public abstract class Value<T> implement
      * getting this value in a {@link Map}.
      */
     public String getProperty() {
-        return _prop;
+        return prop;
     }
 
     /**
+     * The property name that will be used when setting or
+     * getting this value in a {@link Map}.
+     */
+    public void setProperty(String prop) {
+        this.prop = prop;
+    }
+    
+    /**
      * Adds a moniker that is equivalent to the original property key used
      * during construction. 
      * 
@@ -123,7 +106,8 @@ public abstract class Value<T> implement
      * @since 2.0.0
      */
     public Set<String> getEquivalentKeys() {
-        return otherNames == null ? EMPTY_SET : Collections.unmodifiableSet(otherNames);
+        return otherNames == null ? Collections.EMPTY_SET 
+            : Collections.unmodifiableSet(otherNames);
     }
     
     /**
@@ -134,7 +118,8 @@ public abstract class Value<T> implement
      * @since 2.0.0
      */
     public List<String> getPropertyKeys() {
-        List<String> result = new ArrayList<String>(1 + (otherNames ==null ? 0 : otherNames.size()));
+        List<String> result = new ArrayList<String>(1 + 
+            (otherNames ==null ? 0 : otherNames.size()));
         result.add(getProperty());
         if (otherNames != null)
             result.addAll(otherNames);
@@ -164,8 +149,9 @@ public abstract class Value<T> implement
      * already loaded key. 
      */
     public void setLoadKey(String key) {
-        if (loadKey != null && key != null && !loadKey.equals(key)) 
-            throw new ParseException(s_loc.get("multiple-load-key", loadKey, key));
+        if (this.loadKey != null && key != null && !this.loadKey.equals(key)) 
+            throw new ParseException(s_loc.get("multiple-load-key", 
+                loadKey, key));
         loadKey = key;
     }
 
@@ -197,7 +183,7 @@ public abstract class Value<T> implement
     public void setAlias(String key, String value) {
         aliases = setAlias(key, value, aliases);
     }
-    
+
     /**
      * Set an alias into a current alias list, returning the new list.
      */
@@ -224,7 +210,7 @@ public abstract class Value<T> implement
      * value. If so, an error will be generated when attempting to invoke
      * any method on this value with an unknown option.
      */
-    public final boolean isAliasListComprehensive() {
+    public boolean isAliasListComprehensive() {
         return aliasListComprehensive;
     }
 
@@ -233,7 +219,7 @@ public abstract class Value<T> implement
      * value. If so, an error will be generated when attempting to invoke
      * any method on this value with an unknown option.
      */
-    public final void setAliasListComprehensive(boolean aliasListIsComprehensive) {
+    public void setAliasListComprehensive(boolean aliasListIsComprehensive) {
         this.aliasListComprehensive = aliasListIsComprehensive;
     }
 
@@ -309,7 +295,7 @@ public abstract class Value<T> implement
 
     /**
      * The name of the getter method for the instantiated value of this
-     * property (as opposed to the string value)
+     * property(as opposed to the string value)
      */
     public String getInstantiatingGetter() {
         return getter;
@@ -331,7 +317,7 @@ public abstract class Value<T> implement
      * be used by the configuration framework to look up metadata about
      * the value.
      */
-    public Class<?> getScope() {
+    public Class getScope() {
         return scope;
     }
 
@@ -340,7 +326,7 @@ public abstract class Value<T> implement
      * be used by the configuration framework to look up metadata about
      * the value.
      */
-    public void setScope(Class<?> cls) {
+    public void setScope(Class cls) {
         scope = cls;
     }
 
@@ -355,7 +341,7 @@ public abstract class Value<T> implement
     /**
      * Set this value from the given string. If the given string is null or
      * empty and a default is defined, the default is used. If the given
-     * string (or default) is an alias key, it will be converted to the
+     * string(or default) is an alias key, it will be converted to the
      * corresponding value internally.
      * <br>
      * If this Value is being set to a non-default value for the first time
@@ -376,7 +362,7 @@ public abstract class Value<T> implement
         } catch (ParseException pe) {
             throw pe;
         } catch (RuntimeException re) {
-            throw new ParseException(_prop + ": " + val, re);
+            throw new ParseException(prop + ": " + val, re);
         }
     }
 
@@ -390,11 +376,11 @@ public abstract class Value<T> implement
      * {@link #isDynamic() dynamic}. 
      * 
      */
-    public void setObject(T obj) {
+    public void setObject(Object obj) {
         // if setting to null set as string to get defaults into play
-        if (obj == null && def != null) {
+        if (obj == null && def != null)
             setString(null);
-        } else {
+        else {
             try {
                 setInternalObject(obj);
                 if (originalValue == null && obj != null && !isDefault(obj)) {
@@ -403,7 +389,7 @@ public abstract class Value<T> implement
             } catch (ParseException pe) {
                 throw pe;
             } catch (RuntimeException re) {
-                throw new ParseException(_prop + ": " + obj, re);
+                throw new ParseException(prop + ": " + obj, re);
             }
         }
     }
@@ -427,12 +413,25 @@ public abstract class Value<T> implement
     /**
      * Returns the type of the property that this Value represents.
      */
-    public final Class<T> getValueType() {
-    	return _type;
-    }
+    public abstract Class<?> getValueType();
+
+    /**
+     * Return the internal string form of this value.
+     */
+    protected abstract String getInternalString();
 
     /**
-     * Gets unmodifiable list of listeners for value changes.
+     * Set this value from the given string.
+     */
+    protected abstract void setInternalString(String str);
+
+    /**
+     * Set this value from an object.
+     */
+    protected abstract void setInternalObject(Object obj);
+
+    /**
+     * Gets unmodifable list of listeners for value changes.
      */
     public List<ValueListener> getListeners() {
         return Collections.unmodifiableList(this.listeners);
@@ -500,7 +499,7 @@ public abstract class Value<T> implement
      *  
      * @since 1.1.0
      */
-    public final void setDynamic(boolean flag) {
+    public void setDynamic(boolean flag) {
     	isDynamic = flag;
     }
     
@@ -510,7 +509,7 @@ public abstract class Value<T> implement
      *  
      * @since 1.1.0
      */
-    public final boolean isDynamic() {
+    public boolean isDynamic() {
     	return isDynamic; 
     }
 
@@ -523,7 +522,7 @@ public abstract class Value<T> implement
     public int hashCode() {
         String str = (isDynamic()) ? getOriginalValue() : getString();
         int strHash = (str == null) ? 0 : str.hashCode();
-        int propHash = (_prop == null) ? 0 : _prop.hashCode();
+        int propHash = (prop == null) ? 0 : prop.hashCode();
         return strHash ^ propHash;
     }
 
@@ -539,11 +538,11 @@ public abstract class Value<T> implement
         if (!(other instanceof Value))
             return false;
 
-        Value<T> o = (Value<T>) other;
+        Value o = (Value) other;
         String thisStr = (isDynamic()) ? getOriginalValue() : getString();
         String thatStr = (isDynamic()) ? o.getOriginalValue() : o.getString();
         return (isDynamic() == o.isDynamic())
-            && StringUtils.equals(_prop, o.getProperty())
+            && StringUtils.equals(prop, o.getProperty())
             && StringUtils.equals(thisStr, thatStr);
     }
 
@@ -567,7 +566,7 @@ public abstract class Value<T> implement
     /**
      * Hides the value of this Value from being output to the caller.
      */
-    public final void hide() {
+    public void hide() {
         _hidden = true;
     }
     
@@ -575,49 +574,23 @@ public abstract class Value<T> implement
      * Affirms if this Value is used for internal purpose only and not exposed as a supported property.
      * @see Configuration#getPropertyKeys()
      */
-    public final boolean isPrivate() {
+    public boolean isPrivate() {
         return _private;
     }
 
     /**
      * Marks this Value for internal purpose only.
      */
-    public final void makePrivate() {
+    public void makePrivate() {
         _private = true;
     }
     
     /**
-     * Gets the external visible form of this value.
-     * @return
+     * Get the actual data stored in this value.
      */
-    public Object getExternal() {
-    	return _hidden ? INVISIBLE : get();
-    }
+    public abstract Object get();
     
     public String toString() {
-        return getProperty() + "<" + getValueType().getSimpleName() + ">:" + get();
+        return getProperty()+ ":" + get() + "[" + getValueType().getName() + "]";
     }
-    
-    
-    /**
-     * Get the actual data stored in this value.
-     */
-    public abstract T get();
-    
-    /**
-     * Return the internal string form of this value.
-     */
-    protected abstract String getInternalString();
-
-    /**
-     * Set this value from the given string.
-     */
-    protected abstract void setInternalString(String str);
-
-    /**
-     * Set this value from an object.
-     */
-    protected abstract void setInternalObject(Object obj);
-
-
 }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ValueListener.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ValueListener.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ValueListener.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ValueListener.java Sat Nov  5 17:17:26 2011
@@ -28,5 +28,5 @@ public interface ValueListener {
     /**
      * Callback used by {@link Value} objects to notify listener of change.
      */
-    public void valueChanged(Value<?> val);
+    public void valueChanged(Value val);
 }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/instrumentation/AbstractInstrumentationProvider.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/instrumentation/AbstractInstrumentationProvider.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/instrumentation/AbstractInstrumentationProvider.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/instrumentation/AbstractInstrumentationProvider.java Sat Nov  5 17:17:26 2011
@@ -38,7 +38,7 @@ public abstract class AbstractInstrument
     private Map<String, Instrument> _instruments = new ConcurrentHashMap<String, Instrument>();
     
     private boolean _started = false;
-    private PluginListValue<Instrument> _instrumentValues;
+    private PluginListValue _instrumentValues;
     private String _options;
     private Configuration _config;
 
@@ -57,13 +57,13 @@ public abstract class AbstractInstrument
     }
     
     public void setInstrument(String instrument) {
-        _instrumentValues = new PluginListValue<Instrument>(Instrument[].class, "Instrument");
+        _instrumentValues = new PluginListValue("Instrument");
         if (getInstrumentAliases() != null) {
             _instrumentValues.setAliases(getInstrumentAliases());
         }
         _instrumentValues.setString(instrument);
         
-        Instrument[] instruments = _instrumentValues.instantiate(_config);
+        Instrument[] instruments = (Instrument[])_instrumentValues.instantiate(Instrument.class, _config);
         for (Instrument inst : instruments) {
             inst.setProvider(this);
             _instruments.put(inst.getName(), inst);

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/CFMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/CFMetaDataParser.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/CFMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/CFMetaDataParser.java Sat Nov  5 17:17:26 2011
@@ -36,15 +36,16 @@ import serp.util.Strings;
  */
 public class CFMetaDataParser extends XMLMetaDataParser {
 
-    static final String[] PACKAGES = new String[]{"java.lang.", "java.util.", "java.math." };
-    private static final Localizer _loc = Localizer.forPackage(CFMetaDataParser.class);
+    static final String[] PACKAGES = new String[]{
+        "java.lang.", "java.util.", "java.math." };
+    private static final Localizer _loc = Localizer.forPackage
+        (CFMetaDataParser.class);
 
     // the current package and class being parsed
     private String _package = null;
     private String _class = null;
 
-    public CFMetaDataParser(ClassLoader loader) {
-    	super(loader);
+    public CFMetaDataParser() {
         setParseText(false);
     }
 
@@ -281,7 +282,8 @@ public class CFMetaDataParser extends XM
         throws SAXException {
         if (name == null)
             return null;
-        Class<?> cls = classForName(name, _package, resolve, getClassLoader());
+        Class<?> cls =
+            classForName(name, _package, resolve, currentClassLoader());
         if (cls == null)
             throw getException(_loc.get("invalid-class", name).getMessage());
         return cls;
@@ -296,6 +298,9 @@ public class CFMetaDataParser extends XM
         if (StringUtils.isEmpty(name))
             return null;
 
+        if (loader == null)
+            loader = AccessController.doPrivileged(
+                J2DoPrivHelper.getContextClassLoaderAction());
         boolean fullName = name.indexOf('.') != -1;
         boolean noPackage = StringUtils.isEmpty(pkg);
         try {

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassArgParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassArgParser.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassArgParser.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassArgParser.java Sat Nov  5 17:17:26 2011
@@ -66,13 +66,15 @@ public class ClassArgParser {
     private static final int TOKEN_PACKAGE_NOATTR = 3;
     private static final int TOKEN_CLASS_NOATTR = 4;
 
-    private static final Localizer _loc = Localizer.forPackage(ClassArgParser.class);
+    private static final Localizer _loc = Localizer.forPackage
+        (ClassArgParser.class);
 
     private ClassLoader _loader = null;
     private char[] _packageAttr = "name".toCharArray();
     private char[] _classAttr = "name".toCharArray();
     private char[][] _beginElements = { { 'p' }, { 'c' } };
-    private char[][] _endElements = { "ackage".toCharArray(), "lass".toCharArray() };
+    private char[][] _endElements = { "ackage".toCharArray(),
+        "lass".toCharArray() };
 
     /**
      * The class loader with which to load parsed classes.
@@ -104,14 +106,14 @@ public class ClassArgParser {
         for (; true; charIdx++) {
             for (int i = 0; i < buf.length; i++) {
                 if (i == 0) {
-                    if (charIdx == packageElementName.length()) {
-                        throw new UnsupportedOperationException(_loc.get("cant-diff-elems").getMessage());
-                    }
+                    if (charIdx == packageElementName.length())
+                        throw new UnsupportedOperationException(_loc.get
+                            ("cant-diff-elems").getMessage());
                     buf[i] = packageElementName.charAt(charIdx);
                 } else {
-                    if (charIdx == classElementNames[i - 1].length()) {
-                        throw new UnsupportedOperationException(_loc.get("cant-diff-elems").getMessage());
-                    }
+                    if (charIdx == classElementNames[i - 1].length())
+                        throw new UnsupportedOperationException(_loc.get
+                            ("cant-diff-elems").getMessage());
                     buf[i] = classElementNames[i - 1].charAt(charIdx);
                 }
             }
@@ -119,15 +121,21 @@ public class ClassArgParser {
                 break;
         }
 
-        _packageAttr = (packageAttributeName == null) ? null : packageAttributeName.toCharArray();
-        _classAttr   = (classAttributeName == null)   ? null : classAttributeName.toCharArray();
+        _packageAttr = (packageAttributeName == null) ? null
+            : packageAttributeName.toCharArray();
+        _classAttr = (classAttributeName == null) ? null
+            : classAttributeName.toCharArray();
         _beginElements = new char[classElementNames.length + 1][];
         _endElements = new char[classElementNames.length + 1][];
-        _beginElements[0] = packageElementName.substring(0, charIdx + 1).toCharArray();
-        _endElements[0] = packageElementName.substring(charIdx + 1).toCharArray();
+        _beginElements[0] = packageElementName.substring(0, charIdx + 1).
+            toCharArray();
+        _endElements[0] = packageElementName.substring(charIdx + 1).
+            toCharArray();
         for (int i = 0; i < classElementNames.length; i++) {
-            _beginElements[i + 1] = classElementNames[i].substring(0, charIdx + 1).toCharArray();
-            _endElements[i + 1] = classElementNames[i].substring(charIdx + 1).toCharArray();
+            _beginElements[i + 1] = classElementNames[i].
+                substring(0, charIdx + 1).toCharArray();
+            _endElements[i + 1] = classElementNames[i].
+                substring(charIdx + 1).toCharArray();
         }
     }
 
@@ -205,12 +213,10 @@ public class ClassArgParser {
 
         try {
             File file = Files.getFile(arg, _loader);
-            if (arg.endsWith(".class")) {
+            if (arg.endsWith(".class"))
                 return new String[]{ getFromClassFile(file) };
-            }
-            if (arg.endsWith(".java")) {
+            if (arg.endsWith(".java"))
                 return new String[]{ getFromJavaFile(file) };
-            }
             if ((AccessController.doPrivileged(
                 J2DoPrivHelper.existsAction(file))).booleanValue()) {
                 Collection<String> col = getFromMetaDataFile(file);

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java Sat Nov  5 17:17:26 2011
@@ -21,7 +21,6 @@ package org.apache.openjpa.lib.meta;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.security.AccessController;
@@ -56,7 +55,16 @@ public class ClassMetaDataIterator imple
      * Constructor; supply the class whose metadata to find, the suffix
      * of metadata files, and whether to parse top-down or bottom-up.
      */
-    public ClassMetaDataIterator(Class<?> cls, String suffix, ClassLoader loader, boolean topDown) {
+    public ClassMetaDataIterator(Class<?> cls, String suffix, boolean topDown) {
+        this(cls, suffix, null, topDown);
+    }
+
+    /**
+     * Constructor; supply the class whose metadata to find, the suffix
+     * of metadata files, and whether to parse top-down or bottom-up.
+     */
+    public ClassMetaDataIterator(Class<?> cls, String suffix,
+            ClassLoader loader, boolean topDown) {
         // skip classes that can't have metadata
         if (cls != null && (cls.isPrimitive()
             || cls.getName().startsWith("java.")
@@ -72,8 +80,11 @@ public class ClassMetaDataIterator imple
             multi.addClassLoader(MultiClassLoader.SYSTEM_LOADER);
             multi.addClassLoader(MultiClassLoader.THREAD_LOADER);
             multi.addClassLoader(getClass().getClassLoader());
-            if (cls != null) {
-                ClassLoader clsLoader = AccessController.doPrivileged(J2DoPrivHelper.getClassLoaderAction(cls));
+            if (cls != null)
+            {
+                ClassLoader clsLoader = (ClassLoader)
+                    AccessController.doPrivileged(
+                        J2DoPrivHelper.getClassLoaderAction(cls));
                 if (clsLoader != null)
                     multi.addClassLoader(clsLoader);
             }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/MetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/MetaDataParser.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/MetaDataParser.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/MetaDataParser.java Sat Nov  5 17:17:26 2011
@@ -33,6 +33,12 @@ import java.util.List;
 public interface MetaDataParser {
 
     /**
+     * The classloader to use to resolve resources, or null for impl-defined
+     * default.
+     */
+    public void setClassLoader(ClassLoader loader);
+
+    /**
      * Return the results from the last parse.
      */
     public List getResults();

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ResourceMetaDataIterator.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ResourceMetaDataIterator.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ResourceMetaDataIterator.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ResourceMetaDataIterator.java Sat Nov  5 17:17:26 2011
@@ -47,14 +47,30 @@ public class ResourceMetaDataIterator im
     /**
      * Constructor; supply the resource to parse.
      */
+    public ResourceMetaDataIterator(String rsrc) throws IOException {
+        this(rsrc, null);
+    }
+
+    /**
+     * Constructor; supply the resource to parse.
+     */
     public ResourceMetaDataIterator(String rsrc, ClassLoader loader)
         throws IOException {
+        if (loader == null) {
+            MultiClassLoader multi = AccessController
+                .doPrivileged(J2DoPrivHelper.newMultiClassLoaderAction());
+            multi.addClassLoader(MultiClassLoader.SYSTEM_LOADER);
+            multi.addClassLoader(MultiClassLoader.THREAD_LOADER);
+            multi.addClassLoader(getClass().getClassLoader());
+            loader = multi;
+        }
+
         try {
-            Enumeration<URL> e = AccessController.doPrivileged(J2DoPrivHelper.getResourcesAction(loader, rsrc));
+            Enumeration<URL> e = AccessController.doPrivileged(
+                J2DoPrivHelper.getResourcesAction(loader, rsrc));
             while (e.hasMoreElements()) {
-                if (_urls == null) {
+                if (_urls == null)
                     _urls = new ArrayList<URL>(3);
-                }
                 _urls.add(e.nextElement());
             }
         } catch (PrivilegedActionException pae) {
@@ -87,7 +103,8 @@ public class ResourceMetaDataIterator im
         if (_url == -1 || _url >= _urls.size())
             throw new IllegalStateException();
         File file = new File(URLDecoder.decode((_urls.get(_url)).getFile()));
-        return ((AccessController.doPrivileged(J2DoPrivHelper.existsAction(file))).booleanValue()) ? file :null;
+        return ((AccessController.doPrivileged(
+            J2DoPrivHelper.existsAction(file))).booleanValue()) ? file :null;
     }
 
     public void close() {

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/SourceTracker.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/SourceTracker.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/SourceTracker.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/SourceTracker.java Sat Nov  5 17:17:26 2011
@@ -22,7 +22,7 @@ import java.io.File;
 
 /**
  * Interface that can optionally be implemented by metadata
- * to include the source URL from which the metadata was originally parsed.
+ * to include the source file from which the metadata was originally parsed.
  *
  * @author Abe White
  */
@@ -33,7 +33,7 @@ public interface SourceTracker {
     public static final int SRC_XML = 2;
 
     /**
-     * Return the URL from which this instance was parsed.
+     * Return the file from which this instance was parsed.
      */
     public File getSourceFile();
 

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java Sat Nov  5 17:17:26 2011
@@ -55,9 +55,6 @@ import org.apache.openjpa.lib.xml.XMLFac
 /**
  * Custom SAX parser used by the system to quickly parse metadata files.
  * Subclasses should handle the processing of the content.
- * <br>
- * The parsers may need to resolve parsed strings to actual class instances.
- * 
  *
  * @author Abe White
  * @nojavadoc
@@ -65,7 +62,8 @@ import org.apache.openjpa.lib.xml.XMLFac
 public abstract class XMLMetaDataParser extends DefaultHandler
     implements LexicalHandler, MetaDataParser {
 
-    private static final Localizer _loc = Localizer.forPackage(XMLMetaDataParser.class);
+    private static final Localizer _loc = Localizer.forPackage
+        (XMLMetaDataParser.class);
     private static boolean _schemaBug;
 
     static {
@@ -73,8 +71,9 @@ public abstract class XMLMetaDataParser 
             // check for Xerces version 2.0.2 to see if we need to disable
             // schema validation, which works around the bug reported at:
             // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4708859
-            _schemaBug = "Xerces-J 2.0.2".equals(Class.forName("org.apache.xerces.impl.Version")
-            		.getField("fVersion").get(null));
+            _schemaBug = "Xerces-J 2.0.2".equals(Class.forName
+                ("org.apache.xerces.impl.Version").getField("fVersion").
+                get(null));
         } catch (Throwable t) {
             // Xerces might not be available
             _schemaBug = false;
@@ -83,8 +82,8 @@ public abstract class XMLMetaDataParser 
 
     // map of classloaders to sets of parsed locations, so that we don't parse
     // the same resource multiple times for the same class
-    private Set<String> _parsed = null;
-    
+    private Map<ClassLoader, Set<String>> _parsed = null;
+
     private Log _log = null;
     private boolean _validating = true;
     private boolean _systemId = true;
@@ -92,8 +91,8 @@ public abstract class XMLMetaDataParser 
     private boolean _parseText = true;
     private boolean _parseComments = true;
     private String _suffix = null;
-//    private ClassLoader _loader = null;
-//    private ClassLoader _curLoader = null;
+    private ClassLoader _loader = null;
+    private ClassLoader _curLoader = null;
 
     // state for current parse
     private final Collection _curResults = new LinkedList();
@@ -108,12 +107,17 @@ public abstract class XMLMetaDataParser 
     private int _ignore = Integer.MAX_VALUE;
 
     private boolean _parsing = false;
-    private final ClassLoader _loader;
     
-    protected XMLMetaDataParser(ClassLoader loader) {
-    	_loader = loader;
-    }
+    private boolean _overrideContextClassloader = false;
     
+    public boolean getOverrideContextClassloader() {
+        return _overrideContextClassloader;
+    }
+
+    public void setOverrideContextClassloader(boolean overrideCCL) {
+        _overrideContextClassloader = overrideCCL;
+    }
+
     /*
      * Whether the parser is currently parsing.
      */
@@ -263,16 +267,16 @@ public abstract class XMLMetaDataParser 
     /**
      * Classloader to use for class name resolution.
      */
-//    public ClassLoader getClassLoader() {
-//        return _loader;
-//    }
+    public ClassLoader getClassLoader() {
+        return _loader;
+    }
 
     /**
      * Classloader to use for class name resolution.
      */
-//    public void setClassLoader(ClassLoader loader) {
-//        _loader = loader;
-//    }
+    public void setClassLoader(ClassLoader loader) {
+        _loader = loader;
+    }
 
     public List getResults() {
         if (_results == null)
@@ -293,7 +297,8 @@ public abstract class XMLMetaDataParser 
     public void parse(File file) throws IOException {
         if (file == null)
             return;
-        if (!(AccessController.doPrivileged(J2DoPrivHelper.isDirectoryAction(file))).booleanValue())
+        if (!(AccessController.doPrivileged(J2DoPrivHelper
+            .isDirectoryAction(file))).booleanValue())
             parse(new FileMetaDataIterator(file));
         else {
             String suff = (_suffix == null) ? "" : _suffix;
@@ -302,9 +307,9 @@ public abstract class XMLMetaDataParser 
         }
     }
 
-    public void parse(Class<?> cls, boolean topDown) throws IOException {
+    public void parse(Class cls, boolean topDown) throws IOException {
         String suff = (_suffix == null) ? "" : _suffix;
-        parse(new ClassMetaDataIterator(cls, suff, _loader, topDown), !topDown);
+        parse(new ClassMetaDataIterator(cls, suff, topDown), !topDown);
     }
 
     public void parse(Reader xml, String sourceName) throws IOException {
@@ -364,7 +369,8 @@ public abstract class XMLMetaDataParser 
                 _log.trace(_loc.get("parser-schema-bug"));
             schemaSource = null;
         }
-        boolean validating = _validating && (getDocType() != null || schemaSource != null);
+        boolean validating = _validating && (getDocType() != null 
+            || schemaSource != null);
 
         // parse the metadata with a SAX parser
         try {
@@ -372,8 +378,22 @@ public abstract class XMLMetaDataParser 
             _sourceName = sourceName;
             
             SAXParser parser = null;
+            boolean overrideCL = _overrideContextClassloader;
+            ClassLoader oldLoader = null;
+            ClassLoader newLoader = null;           
             
             try {
+                if (overrideCL == true) {
+                    oldLoader =
+                        (ClassLoader) AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
+                    newLoader = XMLMetaDataParser.class.getClassLoader();
+                    AccessController.doPrivileged(J2DoPrivHelper.setContextClassLoaderAction(newLoader));
+                    
+                    if (_log != null && _log.isTraceEnabled()) {
+                        _log.trace(_loc.get("override-contextclassloader-begin", oldLoader, newLoader));
+                    }                   
+                }
+                
                 parser = XMLFactory.getSAXParser(validating, true);
                 Object schema = null;
                 if (validating) {
@@ -383,12 +403,16 @@ public abstract class XMLMetaDataParser 
                 }
 
                 if (_parseComments || _lh != null)
-                    parser.setProperty("http://xml.org/sax/properties/lexical-handler", this);
+                    parser.setProperty
+                        ("http://xml.org/sax/properties/lexical-handler", this);
 
                 if (schema != null) {
-                    parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
+                    parser.setProperty
+                        ("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
                             "http://www.w3.org/2001/XMLSchema");
-                    parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", schema);
+                    parser.setProperty
+                        ("http://java.sun.com/xml/jaxp/properties/schemaSource",
+                            schema);
                 }
 
                 InputSource is = new InputSource(xml);
@@ -401,6 +425,19 @@ public abstract class XMLMetaDataParser 
                 ioe.initCause(se);
                 throw ioe;
             } finally {
+                if (overrideCL == true) {
+                    // Restore the old ContextClassloader
+                    try {
+                        if (_log != null && _log.isTraceEnabled()) {
+                            _log.trace(_loc.get("override-contextclassloader-end", newLoader, oldLoader));
+                        }
+                        AccessController.doPrivileged(J2DoPrivHelper.setContextClassLoaderAction(oldLoader));
+                    } catch (Throwable t) {
+                        if (_log != null && _log.isWarnEnabled()) {
+                            _log.warn(_loc.get("restore-contextclassloader-failed"));
+                        }
+                    }
+                }
             }
         } finally {
             reset();
@@ -415,9 +452,15 @@ public abstract class XMLMetaDataParser 
         if (!_caching)
             return false;
         if (_parsed == null)
-            _parsed = new HashSet<String>();
+            _parsed = new HashMap<ClassLoader, Set<String>>();
 
-        boolean added = _parsed.add(src);
+        ClassLoader loader = currentClassLoader();
+        Set<String> set = _parsed.get(loader);
+        if (set == null) {
+            set = new HashSet<String>();
+            _parsed.put(loader, set);
+        }
+        boolean added = set.add(src);
         if (!added && _log != null && _log.isTraceEnabled())
             _log.trace(_loc.get("already-parsed", src));
         return !added;
@@ -551,7 +594,7 @@ public abstract class XMLMetaDataParser 
      */
     protected void reset() {
         _curResults.clear();
-//        _curLoader = null;
+        _curLoader = null;
         _sourceName = null;
         _sourceFile = null;
         _depth = -1;
@@ -647,13 +690,14 @@ public abstract class XMLMetaDataParser 
      * Return the class loader to use when resolving resources and loading
      * classes.
      */
-//    protected ClassLoader currentClassLoader() {
-//        if (_loader != null)
-//            return _loader;
-//        if (_curLoader == null)
-//            _curLoader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
-//        return _curLoader;
-//    }
+    protected ClassLoader currentClassLoader() {
+        if (_loader != null)
+            return _loader;
+        if (_curLoader == null)
+            _curLoader = AccessController.doPrivileged(
+                J2DoPrivHelper.getContextClassLoaderAction());
+        return _curLoader;
+    }
 
     /**
      * Ignore all content below the current element.
@@ -700,12 +744,4 @@ public abstract class XMLMetaDataParser 
 
     protected void clearDeferredMetaData() {
     }
-    
-    /**
-     * Gets the class loader used by this parser to resolve classes
-     * or locate resources.
-     */
-    protected final ClassLoader getClassLoader() {
-    	return _loader;
-    }
 }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLVersionParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLVersionParser.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLVersionParser.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLVersionParser.java Sat Nov  5 17:17:26 2011
@@ -18,9 +18,6 @@
  */
 package org.apache.openjpa.lib.meta;
 
-import java.util.LinkedHashSet;
-import java.util.Set;
-
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
@@ -37,18 +34,16 @@ public class XMLVersionParser extends XM
     public static final String VERSION_2_0 = "2.0";
 
     static private final String VERSION_ATTR = "version";
-    static private final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance";
+    static private final String XSI_NS =
+        "http://www.w3.org/2001/XMLSchema-instance";
     static private final String SCHEMA_LOCATION = "schemaLocation";
 
     private String _rootElement;
     private String _version;
     private String _schemaLocation;
-    private Set<String> _unitNames;
     
     public XMLVersionParser(String rootElement) {
-    	super(null);
         _rootElement = rootElement;
-        _unitNames = new LinkedHashSet<String>();
         setCaching(false);
         setValidating(false);
         setParseText(false);
@@ -66,10 +61,8 @@ public class XMLVersionParser extends XM
             // save the version and schema location attributes
             _version = attrs.getValue("", VERSION_ATTR);
             _schemaLocation = attrs.getValue(XSI_NS, SCHEMA_LOCATION);
-        } else if (name.equals("persistence-unit")) {
-        	 _unitNames.add(attrs.getValue("name"));
-             // ignore remaining content
-             ignoreContent(true);
+            // ignore remaining content
+            ignoreContent(true);
         }
         return false;
     }
@@ -89,8 +82,4 @@ public class XMLVersionParser extends XM
     public String getSchemaLocation() {
         return _schemaLocation;
     }
-    
-    public Set<String> unitNames() {
-    	return _unitNames;
-    }
 }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/JavaVendors.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/JavaVendors.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/JavaVendors.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/JavaVendors.java Sat Nov  5 17:17:26 2011
@@ -24,8 +24,7 @@ import java.security.AccessController;
  * Utilities for dealing with different Java vendors.
  */
 public enum JavaVendors {
-    IBM("com.ibm.tools.attach.VirtualMachine"), 
-    SUN("com.sun.tools.attach.VirtualMachine"),
+    IBM("com.ibm.tools.attach.VirtualMachine"), SUN("com.sun.tools.attach.VirtualMachine"),
     // When in doubt, try the Sun implementation.
     OTHER("com.sun.tools.attach.VirtualMachine");
 

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java Sat Nov  5 17:17:26 2011
@@ -23,7 +23,6 @@ import java.net.URL;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
@@ -48,10 +47,11 @@ public class MultiClassLoader extends Cl
     /**
      * The standard system class loader.
      */
-    public static final ClassLoader SYSTEM_LOADER = AccessController.doPrivileged(
+    public static final ClassLoader SYSTEM_LOADER =
+        AccessController.doPrivileged(
             J2DoPrivHelper.getSystemClassLoaderAction());
 
-    private List<ClassLoader> _loaders = new ArrayList<ClassLoader>(5);
+    private List _loaders = new ArrayList(5);
 
     /**
      * Constructor; initializes the loader with an empty list of delegates.
@@ -81,12 +81,12 @@ public class MultiClassLoader extends Cl
     public ClassLoader[] getClassLoaders() {
         ClassLoader[] loaders = new ClassLoader[size()];
         ClassLoader loader;
-        Iterator<ClassLoader> itr = _loaders.iterator();
+        Iterator itr = _loaders.iterator();
         for (int i = 0; i < loaders.length; i++) {
-            loader = itr.next();
-            if (loader == THREAD_LOADER) {
-                loader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
-            }
+            loader = (ClassLoader) itr.next();
+            if (loader == THREAD_LOADER)
+                loader = AccessController.doPrivileged(
+                    J2DoPrivHelper.getContextClassLoaderAction());
             loaders[i] = loader;
         }
         return loaders;
@@ -96,10 +96,10 @@ public class MultiClassLoader extends Cl
      * Return the class loader at the given index.
      */
     public ClassLoader getClassLoader(int index) {
-        ClassLoader loader = _loaders.get(index);
-        if (loader == THREAD_LOADER) {
-            loader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
-        }
+        ClassLoader loader = (ClassLoader) _loaders.get(index);
+        if (loader == THREAD_LOADER)
+            loader = AccessController.doPrivileged(
+                J2DoPrivHelper.getContextClassLoaderAction());
         return loader;
     }
 
@@ -125,7 +125,7 @@ public class MultiClassLoader extends Cl
         _loaders.add(index, loader);
         return true;
     }
-    
+
     /**
      * Set the class loaders of this loader to those of the given loader.
      */
@@ -146,8 +146,8 @@ public class MultiClassLoader extends Cl
 
         // use iterator so that the thread loader is not resolved
         boolean added = false;
-        for (Iterator<ClassLoader> itr = multi._loaders.iterator(); itr.hasNext();) {
-            if (addClassLoader(index, itr.next())) {
+        for (Iterator itr = multi._loaders.iterator(); itr.hasNext();) {
+            if (addClassLoader(index, (ClassLoader) itr.next())) {
                 index++;
                 added = true;
             }
@@ -166,8 +166,8 @@ public class MultiClassLoader extends Cl
 
         // use iterator so that the thread loader is not resolved
         boolean added = false;
-        for (Iterator<ClassLoader> itr = multi._loaders.iterator(); itr.hasNext();)
-            added = addClassLoader(itr.next()) || added;
+        for (Iterator itr = multi._loaders.iterator(); itr.hasNext();)
+            added = addClassLoader((ClassLoader) itr.next()) || added;
         return added;
     }
 
@@ -195,18 +195,19 @@ public class MultiClassLoader extends Cl
     }
 
     /**
-     * Return true if there are no internal class loaders.
+     * Return true if there are no internal class laoders.
      */
     public boolean isEmpty() {
         return _loaders.isEmpty();
     }
 
-    protected Class<?> findClass(String name) throws ClassNotFoundException {
+    protected Class findClass(String name) throws ClassNotFoundException {
         ClassLoader loader;
-        for (Iterator<ClassLoader> itr = _loaders.iterator(); itr.hasNext();) {
-            loader = itr.next();
+        for (Iterator itr = _loaders.iterator(); itr.hasNext();) {
+            loader = (ClassLoader) itr.next();
             if (loader == THREAD_LOADER)
-                loader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
+                loader = AccessController.doPrivileged(
+                    J2DoPrivHelper.getContextClassLoaderAction());
             try {
                 return Class.forName(name, false, loader);
             } catch (Throwable t) {
@@ -218,15 +219,17 @@ public class MultiClassLoader extends Cl
     protected URL findResource(String name) {
         ClassLoader loader;
         URL rsrc;
-        for (Iterator<ClassLoader> itr = _loaders.iterator(); itr.hasNext();) {
-            loader = itr.next();
+        for (Iterator itr = _loaders.iterator(); itr.hasNext();) {
+            loader = (ClassLoader) itr.next();
             if (loader == THREAD_LOADER)
-                loader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
+                loader = AccessController.doPrivileged(
+                    J2DoPrivHelper.getContextClassLoaderAction());
 
             if (loader == null) // skip 
                 continue;
 
-            rsrc = AccessController.doPrivileged(J2DoPrivHelper.getResourceAction(loader, name)); 
+            rsrc = AccessController.doPrivileged(
+                J2DoPrivHelper.getResourceAction(loader, name)); 
             if (rsrc != null)
                 return rsrc;
         }
@@ -235,19 +238,21 @@ public class MultiClassLoader extends Cl
 
     protected Enumeration findResources(String name) throws IOException {
         ClassLoader loader;
-        Enumeration<?> rsrcs;
+        Enumeration rsrcs;
         Object rsrc;
-        Vector<Object> all = new Vector<Object>();
-        for (Iterator<ClassLoader> itr = _loaders.iterator(); itr.hasNext();) {
-            loader = itr.next();
+        Vector all = new Vector();
+        for (Iterator itr = _loaders.iterator(); itr.hasNext();) {
+            loader = (ClassLoader) itr.next();
             if (loader == THREAD_LOADER)
-                loader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
+                loader = AccessController.doPrivileged(
+                    J2DoPrivHelper.getContextClassLoaderAction());
 
             if (loader == null) // skip
                 continue;
 
             try {
-                rsrcs = AccessController.doPrivileged(J2DoPrivHelper.getResourcesAction(loader, name)); 
+                rsrcs = AccessController.doPrivileged(
+                    J2DoPrivHelper.getResourcesAction(loader, name)); 
                 while (rsrcs.hasMoreElements()) {
                     rsrc = rsrcs.nextElement();
                     if (!all.contains(rsrc))
@@ -271,8 +276,4 @@ public class MultiClassLoader extends Cl
     public int hashCode() {
         return _loaders.hashCode();
     }
-    
-    public String toString() {
-    	return _loaders.toString();
-    }
 }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java Sat Nov  5 17:17:26 2011
@@ -59,7 +59,7 @@ public class Services {
      * Return an array of Strings of class names of all known service
      * implementors of the specified interface or class.
      */
-    public static String[] getImplementors(Class<?> serviceClass) {
+    public static String[] getImplementors(Class serviceClass) {
         return getImplementors(serviceClass, null);
     }
 
@@ -67,7 +67,8 @@ public class Services {
      * Return an array of Strings of class names of all known service
      * implementors of the specified interface or class.
      */
-    public static String[] getImplementors(Class<?> serviceClass, ClassLoader loader) {
+    public static String[] getImplementors(Class serviceClass,
+        ClassLoader loader) {
         return getImplementors(serviceClass.getName(), loader);
     }
 
@@ -85,15 +86,22 @@ public class Services {
      * implementors of the specified class name, as resolved by the specified
      * {@link ClassLoader}.
      */
-    public static String[] getImplementors(String serviceName, ClassLoader loader) {
+    public static String[] getImplementors(String serviceName,
+        ClassLoader loader) {
+        if (loader == null)
+            loader = AccessController.doPrivileged(
+                J2DoPrivHelper.getContextClassLoaderAction());
+
         try {
-            Set<String> resourceList = new TreeSet<String>();
-            Enumeration resources = AccessController.doPrivileged(J2DoPrivHelper.getResourcesAction(loader,
+            Set resourceList = new TreeSet();
+            Enumeration resources = AccessController.doPrivileged(
+                J2DoPrivHelper.getResourcesAction(loader,
                         PREFIX + serviceName));
-            while (resources.hasMoreElements()) {
+            while (resources.hasMoreElements())
                 addResources((URL) resources.nextElement(), resourceList);
-            }
-            return resourceList.toArray(new String[resourceList.size()]);
+
+            return (String[]) resourceList.toArray(new String[resourceList
+                .size()]);
         } catch (PrivilegedActionException pae) {
             // silently swallow all exceptions.
         } catch (IOException ioe) {
@@ -107,10 +115,11 @@ public class Services {
      * Set. Class names are separated by lines. Lines starting with '#' are
      * ignored.
      */
-    private static void addResources(URL url, Set<String> set) throws IOException {
+    private static void addResources(URL url, Set set) throws IOException {
         InputStream in = null;
         BufferedReader reader = null;
         URLConnection urlCon = null;
+
         try {
             urlCon = url.openConnection();
             urlCon.setUseCaches(false);
@@ -128,10 +137,8 @@ public class Services {
                     String next = tok.nextToken();
                     if (next != null) {
                         next = next.trim();
-                        if (next.length() > 0 && !next.startsWith("#")) {
+                        if (next.length() > 0 && !next.startsWith("#"))
                             set.add(next);
-                        }
-                        
                     }
                 }
             }

Modified: openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties (original)
+++ openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties Sat Nov  5 17:17:26 2011
@@ -51,17 +51,15 @@ invalid-property-hint: The configuration
     property called "{1}".
 invalid-plugin: Instantiation of plugin "{0}" with value "{1}" caused an \
 	error "{2}". The alias or class name may have been misspelled, or the \
-	class may not be available in the class path. The classloader used is \
-	"{3}"
+	class may not be available in the class path.
 invalid-plugin-aliases: Instantiation of plugin "{0}" with value "{1}" caused \
 	an error "{2}". The alias or class name may have been misspelled, or the \
 	class may not have be available in the class path. Valid aliases for this \
-	plugin are: {3}. The classloader used is "{4}".
+	plugin are: {3}
 invalid-plugin-aliases-hint: Instantiation of plugin "{0}" with value "{1}" \
 	caused an error "{2}". The alias or class name may have been misspelled \
 	(as it closely matches the valid plugin alias "{4}"), or the class may \
-	not be available in the class path.  Valid aliases for this plugin are: {3}.\
-	The classloader used is "{5}"
+	not be available in the class path.  Valid aliases for this plugin are: {3}
 not-singleton: You cannot set the value of property "{0}" as an object.  The \
 	property cannot use a single value; it must be recreated on each request.
 cant-set-string: Configuration property "{0}" cannot be set from a string. \

Modified: openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/TestValue.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/TestValue.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/TestValue.java (original)
+++ openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/TestValue.java Sat Nov  5 17:17:26 2011
@@ -22,13 +22,13 @@ import junit.framework.TestCase;
 
 public class TestValue extends TestCase {
     
-    private static class SimpleValue extends Value<String> {
+    private static class SimpleValue extends Value {
 
-        public SimpleValue(String prop) {
-			super(String.class, prop);
-		}
+        protected String getInternalString() {
+            return null;
+        }
 
-		protected String getInternalString() {
+        public Class getValueType() {
             return null;
         }
 
@@ -39,7 +39,7 @@ public class TestValue extends TestCase 
         protected void setInternalString(String str) {
         }
         
-        public String get() {
+        public Object get() {
             return null;
         }
         
@@ -51,7 +51,7 @@ public class TestValue extends TestCase 
         String bName = "Pete";
         String [] aStrings = { alias, aName };
         
-        SimpleValue sValue = new SimpleValue("test");
+        SimpleValue sValue = new SimpleValue();
         sValue.setAliases(aStrings);
         sValue.setAlias(alias, bName);
         assertEquals("Did not set the new alias", bName, 
@@ -60,7 +60,8 @@ public class TestValue extends TestCase 
     }
     
     public void testEquivalentValueCanBeSet() {
-        SimpleValue v = new SimpleValue("main");
+        SimpleValue v = new SimpleValue();
+        v.setProperty("main");
         v.addEquivalentKey("eqivalent1");
         v.addEquivalentKey("eqivalent2");
         assertEquals(2, v.getEquivalentKeys().size());
@@ -74,7 +75,8 @@ public class TestValue extends TestCase 
     }
     
     public void testEquivalentValuesAreUnmodifable() {
-        SimpleValue v = new SimpleValue("main");
+        SimpleValue v = new SimpleValue();
+        v.setProperty("main");
         v.addEquivalentKey("eqivalent1");
         v.addEquivalentKey("eqivalent2");
         

Modified: openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java (original)
+++ openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java Sat Nov  5 17:17:26 2011
@@ -21,7 +21,6 @@ package org.apache.openjpa.lib.conf.test
 import java.io.InputStream;
 import java.io.IOException;
 import java.net.URL;
-import java.security.AccessController;
 import java.util.MissingResourceException;
 import java.util.Properties;
 
@@ -30,7 +29,6 @@ import org.apache.openjpa.lib.conf.Confi
 import org.apache.openjpa.lib.conf.ConfigurationProvider;
 import org.apache.openjpa.lib.conf.MapConfigurationProvider;
 import org.apache.openjpa.lib.conf.ProductDerivation;
-import org.apache.openjpa.lib.util.J2DoPrivHelper;
 
 /**
  * A Product Derivation to test loading of global and default configuration with
@@ -53,18 +51,19 @@ public class ConfigurationTestProductDer
         closed = true;
     }
 
-    public ConfigurationProvider loadGlobals()
+    public ConfigurationProvider loadGlobals(ClassLoader loader)
         throws IOException {
-        return load(null);
+        return load(null, loader);
     }
 
-    public ConfigurationProvider load(String rsrc) throws IOException {
+    public ConfigurationProvider load(String rsrc, ClassLoader loader)
+        throws IOException {
         if (rsrc == null)
             rsrc = System.getProperty("openjpatest.properties");
         if (rsrc == null || !rsrc.endsWith(".properties"))
             return null;
 
-        URL url = findResource(rsrc);
+        URL url = findResource(rsrc, loader);
         if (url == null)
             throw new MissingResourceException(rsrc, getClass().getName(), 
                 rsrc);
@@ -85,9 +84,8 @@ public class ConfigurationTestProductDer
     /**
      * Locate the given resource.
      */
-    private URL findResource(String rsrc)
+    private URL findResource(String rsrc, ClassLoader loader)
         throws IOException {
-        ClassLoader loader = Thread.currentThread().getContextClassLoader();
         if (loader != null)
             return loader.getResource(rsrc);
 
@@ -97,6 +95,7 @@ public class ConfigurationTestProductDer
         if (loader != null)
             url = loader.getResource(rsrc);
         if (url == null) {
+            loader = Thread.currentThread().getContextClassLoader();
             if (loader != null)
                 url = loader.getResource(rsrc);
         }

Modified: openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java Sat Nov  5 17:17:26 2011
@@ -256,8 +256,8 @@ public class TestConfigurationImpl exten
 
         private final StringValue _testKey;
         private final StringValue _sysKey;
-        private final PluginValue<Object> _pluginKey;
-        private final ObjectValue<Object> _objectKey;
+        private final PluginValue _pluginKey;
+        private final ObjectValue _objectKey;
 
         public ConfigurationTest() {
             this(true);
@@ -267,8 +267,8 @@ public class TestConfigurationImpl exten
             super(false);
             _testKey = addString("testKey");
             _sysKey = addString("sysKey");
-            _pluginKey = addPlugin(Object.class, "pluginKey", canSetPlugin);
-            _objectKey = addObject(Object.class, "objectKey");
+            _pluginKey = addPlugin("pluginKey", canSetPlugin);
+            _objectKey = addObject("objectKey");
         }
 
         public String getTestKey() {
@@ -297,7 +297,7 @@ public class TestConfigurationImpl exten
 
         public Object getPluginKeyInstance() {
             if (_pluginKey.get() == null)
-                return _pluginKey.instantiate(this);
+                return _pluginKey.instantiate(Object.class, this);
             return _pluginKey.get();
         }
 

Modified: openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestPluginValue.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestPluginValue.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestPluginValue.java (original)
+++ openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestPluginValue.java Sat Nov  5 17:17:26 2011
@@ -38,9 +38,9 @@ public class TestPluginValue extends Abs
 
     public void testDefault() {
         defaultTest(new StringValue("testKey"));
-        defaultTest(new PluginValue<String>(String.class, "testKey", true));
-        defaultTest(new PluginListValue<String>(String[].class, "testKey"));
-        pluginDefaultTest(new PluginValue<String>(String.class, "testKey", true));
+        defaultTest(new PluginValue("testKey", true));
+        defaultTest(new PluginListValue("testKey"));
+        pluginDefaultTest(new PluginValue("testKey", true));
     }
 
     private void defaultTest(Value val) {
@@ -76,13 +76,13 @@ public class TestPluginValue extends Abs
 
     public void testAlias() {
         aliasTest(new StringValue("testKey"));
-        aliasTest(new PluginValue<String>(String.class, "testKey", true));
-        aliasTest(new PluginListValue<String>(String[].class, "testKey"));
+        aliasTest(new PluginValue("testKey", true));
+        aliasTest(new PluginListValue("testKey"));
         emptyAliasTest(new StringValue("testKey"));
         emptyAliasTest(new StringValue("testKey"));
-        pluginAliasTest(new PluginValue<String>(String.class, "testKey", true));
-        pluginAliasTest(new PluginListValue<String>(String[].class, "testKey"));
-        pluginListAliasTest(new PluginListValue<String>(String[].class, "testKey"));
+        pluginAliasTest(new PluginValue("testKey", true));
+        pluginAliasTest(new PluginListValue("testKey"));
+        pluginListAliasTest(new PluginListValue("testKey"));
     }
 
     private void aliasTest(Value val) {
@@ -132,7 +132,7 @@ public class TestPluginValue extends Abs
     }
 
     public void testPluginListParsing() {
-        PluginListValue<String> val = new PluginListValue<String>(String[].class, "testKey");
+        PluginListValue val = new PluginListValue("testKey");
         assertEquals(0, val.getClassNames().length);
         val.setString("foo");
         assertEquals(1, val.getClassNames().length);

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java Sat Nov  5 17:17:26 2011
@@ -77,14 +77,20 @@ public class JDBCPersistenceProductDeriv
         Specification jpa = PersistenceProductDerivation.SPEC_JPA;
         Specification ejb = PersistenceProductDerivation.ALIAS_EJB;
 
-        conf.metaFactoryPlugin.setAlias(ejb.getName(), PersistenceMappingFactory.class.getName());
-        conf.metaFactoryPlugin.setAlias(jpa.getName(), PersistenceMappingFactory.class.getName());
-
-        conf.mappingFactoryPlugin.setAlias(ejb.getName(), PersistenceMappingFactory.class.getName());
-        conf.mappingFactoryPlugin.setAlias(jpa.getName(), PersistenceMappingFactory.class.getName());
-
-        conf.mappingDefaultsPlugin.setAlias(ejb.getName(), PersistenceMappingDefaults.class.getName());
-        conf.mappingDefaultsPlugin.setAlias(jpa.getName(), PersistenceMappingDefaults.class.getName());
+        conf.metaFactoryPlugin.setAlias(ejb.getName(),
+            PersistenceMappingFactory.class.getName());
+        conf.metaFactoryPlugin.setAlias(jpa.getName(),
+            PersistenceMappingFactory.class.getName());
+
+        conf.mappingFactoryPlugin.setAlias(ejb.getName(),
+            PersistenceMappingFactory.class.getName());
+        conf.mappingFactoryPlugin.setAlias(jpa.getName(),
+            PersistenceMappingFactory.class.getName());
+
+        conf.mappingDefaultsPlugin.setAlias(ejb.getName(),
+            PersistenceMappingDefaults.class.getName());
+        conf.mappingDefaultsPlugin.setAlias(jpa.getName(),
+            PersistenceMappingDefaults.class.getName());
         
         conf.lockManagerPlugin.setAlias("mixed", "org.apache.openjpa.jdbc.kernel.MixedLockManager");
         

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java Sat Nov  5 17:17:26 2011
@@ -418,7 +418,7 @@ public class XMLPersistenceMappingParser
      */
     private boolean startSecondaryTable(Attributes attrs)
         throws SAXException {
-        _secondaryTable = toTableIdentifier(getSchemaName(attrs),
+        _secondaryTable = toTableIdentifier(attrs.getValue("schema"),
             attrs.getValue("name")).getName();
         ((ClassMapping)currentElement()).getMappingInfo()
         	.addSecondaryTable(DBIdentifier.newTable(_secondaryTable));
@@ -458,7 +458,7 @@ public class XMLPersistenceMappingParser
         SequenceMapping seq = (SequenceMapping) getRepository().
             addSequenceMetaData(name);
         seq.setSequencePlugin(SequenceMapping.IMPL_VALUE_TABLE);
-        seq.setTableIdentifier(toTableIdentifier(getSchemaName(attrs),
+        seq.setTableIdentifier(toTableIdentifier(attrs.getValue("schema"),
             attrs.getValue("table")));
         seq.setPrimaryKeyColumnIdentifier(DBIdentifier.newColumn(attrs.getValue("pk-column-name"), delimit())); 
         seq.setSequenceColumnIdentifier(DBIdentifier.newColumn(attrs.getValue("value-column-name"), delimit())); 
@@ -486,21 +486,6 @@ public class XMLPersistenceMappingParser
     private void endTableGenerator() {
     	popElement();
     }
-    
-    /**
-     * Gets the name of the schema from the given attribute value <tt>"schema"</tt>.
-     * If the value is unspecified and a default schema is specified, then
-     * gets the default schema name.
-     * @param attrs attributes of an XML element
-     * @return the schema name
-     */
-    String getSchemaName(Attributes attrs) {
-    	String name = attrs.getValue("schema");
-    	if (StringUtils.isEmpty(name) && _schema != null) {
-    		return _schema;
-    	}
-    	return name;
-    }
 
     /**
      * Parse inheritance.
@@ -811,7 +796,7 @@ public class XMLPersistenceMappingParser
         ClassMapping mapping = (ClassMapping) currentElement();
         if (mapping.isAbstract())
             throw new UserException(_loc.get("table-not-allowed", mapping));
-        DBIdentifier table = toTableIdentifier(attrs.getValue(getSchemaName(attrs)),
+        DBIdentifier table = toTableIdentifier(attrs.getValue("schema"),
             attrs.getValue("name"));
         if (!DBIdentifier.isNull(table))
             mapping.getMappingInfo().setTableIdentifier(table);
@@ -823,7 +808,7 @@ public class XMLPersistenceMappingParser
      */
     private boolean startJoinTable(Attributes attrs)
         throws SAXException {
-        DBIdentifier sTable = toTableIdentifier(getSchemaName(attrs),
+        DBIdentifier sTable = toTableIdentifier(attrs.getValue("schema"),
             attrs.getValue("name"));
         if (!DBIdentifier.isNull(sTable)) {
             Object elem = currentElement();
@@ -1071,7 +1056,7 @@ public class XMLPersistenceMappingParser
 
     private DBIdentifier parseCollectionTable(Attributes attrs) {
         String tVal = attrs.getValue("name");
-        String sVal = getSchemaName(attrs);
+        String sVal = attrs.getValue("schema");
         return toTableIdentifier(sVal, tVal); 
     }
 

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/AbstractUnenhancedClassTest.java Sat Nov  5 17:17:26 2011
@@ -51,12 +51,11 @@ public abstract class AbstractUnenhanced
     //   * Java 6
     //   * Java 5 with javaagent
     //   * Java 5 without javaagent
-    OpenJPAConfiguration _conf;
+
     public void setUp() {
         setUp(getUnenhancedClass(), getUnenhancedSubclass(), CLEAR_TABLES);
         // trigger class redefinition
         emf.createEntityManager().close();
-        _conf = emf.getConfiguration();
         _log = emf.getConfiguration().getLog(OpenJPAConfiguration.LOG_ENHANCE);
     }
 
@@ -77,7 +76,7 @@ public abstract class AbstractUnenhanced
     public void testMetaData() {
         ClassMetaData meta = JPAFacadeHelper.getMetaData(emf,
             getUnenhancedClass());
-        assertEquals(ClassRedefiner.canRedefineClasses(_conf), meta
+        assertEquals(ClassRedefiner.canRedefineClasses(_log), meta
             .isIntercepting());
     }
 
@@ -265,7 +264,7 @@ public abstract class AbstractUnenhanced
 
     public void testEnhancer() throws IOException {
         List<Class<?>> subs =  ManagedClassSubclasser.prepareUnenhancedClasses(
-            emf.getConfiguration(), Collections.singleton(getUnenhancedClass()));
+            emf.getConfiguration(), Collections.singleton(getUnenhancedClass()), null);
         Class sub = subs.get(0);
         assertNotNull(sub);
         assertEquals("org.apache.openjpa.enhance."
@@ -312,7 +311,7 @@ public abstract class AbstractUnenhanced
 
         // we only expect lazy loading to work when we can redefine classes
         // or when accessing a property-access record that OpenJPA created.
-        if (ClassRedefiner.canRedefineClasses(_conf)
+        if (ClassRedefiner.canRedefineClasses(_log)
             || (!userDefined 
             	&& AccessCode.isProperty(sm.getMetaData().getAccessType()))) {
 
@@ -364,7 +363,7 @@ public abstract class AbstractUnenhanced
 
         // we only expect lazy loading to work when we can redefine classes
         // or when accessing a property-access record that OpenJPA created.
-        if (ClassRedefiner.canRedefineClasses(_conf)
+        if (ClassRedefiner.canRedefineClasses(_log)
             || AccessCode.isProperty(sm.getMetaData().getAccessType())) {
             assertFalse(sm.getLoaded()
                 .get(sm.getMetaData().getField("lazyField").getIndex()));
@@ -589,13 +588,14 @@ public abstract class AbstractUnenhanced
         ClassMetaData meta = JPAFacadeHelper.getMetaData(emf,
             getUnenhancedClass());
         List<Class<?>> subs =  ManagedClassSubclasser.prepareUnenhancedClasses(
-            emf.getConfiguration(), Collections.singleton(getUnenhancedClass()));
+            emf.getConfiguration(), Collections.singleton(getUnenhancedClass()),
+            null);
         assertSame(meta, JPAFacadeHelper.getMetaData(emf, subs.get(0)));
 
         meta = JPAFacadeHelper.getMetaData(emf, getUnenhancedSubclass());
         subs =  ManagedClassSubclasser.prepareUnenhancedClasses(
             emf.getConfiguration(),
-            Collections.singleton(getUnenhancedSubclass()));
+            Collections.singleton(getUnenhancedSubclass()), null);
         assertSame(meta, JPAFacadeHelper.getMetaData(emf, subs.get(0)));
     }
 

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/RestrictedMetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/RestrictedMetaDataRepository.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/RestrictedMetaDataRepository.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/RestrictedMetaDataRepository.java Sat Nov  5 17:17:26 2011
@@ -48,8 +48,8 @@ public class RestrictedMetaDataRepositor
         }
     }
     
-    public Set<String> getPersistentTypeNames(boolean devpath) {
-        Set<String> types = super.getPersistentTypeNames(devpath);
+    public Set<String> getPersistentTypeNames(boolean devpath, ClassLoader envLoader) {
+        Set<String> types = super.getPersistentTypeNames(devpath, envLoader);
         String[] typeArray = types.toArray(new String[types.size()]);
         for (String type : typeArray) {
             if(_excludedTypes.contains(type)) {

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementWithMultiplePUs.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementWithMultiplePUs.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementWithMultiplePUs.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestEnhancementWithMultiplePUs.java Sat Nov  5 17:17:26 2011
@@ -26,7 +26,6 @@ import java.util.List;
 
 import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
-import org.apache.openjpa.enhance.PCEnhancer.Flags;
 import org.apache.openjpa.lib.conf.Configurations;
 import org.apache.openjpa.lib.util.BytecodeWriter;
 import org.apache.openjpa.lib.util.J2DoPrivHelper;
@@ -47,13 +46,13 @@ public class TestEnhancementWithMultiple
         ClassLoader loader = AccessController
             .doPrivileged(J2DoPrivHelper.newTemporaryClassLoaderAction(
                 getClass().getClassLoader()));
-        conf.addClassLoader(loader);
         Project project = new Project();
 
-        String className = "org.apache.openjpa.enhance.UnenhancedBootstrapInstance";
+        String className =
+            "org.apache.openjpa.enhance.UnenhancedBootstrapInstance";
         BCClass bc = assertNotPC(loader, project, className);
 
-        PCEnhancer enhancer = new PCEnhancer(conf, bc, repos);
+        PCEnhancer enhancer = new PCEnhancer(conf, bc, repos, loader);
 
         assertEquals(PCEnhancer.ENHANCE_PC, enhancer.run());
         assertTrue(Arrays.asList(bc.getInterfaceNames()).contains(
@@ -80,11 +79,11 @@ public class TestEnhancementWithMultiple
         ClassLoader loader = AccessController
             .doPrivileged(J2DoPrivHelper.newTemporaryClassLoaderAction(
                 getClass().getClassLoader()));
-        conf.addClassLoader(loader);
         Project project = new Project();
 
         // make sure that the class is not already enhanced for some reason
-        String className = "org.apache.openjpa.enhance.UnenhancedBootstrapInstance";
+        String className =
+            "org.apache.openjpa.enhance.UnenhancedBootstrapInstance";
         BCClass bc = assertNotPC(loader, project, className);
 
         // build up a writer that just stores to a list so that we don't
@@ -99,7 +98,8 @@ public class TestEnhancementWithMultiple
             }
         };
 
-        PCEnhancer.run(conf, null, new PCEnhancer.Flags(), repos, writer);
+        PCEnhancer.run(conf, null, new PCEnhancer.Flags(), repos, writer,
+            loader);
 
         // ensure that we don't attempt to process classes listed in other PUs
         assertEquals(1, written.size());
@@ -108,13 +108,7 @@ public class TestEnhancementWithMultiple
         assertTrue(written.contains(className));
     }
 
-    
-    
-    /**
-     * This test is retired due to <A href="https://issues.apache.org/jira/browse/OPENJPA-2057">
-     * classloading changes</A>.
-     */
-    public void xtestEnhancementOfAllPUsWithinAResource()
+    public void testEnhancementOfAllPUsWithinAResource()
         throws IOException {
         OpenJPAConfiguration conf = new OpenJPAConfigurationImpl();
         Options opts = new Options();
@@ -124,7 +118,6 @@ public class TestEnhancementWithMultiple
         ClassLoader loader = AccessController
             .doPrivileged(J2DoPrivHelper.newTemporaryClassLoaderAction(
                 getClass().getClassLoader()));
-        conf.addClassLoader(loader);
         Project project = new Project();
 
         // make sure that the classes is not already enhanced for some reason
@@ -154,14 +147,8 @@ public class TestEnhancementWithMultiple
         opts.setProperty("MetaDataRepository", 
             "org.apache.openjpa.enhance.RestrictedMetaDataRepository(excludedTypes=" +
             "org.apache.openjpa.persistence.jdbc.annotations.UnenhancedMixedAccess)");
-        RestrictedMetaDataRepository rmdr = new RestrictedMetaDataRepository();
-        rmdr.setConfiguration(conf);
-        rmdr.setMetaDataFactory(repos.getMetaDataFactory());
-        
-        rmdr.setExcludedTypes("org.apache.openjpa.persistence.jdbc.annotations.UnenhancedMixedAccess");
         opts.put(PCEnhancer.class.getName() + "#bytecodeWriter", writer);
-        PCEnhancer.run(conf, null, new Flags(), rmdr, writer);
-//        PCEnhancer.run(null, opts);
+        PCEnhancer.run(null, opts);
 
         // ensure that we do process the classes listed in the PUs
         assertTrue(written.contains(

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestJDBCStoreOptSelect.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestJDBCStoreOptSelect.java?rev=1197994&r1=1197993&r2=1197994&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestJDBCStoreOptSelect.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestJDBCStoreOptSelect.java Sat Nov  5 17:17:26 2011
@@ -73,7 +73,7 @@ public class TestJDBCStoreOptSelect exte
             // Check to see how many fks(intermediate fields) we selected.
             StateManagerImpl smi = ((StateManagerImpl) ((PersistenceCapable) ee1).pcGetStateManager());
             ClassMetaData cmd =
-                em.getConfiguration().getMetaDataRepositoryInstance().getMetaData(OptSelectEntity.class, true);
+                em.getConfiguration().getMetaDataRepositoryInstance().getMetaData(OptSelectEntity.class, null, true);
             int fks = 0;
             for (FieldMetaData fmd : cmd.getFields()) {
                 if (smi.getIntermediate(fmd.getIndex()) != null) {
@@ -97,7 +97,7 @@ public class TestJDBCStoreOptSelect exte
         FetchPlan fp = em.pushFetchPlan();
         fp.removeFetchGroups(fp.getFetchGroups());
         for (Class<?> cls : new Class<?>[] { OptSelectEntity.class }) {
-            ClassMetaData cmd = mdr.getMetaData(cls, true);
+            ClassMetaData cmd = mdr.getMetaData(cls, null, true);
             for (FieldMetaData fmd : cmd.getFields()) {
                 fp.addField(cls, fmd.getName());
             }