Hi. 

I am new to the list and sorry if I get something wrong.  I searched the 
existing archives, but could not find the answer I am looking for.  Thanks for 
any help you have.  

We are seeing some small performance issues in our production environment.  I 
am busy seeing if I can reproduce them.  My questions are regarding these 
issues and possibly working around them.

1. CachedXpathApi is working well for us. I do see that the constructor is 
expensive.  I read on some IBM documentation that if you don't reuse 
parsers..the constructor is expensive because it tries to find a factory via 
jar file location (looping through the classpath).  In fact I see this 
happening when I look at the thread dump.  I see all the documentation and 
comments that indicate if you change a source document, then you need a new 
CachedXpathApi.  I see two things that I am not sure may work.

a) cachedXpathApi.getXpathContext().reset().  Can I call this instead of 
creating a new CachedXpathApi and then using the cachedXpathApi object to 
search new document?  I will still make the cachedXpathApi only execute in a 
single thread, but I don't want to call the constructor.
b)There is also a constructor which takes another CachedXpathApi(CachedXPathApi 
cachedXpathApi).  Is this of some use?
c) Can I use compiled xpath expressions and achieve a similar effect as the 
CachedXpathApi somehow...where I don't have to construct the CachedXpathApi()?  
Does someone have a quick sample?

2. We are using the apache DOM parser.  Basically the DOMParser is the default 
apache one (version 2.7.0).  Currently we create the Builder from the factory 
and then call parse.  DocumentBuilderFactory.newDocumentBuilder()....I cannot 
remember exactly the syntax.  We can certainly not have to create the 
DocumentBuilder each time and I am suggesting this as a fix.  What I see happen 
is that there is some minor performance issues that happen in production in the 
parse method.  I don't have the execution thread handy, but it is always 
spending time on DocumentScanner$DTDDispatcher.dispatch method (may not be 
exact syntax)  Looks like all methods for the declaration handler.  I have to 
double check that, but the methods are named like the sax declaration 
handler...but we are not using SAX.  We have an entityId as the second line in 
the xml file that points to a DTD that only has a single line in the DTD file.  
I've tried to understand the code, but haven't
 been able to figure it out

a) Will I stop seeing DTDDispatcher time taken in the threads if I remove the 
entity line in the source xml (no reference to a DTD)?
b) Is what I'm seeing completely normal?
c) can I set a property that will turn off the DTDDispatcher.dispatch method 
from being called?



Here are the methods I see that are spending time and things like 
string.intern().  Maybe it is completely normal, but it doesn't explain why it 
is slower in production...except that production load may be causing it...and 
that would be fine.

public void elementDecl(String name, String model)
   throws SAXException;
  public void attributeDecl(String elementName, 
   String attributeName, String type, String mode, 
   String defaultValue) throws SAXException;
  public void internalEntityDecl(String name, String value) 
   throws SAXException;
  public void externalEntityDecl(String name, String publicID, 
   String systemID) throws SAXException;





      __________________________________________________________________
Yahoo! Canada Toolbar: Search from anywhere on the web, and bookmark your 
favourite sites. Download it now
http://ca.toolbar.yahoo.com.

Reply via email to