Hello All, I am using castor(1.2, upgraded to 1.3.2 as well) as data binding framework in one of the project. External systems (6 to be precise) send xml data (moderate) every second. Then we use castor to marshal/un marshal at various places in code.
Problem I am facing is - during unmarshalling process castor doesn't seem to pool (cache) the parsers (SAX), hence ends up looking up and then creating/loading parser for every request. This obviously has performance overheads. And since this is done internally and I couldn't find any configuration that tells castor to pool parsers, so I've hit dead end. Under extreme load this also leads to thread blocking/ deadlocks because of probably a defect in tomcat, when too many threads request to load same class. This looks like a nice feature to have in castor (if not there already). Following is snapshot thread blocking I mentioned earlier - Thread 1981: (state = BLOCKED) - org.apache.catalina.loader.WebappClassLoader.loadClass(java.lang.String, boolean) @bci=0, line=1524 (Compiled frame) - org.apache.catalina.loader.WebappClassLoader.loadClass(java.lang.String) @bci=3, line=1491 (Compiled frame) - javax.xml.parsers.FactoryFinder.getProviderClass(java.lang.String, java.lang.ClassLoader, boolean) @bci=25, line=111 (Interpreted frame) - javax.xml.parsers.FactoryFinder.newInstance(java.lang.String, java.lang.ClassLoader, boolean) @bci=3, line=146 (Interpreted frame) - javax.xml.parsers.FactoryFinder.find(java.lang.String, java.lang.String) @bci=345, line=233 (Interpreted frame) - javax.xml.parsers.SAXParserFactory.newInstance() @bci=4, line=128 (Interpreted frame) - org.exolab.castor.xml.util.XMLParserUtils.getSAXParser(boolean, boolean) @bci=2, line=118 (Interpreted frame) - org.castor.xml.AbstractInternalContext.getXMLReader(java.lang.String) @bci=56, line=262 (Interpreted frame) - org.castor.xml.AbstractInternalContext.getXMLReader() @bci=2, line=248 (Interpreted frame) - org.exolab.castor.xml.Unmarshaller.unmarshal(org.xml.sax.InputSource) @bci=8, line=692 (Interpreted frame) - org.springframework.oxm.castor.CastorMarshaller.unmarshalInputStream(java.io.InputStream) @bci=12, line=386 (Interpreted frame) - org.springframework.oxm.support.AbstractMarshaller.unmarshalStreamSource(javax.xml.transform.stream.StreamSource) @bci=12, line=368 (Interpreted frame) - org.springframework.oxm.support.AbstractMarshaller.unmarshal(javax.xml.transform.Source) @bci=57, line=134 (Interpreted frame) Any help/pointers would be greatly appreciated. --Bhushan DISCLAIMER ========== This e-mail may contain privileged and confidential information which is the property of Persistent Systems Ltd. It is intended only for the use of the individual or entity to which it is addressed. If you are not the intended recipient, you are not authorized to read, retain, copy, print, distribute or use this message. If you have received this communication in error, please notify the sender and delete all copies of this message. Persistent Systems Ltd. does not accept any liability for virus infected mails.

