"William Brogden" <wb******@bga.com> wrote in message news:<3f********@giga.realtime.net>...
"Alan Krueger" <ml******@sneakemail.com> wrote in message
news:ee**************************@posting.google.c om... Greetings,
I've been able to cache Transformer objects in a Tomcat-based servlet
application to avoid unnecessary Transformer rebuilding, except for
certain ones on certain machines. I'm running Tomcat 4.1.27 under
Eclipse 2.1.0 using the Sysdeo Tomcat plugin using j2re1.4.1_02 under
Windows 2000 SP4.
I've digested this down to a small (albeit convoluted) sample that
exhibits the behavior reliably on my development workstation.
Accessing this servlet more than once (hitting reload in the browser)
causes a NullPointerException to be thrown from within the Transformer
object.
The javax.xml.transform.Transformer API states that an instance can not be
used in multiple Threads running concurrently. You should not be surprised
that it blows up with two "simultaneous" requests.
I didn't say "simultaneous" requests. I was the only one running
against Tomcat on my workstation, and the second request was not
performed until the first one had completed. I was running Tomcat in
Eclipse with a breakpoint, so I know there are no threading issues
entering here.
This sample case was contrived to be as small as possible to manifest
the problem I was having, and obviously could not contain
thread-safety and the pooling code present in the full web
application. I'm sorry if this minimization of the code caused any
confusion, but usually presenting a minimal manifestation of an error
is recommended in programming newsgroups.
In any case, I ended up blowing away all Java JDKs and runtimes, all
Xerces/Xalan instances, and Eclipse with all plugins. I reinstalled
everything with only JDK 1.3_09 and things now seem to be working
without any Java or XSLT changes. Weird.