この特定のコードを weblogic で実行しています。その機能は、XML 入力文字列から入力クラスに固有の Java オブジェクトを返すことです。コード自体は複数のスレッド (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();
}
}
}
スレッド ダンプからわかったことは、複数のスレッド (51 スレッド) が単一のオブジェクトをロックしようとしているということです。
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)
JAXB コードを適切に実装しましたか? どうすればこの問題を克服できるでしょうか。Ps。JDK1.6.0_33 の最新バージョン (1.4.6) で JAXP をオーバーライドしました。