But Huw,

Do you find that, if your parse the same document several times, the first
parse is always significantly slowly than the rest, or is it just me?!

Justin

----- Original Message ----- 
From: "Huw Roberts" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, January 11, 2005 11:05 AM
Subject: RE: Problem caching grammars


> Out of interest, I've also been trying to cache grammars recently (posted
on
> 2004/12/23).
> In the end I used the following code:
>
> System.setProperty("org.apache.xerces.xni.parser.XMLParserConfiguration",
>
"org.apache.xerces.parsers.XMLGrammarCachingConfiguration");
>         XMLGrammarCachingConfiguration xmlComponentManager = new
> XMLGrammarCachingConfiguration();
>         xmlComponentManager.clearGrammarPool();  // this will clear the
> grammar pool of the (about to be created) parser.
>         try {
>             mXmlReader =
> XMLReaderFactory.createXMLReader(XmlElementUtil.SAX_PARSER_CLASS);
>             mXmlReader.setFeature(XmlElementUtil.SCHEMA_FEATURE, true);
>
mXmlReader.setFeature("http://xml.org/sax/features/validation";,
> true);
>             mXmlReader.setProperty(XmlElementUtil.SCHEMA_LOCATION,
> uriSchemaLocation);
>             EntityResolver resolver = new
> XmlElementUtil.JavaResourceEntityResolver(mClassLoader);
>             mXmlReader.setEntityResolver(resolver);
>             InputSource inputSource = new InputSource(new
> StringReader("<CSLSystem/>"));
>             mXmlReader.setErrorHandler(new DefaultHandler());
>             mXmlReader.parse(inputSource);
>         }
>         catch (Exception ex) {
>             sCategory.error("Unexpected exception thrown during schema
> load", ex);
>         }
> After this code has been executed the cache is populated.
>
> Note that I only have a single no-namespace-schema so it doesn't matter
that
> my initial parse
> has minimal content.  Also I could probably discard the XMLReader
> (mXmlReader) rather than
> re-using it; I don't think it will make any difference to the cache.
> Finally note that
> if you throw an exception during the first parse, then the cache
> (GrammarPool) may not
> be populated.
>
>
> -----Original Message-----
> From: Justin Robinson [mailto:[EMAIL PROTECTED]
> Sent: 08 January 2005 18:50
> To: [EMAIL PROTECTED]
> Subject: Re: Problem caching grammars
>
>
> A quick breakpoint shows the validator attempts to retrieve only the
grammar
> that I've put in. So the caching doesn't seem to be the problem. I'll look
> again and see if I can find a hold-up in configurePipeline().
>
>
> ----- Original Message -----
> From: "Bob Foster" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Saturday, January 08, 2005 5:54 PM
> Subject: Re: Problem caching grammars
>
>
> > Justin Robinson wrote:
> >
> > > Thanks Chris,
> > >
> > > I'll take a look there. Do you know if Xerces actually tries to access
> > > namespaces/schemas from off the net?
> >
> > Not a namespace; a namespace is just a string and can't be 'accessed'.
> > But it will get a schema off the net if it has a location on the net.
> > Wouldn't work otherwise.
> >
> > > I'm wondering if, initially, my pool is
> > > missing a grammar and on the first parse it's actually caching the
> grammar
> > > I've missed.
> >
> > Sounds likely. You can set a breakpoint in retrieveGrammar() to see if
> > you get called for a schema you aren't expecting.
> >
> > Bob Foster
> >
> > >
> > > Justin
> > >
> > > ----- Original Message -----
> > > From: "Christopher Ebert" <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Thursday, January 06, 2005 8:41 PM
> > > Subject: RE: Problem caching grammars
> > >
> > >
> > >
> > > Just a guess here, but since it's the first parse, I'd suspect
> > > configurePipeline() or some other initialization step. You might look
at
> > > the configuration mechanism and see if there's a way to streamline it;
> > > this would probably mean looking at the way the configuration is
> > > determined and setting parameters for the first pathway that's checked
> > > so it gets the configuration you want.
> > >
> > > HTH
> > >
> > > Chris
> > >
> > > -----Original Message-----
> > > From: Justin Robinson [mailto:[EMAIL PROTECTED]
> > > Sent: Thursday, January 06, 2005 12:34
> > > To: [EMAIL PROTECTED]
> > > Subject: Re: Problem caching grammars
> > >
> > > Any thoughts on this?
> > >
> > > ----- Original Message -----
> > > From: "Justin Robinson" <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Sunday, January 02, 2005 2:34 PM
> > > Subject: Problem caching grammars
> > >
> > >
> > >
> > >>Hi there....
> > >>
> > >>I have managed to preparse my XML Schema and have put it in a grammar
> > >
> > > pool,
> > >
> > >>according to the active caching approach descrbied at
> > >>http://xml.apache.org/xerces2-j/faq-grammars.html#faq-1
> > >>
> > >>I'm expecting the time taken to set up my SAX parser to increase,
> > >
> > > which it
> > >
> > >>does, so that's fine.
> > >>I'm also expecting the time taken on the first parse call to decrease.
> > >>
> > >>This is where my problem is. The first parse still takes an average of
> > >
> > > about
> > >
> > >>7 times longer than subsequent parses.
> > >>
> > >>What else must I do to bring down the time taken for the first parse??
> > >>
> > >>I tried to look at the source code, but I'm having trouble locating
> > >
> > > where
> > >
> > >>the time might be taken up (still learning how to debug). The path of
> > >>execution goes through these classes:
> > >>
> > >>1. AbstractSAXParser
> > >>2. XMLParser
> > >>3. XML11Configuration (methods parse() and configurePipeline())
> > >>
> > >>Any ideas?
> > >>
> > >>Here's how I set up the grammar pool:
> > >>
> > >>   private XMLGrammarPool getGrammarPool() throws IOException {
> > >>      // create grammar preparser
> > >>
> > >>      XMLGrammarPreparser preparser = new XMLGrammarPreparser();
> > >>
> > >>      // register a specialized default pre-parser
> > >>      preparser.registerPreparser(XMLGrammarDescription.XML_SCHEMA,
> > >
> > > null);
> > >
> > >>      // create grammar pool
> > >>      XMLGrammarPool grammarPool = new XMLGrammarPoolImpl();
> > >>
> > >>      // set the grammar pool on the grammar preparser
> > >>      // so that all the compiled grammars are automatically
> > >>      // placed to the grammar pool
> > >>
> > >>
> > >
> > >
preparser.setProperty("http://apache.org/xml/properties/internal/grammar
> > > -poo
> > >
> > >>l", grammarPool);
> > >>
> > >>      // parse grammar(s). They are automatically added to the pool,
> > >>beacause of the above
> > >>      // property that has been set.
> > >>      preparser.setFeature("http://xml.org/sax/features/namespaces";,
> > >
> > > true);
> > >
> > >>      preparser.setFeature("http://xml.org/sax/features/validation";,
> > >
> > > true);
> > >
> > >>
> > >
preparser.setFeature("http://apache.org/xml/features/validation/schema";,
> > >
> > >>true);
> > >>
> > >>
> > >
> > >
preparser.setFeature("http://apache.org/xml/features/validation/schema-f
> > > ull-
> > >
> > >>checking", true);
> > >>
> > >>      Grammar g = preparser.preparseGrammar(
> > >>          XMLGrammarDescription.XML_SCHEMA, new XMLInputSource(null,
> > >>
> > >>
> > >
> > >
"c:\\jdev\\workspace\\UncleJustWiki\\xmlschemas\\DraftRevisionSchema.xsd
> > > ",
> > >
> > >>                null));
> > >>
> > >>      // lock grammar pool. Don't add any more grammars
> > >>      grammarPool.lockPool();
> > >>      return grammarPool;
> > >>   }
> > >>
> > >>Regards,
> > >>Justin
> > >>
> > >>
> > >>
> > >>---------------------------------------------------------------------
> > >>To unsubscribe, e-mail: [EMAIL PROTECTED]
> > >>For additional commands, e-mail: [EMAIL PROTECTED]
> > >>
> > >>
> > >
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to