You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2011/08/01 21:23:22 UTC

svn commit: r1152903 - in /openjpa/branches/1.2.x: openjpa-kernel/src/main/java/org/apache/openjpa/conf/ openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ openjpa-lib/src/main/java/org/apache/openjpa/lib/util/ openjpa-lib/src/main/resources/org/ap...

Author: mikedd
Date: Mon Aug  1 19:23:21 2011
New Revision: 1152903

URL: http://svn.apache.org/viewvc?rev=1152903&view=rev
Log:
Revert "OPENJPA-1993: Deadlock Potential with ORM XML Processing"

This reverts commit 269554473e49da356723ee6cb167ac298f19d121.

Modified:
    openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
    openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java
    openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java
    openjpa/branches/1.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/meta/localizer.properties
    openjpa/branches/1.2.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java

Modified: openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java?rev=1152903&r1=1152902&r2=1152903&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java (original)
+++ openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java Mon Aug  1 19:23:21 2011
@@ -58,7 +58,6 @@ public class Compatibility {
     private boolean _flushBeforeDetach = true;
     private boolean _reorderMetaDataResolution = false;
     private boolean _reloadOnDetach = true;
-    private boolean _overrideContextClassloader = false;
 
     /**
      * Whether to require exact identity value types when creating object
@@ -319,23 +318,6 @@ public class Compatibility {
         _reloadOnDetach = reloadOnDetach;
     }   
 
-    /**
-     * Whether to temporally override the thread's Context Classloader when processing
-     * ORM XML documents to avoid deadlock potential with certain Classloader hierarchy
-     * configurations.  Defaults to false.
-     */
-    public boolean getOverrideContextClassloader() {
-        return _overrideContextClassloader;
-    }
-
-    /**
-     * Whether to temporally override the thread's Context Classloader when processing
-     * ORM XML documents to avoid deadlock potential with certain Classloader hierarchy
-     * configurations.  Defaults to false.
-     */
-    public void setOverrideContextClassloader(boolean overrideContextClassloader) {
-        _overrideContextClassloader = overrideContextClassloader;
-    }
     
 
 }

Modified: openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java?rev=1152903&r1=1152902&r2=1152903&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java (original)
+++ openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/XMLMetaDataParser.java Mon Aug  1 19:23:21 2011
@@ -105,17 +105,7 @@ public abstract class XMLMetaDataParser 
     private LexicalHandler _lh = null;
     private int _depth = -1;
     private int _ignore = Integer.MAX_VALUE;
-    
-    private boolean _overrideContextClassloader = false;
 
-    public boolean getOverrideContextClassloader() {
-        return _overrideContextClassloader;
-    }
-    
-    public void setOverrideContextClassloader(boolean overrideCCL) {
-        _overrideContextClassloader = overrideCCL;
-    }
-    
     /**
      * Whether to parse element text.
      */
@@ -359,59 +349,36 @@ public abstract class XMLMetaDataParser 
         // parse the metadata with a SAX parser
         try {
             _sourceName = sourceName;
-            SAXParser parser = null;
-            ClassLoader oldLoader = null;
-            
-            try {
-                if (_overrideContextClassloader == true) {
-                    oldLoader = (ClassLoader) AccessController.doPrivileged(
-                        J2DoPrivHelper.getContextClassLoaderAction());
-                    AccessController.doPrivileged(J2DoPrivHelper.setContextClassLoaderAction(
-                        XMLMetaDataParser.class.getClassLoader()));
-                }
-                
-                parser = XMLFactory.getSAXParser(validating, true);
-                Object schema = null;
-                if (validating) {
-                    schema = schemaSource;
-                    if (schema == null && getDocType() != null)
-                        xml = new DocTypeReader(xml, getDocType());
-                }
-
-                if (_parseComments || _lh != null)
-                    parser.setProperty
-                        ("http://xml.org/sax/properties/lexical-handler", this);
-
-                if (schema != null) {
-                    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);
-                }
+            SAXParser parser = XMLFactory.getSAXParser(validating, true);
+            Object schema = null;
+            if (validating) {
+                schema = schemaSource;
+                if (schema == null && getDocType() != null)
+                    xml = new DocTypeReader(xml, getDocType());
+            }
 
-                InputSource is = new InputSource(xml);
-                if (_systemId && sourceName != null)
-                    is.setSystemId(sourceName);
-                parser.parse(is, this);
-                finish();
-            } catch (SAXException se) {
-                IOException ioe = new IOException(se.toString());
-                JavaVersions.initCause(ioe, se);
-                throw ioe;
-            } finally {
-                if (_overrideContextClassloader == true && oldLoader != null) {
-                    // Restore the old ContextClassloader
-                    try {
-                        AccessController.doPrivileged(J2DoPrivHelper.setContextClassLoaderAction(oldLoader));
-                    } catch (Throwable t) {
-                        if (_log != null && _log.isTraceEnabled()) {
-                            _log.trace(_loc.get("restore-contextclassloader-failed"));
-                        }
-                    }
-                }
+            if (_parseComments || _lh != null)
+                parser.setProperty
+                    ("http://xml.org/sax/properties/lexical-handler", this);
+
+            if (schema != null) {
+                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);
             }
+
+            InputSource is = new InputSource(xml);
+            if (_systemId && sourceName != null)
+                is.setSystemId(sourceName);
+            parser.parse(is, this);
+            finish();
+        } catch (SAXException se) {
+            IOException ioe = new IOException(se.toString());
+            JavaVersions.initCause(ioe, se);
+            throw ioe;
         } finally {
             reset();
         }

Modified: openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java?rev=1152903&r1=1152902&r2=1152903&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java (original)
+++ openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java Mon Aug  1 19:23:21 2011
@@ -789,25 +789,6 @@ public abstract class J2DoPrivHelper {
             }
         };
     }
-    
-    /**
-     * Return a PrivilegeAction object for Thread.currentThread
-     *   .setContextClassLoader().
-     * 
-     * Requires security policy:
-     *   'permission java.lang.RuntimePermission "setContextClassLoader";'
-     *   
-     * @return ClassLoader
-     */
-    public static final PrivilegedAction<Boolean> 
-            setContextClassLoaderAction(final ClassLoader loader) {
-        return new PrivilegedAction<Boolean>() {
-            public Boolean run() {
-                Thread.currentThread().setContextClassLoader(loader);
-                return Boolean.TRUE;
-            }
-        };
-    }
 
     /**
      * Return a PrivilegedAction object for new Thread().

Modified: openjpa/branches/1.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/meta/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/meta/localizer.properties?rev=1152903&r1=1152902&r2=1152903&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/meta/localizer.properties (original)
+++ openjpa/branches/1.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/meta/localizer.properties Mon Aug  1 19:23:21 2011
@@ -25,8 +25,6 @@ cant-diff-elems: Unable to differentiate
 	elements for class arg parsing.  No element can be a complete prefix of \
 	another.
 class-arg: Error extracting class information from "{0}".
-restore-contextclassloader-failed: An error occurred restoring the Thread's \
-    context classloader.
 parse-error: An error was encountered while parsing element "{0}".  Make sure \
 	the metadata file is correctly formatted.
 no-file: No source file found for "{0}".

Modified: openjpa/branches/1.2.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?rev=1152903&r1=1152902&r2=1152903&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java (original)
+++ openjpa/branches/1.2.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java Mon Aug  1 19:23:21 2011
@@ -238,14 +238,6 @@ public class XMLPersistenceMetaDataParse
         if (repos != null
             && (repos.getValidate() & repos.VALIDATE_RUNTIME) != 0)
             setParseComments(false);
-        
-        if (repos != null) {
-            // Determine if the Thread Context Classloader needs to be temporally overridden to the Classloader
-            // that loaded the OpenJPA classes, to avoid a potential deadlock issue with the way Xerces
-            // handles parsers and classloaders.
-            this.setOverrideContextClassloader(repos.getConfiguration().getCompatibilityInstance().
-                getOverrideContextClassloader());
-        }
     }
 
     /**