Hi Prashant, We have found a suitable work around for the issue. We have replaced the NodeList implementation which surely is not thread safe due to the caching mechanism built in it.
We implemented "NodeList" using "Node" The "for" loop is replaced by "while" loop as follows:- First Element - Node's getFirstChild method Next Element - Node's getNextSibling method End of Iteration- Null is obtained when getNextSibling is used. We have tested at our end and it worked fine. This might be a good alternative implementation for NodeList. In this solution there is no SLA impact , this solution is does not have any synchronization. Please suggest if you find any potential problem in this work around. Soumya Chatterjee Tata Consultancy Services Mailto: [EMAIL PROTECTED] Website: http://www.tcs.com ____________________________________________ Experience certainty. IT Services Business Solutions Outsourcing ____________________________________________ Prashant Reddy <[EMAIL PROTECTED]> 07/25/2007 06:20 PM Please respond to [EMAIL PROTECTED] To j-users@xerces.apache.org cc Soumya Chatterjee <[EMAIL PROTECTED]> Subject Re: Got the Issue On Wed, 2007-07-25 at 11:58 +0530, Soumya Chatterjee wrote: > > Hi Michael, > > Do you think SAX is a good alternative for the DOM in this case. We > can migrate the parsing mechanism to SAX if there is no thread safe > issue in SAX parser. SAX will help you build custom Data model for the XML it is parsing. Usually SAX parsing of XML file is done only once (inside a method) to construct the Data model. It is *not* a good idea to start a SAX parser every time you would like to read something from the XML. (if thats what you were hinting at in your question above) You could think of DOM as a "generic" Data model that works for all XMLs. While using DOM every thing is a Node/Element/Text Node and you lose out on type safety and domain friendliness a custom Data model would offer. Consider the proverbial purchase order xml[1] for example: You could walk this XML with SAX parser and construct Data model like Class PurchaseOrder { Address getShippingAddress(); Address getBillingAddress(); List<Item> getItemsOrdered(); String getComment(); } //Notice there are not setters Where if you were to make DOM of the same XML, you would have to walk NodeList list = purchaseOrderNode.getChildNodes(); //This is not thread safe Now is it a good alternative to DOM ? The answer would depend as always on your use-cases. An immutable Data object is as thread safe as it can get. And if you are accesses to XML are read only, constructing a Data model from SAX parsing is worth considering. Hope this helps -Prashant [1] : http://www.w3.org/TR/xmlschema-0/#po.xml PS: While you are at exploring options, you could also give JAXB a look see. > Thanks, > Soumya Chatterjee > Tata Consultancy Services > Mailto: [EMAIL PROTECTED] > Website: http://www.tcs.com > ____________________________________________ > Experience certainty. IT Services > Business Solutions > Outsourcing > ____________________________________________ > > > Michael Glavassevich > <[EMAIL PROTECTED]> > > 07/24/2007 07:27 PM > > > To > Soumya Chatterjee > <[EMAIL PROTECTED]> > cc > j-users@xerces.apache.org > Subject > Re: Got the Issue > > > > > > > > > Hi Soumya, > > Xerces' DOM implementation isn't thread-safe. If you try to access > the > same DOM instance from multiple threads without synchronizing it > you'll > run into these problems. You either need to synchronize your code or > create an instance of the DOM tree per thread. There's really no way > around it. > > Thanks. > > Michael Glavassevich > XML Parser Development > IBM Toronto Lab > E-mail: [EMAIL PROTECTED] > E-mail: [EMAIL PROTECTED] > > Soumya Chatterjee <[EMAIL PROTECTED]> wrote on 07/24/2007 > 09:42:08 > AM: > > > Hi Michael, > > > > I found out the response from you regarding the "xerces DOM > > concurrent access" and I think it is the same as our application in > > the case. http://spteam-lists.blogspot.com/2007/04/re-xerces-dom- > > concurrent-access-and.html > > > > By the way we were not getting the exception as frequently in the > > weblogic 7.1 ( JDK 1.3) when we are using the following Xerces. > > > > But we are getting the exception in case of weblogic 9.1 much more > > frequently which uses JDK1.5 and different version of Xerces. > > > > Synchronization is not an option in this case because there is a > > huge performance issue here. Please let me know if any way we can > > get read of this problem without using the Synchronization block. > > > > Thanks, > > Soumya Chatterjee > > Tata Consultancy Services > > Mailto: [EMAIL PROTECTED] > > Website: http://www.tcs.com > > ____________________________________________ > > Experience certainty. IT Services > > Business Solutions > > Outsourcing > > ____________________________________________ > > ForwardSourceID:NT00009A82 > =====-----=====-----===== > Notice: The information contained in this e-mail > message and/or attachments to it may contain > confidential or privileged information. If you are > not the intended recipient, any dissemination, use, > review, distribution, printing or copying of the > information contained in this e-mail message > and/or attachments to it are strictly prohibited. If > you have received this communication in error, > please notify us by reply e-mail or telephone and > immediately and permanently delete the message > and any attachments. Thank you > > -- -Prashant Don't upload, just share : www.dekoh.com ForwardSourceID:NT00009B6E =====-----=====-----===== Notice: The information contained in this e-mail message and/or attachments to it may contain confidential or privileged information. If you are not the intended recipient, any dissemination, use, review, distribution, printing or copying of the information contained in this e-mail message and/or attachments to it are strictly prohibited. If you have received this communication in error, please notify us by reply e-mail or telephone and immediately and permanently delete the message and any attachments. Thank you