Hi Andrew,

System properties are global settings. It's not always a good idea to set 
them. If you were to set the system property in an application server 
where other applications have a preference to use alternate JAXP 
implementations you may break them.

Frameworks such as OSGi allow bundles to be loaded/unloaded dynamically 
meaning that the "classpath" which the ClassLoader searches over can 
change over time. It may return a different implementation or another 
version of the same implementation depending on when you invoke 
XMLReaderFactory.createXMLReader().

Thanks.

Michael Glavassevich
XML Technologies and WAS Development
IBM Toronto Lab
E-mail: mrgla...@ca.ibm.com
E-mail: mrgla...@apache.org

Andrew Welch <andrew.j.we...@gmail.com> wrote on 11/13/2013 06:10:12 AM:

> Hi again,
> 
> Out of interest - what's the reason for not setting the system
> property after doing the META-INF search?  At the moment every jar
> file gets examined every time an XMLReader is created - is there a
> situation where users want different results from subsequent calls to
> createXMLReader("...")  controlled purely by the classpath?
> 
> With that system property set, it's really fast to create XMLReaders...
> 
> 
> On 12 November 2013 19:18, Michael Glavassevich <mrgla...@ca.ibm.com> 
wrote:
> > Hi Andrew,
> >
> > Creating a new XML parser can be very expensive. The ClassLoader used 
to
> > create the parser and its internal components might block or spend a 
long
> > time searching its "classpath" for META-INF/services files. This is 
why
> > it's generally a good idea to cache and reuse [1] XML parser 
instances.
> >
> > Thanks.
> >
> > [1]
> > 
http://www.ibm.com/developerworks/xml/library/x-perfap2/index.html#reuse
> >
> > Michael Glavassevich
> > XML Technologies and WAS Development
> > IBM Toronto Lab
> > E-mail: mrgla...@ca.ibm.com
> > E-mail: mrgla...@apache.org
> >
> > Andrew Welch <andrew.j.we...@gmail.com> wrote on 11/12/2013 07:48:47 
AM:
> >
> >> Hi,
> >>
> >> A colleague was doing some performance testing and discovered some
> >> contention at this line of my code:
> >>
> >> 
XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
> >>
> >> ...which was surprising : ) He informed me it was doing a blocking
> >> operation every time.
> >>
> >> Anyway, he went away and went through the Xerces source and found 
that
> >> if the "org.apache.xerces.xni.parser.XMLParserConfiguration" system
> >> property is not set it does indeed do a blocking operation (in
> >> parsers.ObjectFactory)
> >>
> >> To demonstrate this, run the below code with and without the system
> >> property set:
> >>
> >> public static void main(String... args) throws Exception {
> >>
> >>     //System.setProperty
> >> ("org.apache.xerces.xni.parser.XMLParserConfiguration",
> >>     // "org.apache.xerces.parsers.XIncludeParserConfiguration");
> >>
> >>     long start = System.nanoTime();
> >>
> >>     for (int i = 0; i <= 10000; i++) {
> >>         XMLReaderFactory.createXMLReader
> >> ("org.apache.xerces.parsers.SAXParser");
> >>     }
> >>
> >>     long end = System.nanoTime();
> >>     double millis = (end - start) * 1e-6;
> >>
> >>     System.out.println(millis);
> >>
> >> }
> >>
> >> On my machine it consistently takes around ~2000ms without the system
> >> property, and ~1300ms with.
> >>
> >> This is present in both 2.9 and 2.11 as far as I can see.
> >>
> >>
> >>
> >>
> >> --
> >> Andrew Welch
> >> http://andrewjwelch.com
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
> >> For additional commands, e-mail: j-users-h...@xerces.apache.org
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
> > For additional commands, e-mail: j-users-h...@xerces.apache.org
> >
> 
> 
> 
> -- 
> Andrew Welch
> http://andrewjwelch.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
> For additional commands, e-mail: j-users-h...@xerces.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
For additional commands, e-mail: j-users-h...@xerces.apache.org

Reply via email to