Deadlock Potential with ORM XML Processing ------------------------------------------
Key: OPENJPA-1993 URL: https://issues.apache.org/jira/browse/OPENJPA-1993 Project: OpenJPA Issue Type: Bug Components: kernel Affects Versions: 2.1.0, 2.0.1, 2.0.0, 1.2.2, 1.2.1, 1.2.0, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0 Reporter: Jody Grassel Assignee: Jody Grassel 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. A solution to this problem is to temporally set the Thread's ContextClassLoader at the point where XML APIs are invoked (such as in XMLFactory, XMLMetaDataParser) to the ClassLoader that loaded the OpenJPA implementation classes. This will prevent Xerces from starting with a lower level classloader and avoid this deadlock potential. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira