We have this piece of code running on weblogic, its function is to return a java object specific to the input class from the input XML string. The code itself will be used by multiple threads (50+).
public static Object toXMLObject(String XMLString, Class xmlClass) throws Exception { StringReader strReader = null; try { JAXBContext context = JAXBContexts.getJAXBContext(xmlClass); //Cached JAXBContext Unmarshaller unmarshaller = context.createUnmarshaller(); strReader = new StringReader(XMLString); return unmarshaller.unmarshal(strReader); } catch(Exception e){ throw e; } finally { if(strReader != null){ strReader.close(); } } }
What we saw from a thread dump is that there are several threads (51 threads) trying to block one object
ExecuteThread: '52' for queue: 'automation'" daemon prio=3 tid=0x0000000103bcf800 nid=0x1a4 waiting for monitor entry [0xfffffffac2cfb000]** java.lang.Thread.State: BLOCKED (on object monitor) at sun.misc.URLClassPath.getLoader(URLClassPath.java:279) - locked <0xfffffffb89f00ed8> (a sun.misc.URLClassPath) at sun.misc.URLClassPath.findResource(URLClassPath.java:145) at java.net.URLClassLoader$2.run(URLClassLoader.java:385) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findResource(URLClassLoader.java:382) at java.lang.ClassLoader.getResource(ClassLoader.java:1002) at java.lang.ClassLoader.getResource(ClassLoader.java:997) at java.lang.ClassLoader.getResource(ClassLoader.java:997) at weblogic.utils.classloaders.GenericClassLoader.getResourceInternal(GenericClassLoader.java:168) at weblogic.utils.classloaders.GenericClassLoader.getResource(GenericClassLoader.java:182) at weblogic.utils.classloaders.FilteringClassLoader.getResourceInternal(FilteringClassLoader.java:129) at weblogic.utils.classloaders.GenericClassLoader.getResourceInternal(GenericClassLoader.java:154) at weblogic.utils.classloaders.GenericClassLoader.getResource(GenericClassLoader.java:182) at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1192) at org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.SAXParser. (Unknown Source) at org.apache.xerces.parsers.SAXParser. (Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser. (Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl. (Unknown Source) at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source) at weblogic.xml.jaxp.RegistrySAXParser. (RegistrySAXParser.java:65) at weblogic.xml.jaxp.RegistrySAXParser. (RegistrySAXParser.java:46) at weblogic.xml.jaxp.RegistrySAXParserFactory.newSAXParser(RegistrySAXParserFactory.java:91) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.getXMLReader(AbstractUnmarshallerImpl.java:86) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:194) at com.util.XMLParserUtil.toXMLObject(XMLParserUtil.java:699) ExecuteThread: '78' for queue: 'automation'" daemon prio=3 tid=0x000000010363b800 nid=0x1be waiting for monitor entry [0xfffffffabf8fb000]** java.lang.Thread.State: BLOCKED (on object monitor) at sun.misc.URLClassPath.getLoader(URLClassPath.java:279) - waiting to lock <0xfffffffb89f00ed8> (a sun.misc.URLClassPath) at sun.misc.URLClassPath.findResource(URLClassPath.java:145) at java.net.URLClassLoader$2.run(URLClassLoader.java:385) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findResource(URLClassLoader.java:382) at java.lang.ClassLoader.getResource(ClassLoader.java:1002) at java.lang.ClassLoader.getResource(ClassLoader.java:997) at java.lang.ClassLoader.getResource(ClassLoader.java:997) at weblogic.utils.classloaders.GenericClassLoader.getResourceInternal(GenericClassLoader.java:168) at weblogic.utils.classloaders.GenericClassLoader.getResource(GenericClassLoader.java:182) at weblogic.utils.classloaders.FilteringClassLoader.getResourceInternal(FilteringClassLoader.java:129) at weblogic.utils.classloaders.GenericClassLoader.getResourceInternal(GenericClassLoader.java:154) at weblogic.utils.classloaders.GenericClassLoader.getResource(GenericClassLoader.java:182) at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1192) at org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.SAXParser. (Unknown Source) at org.apache.xerces.parsers.SAXParser. (Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser. (Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl. (Unknown Source) at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source) at weblogic.xml.jaxp.RegistryXMLReader.getXMLReader(RegistryXMLReader.java:523) at weblogic.xml.jaxp.RegistryXMLReader.getXMLReaderInternal(RegistryXMLReader.java:453) at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:158) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:194) at com.util.XMLParserUtil.toXMLObject(XMLParserUtil.java:699)
Have we implemented the JAXB code correctly? How could we overcome this problem. Ps. we redefined JAXP with the latest version (1.4.6) to JDK1.6.0_33
source share