IBM Support

PM38854: POTENTIAL DEADLOCK IN OPENJPA WITH OBJECT RELATIONAL MAPPING (ORM) PROCESSING

Fixes are available

8.0.0.3: WebSphere Application Server V8.0 Fix Pack 3
7.0.0.23: WebSphere Application Server V7.0 Fix Pack 23
8.0.0.4: WebSphere Application Server V8.0 Fix Pack 4
7.0.0.25: WebSphere Application Server V7.0 Fix Pack 25
8.0.0.5: WebSphere Application Server V8.0 Fix Pack 5
7.0.0.27: WebSphere Application Server V7.0 Fix Pack 27
8.0.0.6: WebSphere Application Server V8.0 Fix Pack 6
7.0.0.29: WebSphere Application Server V7.0 Fix Pack 29
8.0.0.7: WebSphere Application Server V8.0 Fix Pack 7
8.0.0.8: WebSphere Application Server V8.0 Fix Pack 8
7.0.0.31: WebSphere Application Server V7.0 Fix Pack 31
7.0.0.27: Java SDK 1.6 SR13 FP2 Cumulative Fix for WebSphere Application Server
7.0.0.33: WebSphere Application Server V7.0 Fix Pack 33
8.0.0.9: WebSphere Application Server V8.0 Fix Pack 9
7.0.0.35: WebSphere Application Server V7.0 Fix Pack 35
8.0.0.10: WebSphere Application Server V8.0 Fix Pack 10
7.0.0.37: WebSphere Application Server V7.0 Fix Pack 37
8.0.0.11: WebSphere Application Server V8.0 Fix Pack 11
7.0.0.39: WebSphere Application Server V7.0 Fix Pack 39
8.0.0.12: WebSphere Application Server V8.0 Fix Pack 12
7.0.0.41: WebSphere Application Server V7.0 Fix Pack 41
8.0.0.13: WebSphere Application Server V8.0 Fix Pack 13
7.0.0.43: WebSphere Application Server V7.0 Fix Pack 43
8.0.0.14: WebSphere Application Server V8.0 Fix Pack 14
7.0.0.45: WebSphere Application Server V7.0 Fix Pack 45
8.0.0.15: WebSphere Application Server V8.0 Fix Pack 15
7.0.0.23: Java SDK 1.6 SR10 FP1 Cumulative Fix for WebSphere
7.0.0.25: Java SDK 1.6 SR11 Cumulative Fix for WebSphere Application Server
7.0.0.27: Java SDK 1.6 SR12 Cumulative Fix for WebSphere Application Server
7.0.0.29: Java SDK 1.6 SR13 FP2 Cumulative Fix for WebSphere Application Server
7.0.0.45: Java SDK 1.6 SR16 FP60 Cumulative Fix for WebSphere Application Server
7.0.0.31: Java SDK 1.6 SR15 Cumulative Fix for WebSphere Application Server
7.0.0.35: Java SDK 1.6 SR16 FP1 Cumulative Fix for WebSphere Application Server
7.0.0.37: Java SDK 1.6 SR16 FP3 Cumulative Fix for WebSphere Application Server
7.0.0.39: Java SDK 1.6 SR16 FP7 Cumulative Fix for WebSphere Application Server
7.0.0.41: Java SDK 1.6 SR16 FP20 Cumulative Fix for WebSphere Application Server
7.0.0.43: Java SDK 1.6 SR16 FP41 Cumulative Fix for WebSphere Application Server

Subscribe

You can track all active APARs for this component.

APAR status

  • Closed as program error.

Error description

  • There exists the potential for deadlock with the ORM XML
    processing function.
    
    In an environment with multiple threads (such as an application
    server), operations (such as creating a new
    EntityManagerFactory or transformation Classloader activity) can
    lead to a point where a Xerces SAX Parser (acquired by
    XMLFactory) is constituted and executed.
    
    Xerces calls Thread.currentThread().getContextClassloader()
    during its execution to construct the SAXParser (via
    ObjectFactory.createObject()). This means that within the call
    to Xerces, a ClassLoader lock will be attempted on the Thread's
    ContextClassLoader.
    
    
    If there is already a lock with a ClassLoader higher in the
    heirarchy, and another thread with a lock on the same
    ContextClassLoader that is waiting to acquire a lock on a
    higher level ClassLoader, then a deadlock will occur.
    

Local fix

  • N/A
    

Problem summary

  • ****************************************************************
    * USERS AFFECTED:  All users of IBM WebSphere Application      *
    *                  Server V7.0 and V8.0                        *
    ****************************************************************
    * PROBLEM DESCRIPTION: The potential for deadlock exists with  *
    *                      the ORM XML processing                  *
    *                      function.                               *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    There exists the potential for deadlock with the ORM XML
    processing function. In an environment with multiple threads
    (such as an application server), operations (such as creating
    a new EntityManagerFactory or transformation Classloader
    activity) can lead to a point where a Xerces SAX Parser
    (acquired by XMLFactory) is constituted and run. Xerces
    calls Thread.currentThread().getContextClassloader() during
    its execution to construct the SAXParser (via
    ObjectFactory.createObject()). This means that within the call
    to Xerces,a ClassLoader lock will be attempted on the Thread's
    ContextClassLoader. If there is already a lock with a
    ClassLoader higher in the heirarchy, and another thread with a
    lock on the same ContextClassLoader that is waiting to acquire
    a lock on a higher level ClassLoader, then a deadlock will
    occur.
    The deadlock occurs when a thread locks the compound
    classloader (which can occur when the transformation
    classloader is invoked) and xerces is called upon by the
    OpenJPA PCEnhancer to parse an ORM XML. Xerces will use the
    ClassLoader specified by the Thread's ContextClassLoader to
    find SAX/DOM Parser implementations, which means its
    ClassLoader activity will attempt to lock the Thread's
    ContextClassLoader.  In this situation, the ContextClassLoader
    is the classloader at the bottom of the heirarchy, such as the
    web container's application classloader.  The deadlock can
    occur if another thread performs a ClassLoader operation that
    locks the web container application classloader and makes a
    further attempt to lock a higher classloder (ie, the compound
    classloader).  This results in a deadlock between the two
    threads.
    

Problem conclusion

  • The solution is to change the Thread ContextClassLoader to the
    classloader used to load the OpenJPA implementation classes
    which guarantees that Xerces will use a ClassLoader that is
    higher up the ClassLoader heirarchy.
    
    An interim Fix is available to fix this problem.  In addition
    to installing the interim Fix, the following property must be
    set to enable the ContextClassLoader override in either the
    persistence unit definition within persistence.xml or as a
    server JVM property:
    
    =========================================
    Name:   openjpa.Compatibility
    Value:  OverrideContextClassloader=true
    =========================================
    
    The fix for this APAR is currently targeted for inclusion in
    fix pack 7.0.0.23 and 8.0.0.3.  Please refer to the Recommended
    Updates page for delivery information:
    http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980
    

Temporary fix

Comments

APAR Information

  • APAR number

    PM38854

  • Reported component name

    WEBSPHERE APP S

  • Reported component ID

    5724J0800

  • Reported release

    700

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2011-05-10

  • Closed date

    2012-02-16

  • Last modified date

    2012-02-16

  • APAR is sysrouted FROM one or more of the following:

    PM38422

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    WEBSPHERE APP S

  • Fixed component ID

    5724J0800

Applicable component levels

  • R700 PSY

       UP

  • R800 PSY

       UP



Document information

More support for: WebSphere Application Server
General

Software version: 7.0

Reference #: PM38854

Modified date: 16 February 2012