Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > problems reusing certain Transformers in Tomcat - NullPointerException

Reply
Thread Tools

problems reusing certain Transformers in Tomcat - NullPointerException

 
 
Alan Krueger
Guest
Posts: n/a
 
      09-08-2003
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.

Any help in figuring out what we're doing wrong, or what could be
causing this exception, would be greatly appreciated.

Thanks,
Alan Krueger


---begin TestReuseTransformerServlet.java---
import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationExcept ion;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class TestReuseTransformerServlet extends HttpServlet
{
public void init( ServletConfig config ) throws ServletException
{
try
{
myTestTransformer = TransformerFactory.newInstance()
.newTransformer( new StreamSource(
config.getServletContext().getRealPath( "test.xslt" ) )
);
}
catch ( TransformerConfigurationException e )
{
throw new ServletException( "Transformer exception: "
+ e.getMessage(), e );
}
}

public void service( ServletRequest request, ServletResponse
response )
throws ServletException, IOException
{
try
{
Document document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().newDocument();
Element element = document.createElement( "input" );
document.appendChild( element );
Text text = document.createTextNode( "one" );
element.appendChild( text );

myTestTransformer.transform(
new DOMSource( document ),
new StreamResult( response.getOutputStream() ) );
}
catch ( ParserConfigurationException e )
{
throw new ServletException( "Parser config exception: "
+ e.getMessage(), e );
}
catch ( FactoryConfigurationError e )
{
throw new ServletException( "Factory config exception: "
+ e.getMessage(), e );
}
catch ( TransformerException e )
{
throw new ServletException( "Transformer exception: "
+ e.getMessage(), e );
}
}

Transformer myTestTransformer;
}
---end TestReuseTransformerServlet.java---

---begin test.xslt---
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="foo">
<xsl:value-of select="/input"/>
</xsl:variable>
<xsl:variable name="otherPath" select="concat( 'test_', $foo,
'.xml')"/>
<xsl:variable name="otherPage" select="document($otherPath)"/>

<xsl:template match="/">
<foo>
<xsl:value-of select="$otherPage/foo/foo[@id='id']/foo[@id='id']"/>
</foo>
</xsl:template>

</xsl:stylesheet>
---end test.xslt---

---begin test_one.xml---
<foo>
<foo id="id">
<foo id="id">one</foo>
</foo>
</foo>
---end test_one.xml---


The exception I get is the following: (nothing snipped because I
wasn't sure what would be significant)

java.lang.NullPointerException
at org.apache.xpath.axes.AxesWalker.setRoot(Unknown Source)
at org.apache.xpath.axes.WalkingIteratorSorted.setRoo t(Unknown
Source)
at org.apache.xpath.axes.LocPathIterator.execute(Unkn own Source)
at org.apache.xpath.Expression.executeCharsToContentH andler(Unknown
Source)
at org.apache.xalan.templates.ElemValueOf.execute(Unk nown Source)
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(Unknown
Source)
at org.apache.xalan.templates.ElemLiteralResult.execu te(Unknown
Source)
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(Unknown
Source)
at org.apache.xalan.transformer.TransformerImpl.apply TemplateToNode(Unknown
Source)
at org.apache.xalan.transformer.TransformerImpl.trans formNode(Unknown
Source)
at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
Source)
at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
Source)
at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
Source)
at TestReuseTransformerServlet.service(TestReuseTrans formerServlet.java:51)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invokeNext(StandardPipeline.j ava:643)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invokeNext(StandardPipeline.j ava:643)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(St andardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invokeNext(StandardPipeline.j ava:643)
at org.apache.catalina.valves.ErrorDispatcherValve.in voke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invokeNext(StandardPipeline.j ava:641)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invokeNext(StandardPipeline.j ava:641)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invokeNext(StandardPipeline.j ava:643)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(Co yoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConnection(Http11Protocol.jav a:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(P oolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Unknown Source)
 
Reply With Quote
 
 
 
 
Peter McDonnell
Guest
Posts: n/a
 
      09-09-2003
not sure if this is the problem, but afaik the Transformer is not thread
safe, so two simulataneous requests (even slightly overlapping) could cause
problems.

You could try making the servlet implement javax.servlet.SingleThreadModel
to ensure requests are serialized inside your servlet and see if it works
then.

As a more general solution, I would suggest storing a compiled (thread-safe)
Templates object in the servlet, and generating a new Transformer for each
request.

e.g.

// shared Templates object

private Templates myTestTemplates;

// in init()

this.myTestTemplates=TransformerFactory.newInstanc e()
.newTemplates( new
StreamSource(config.getServletContext().getRealPat h( "test.xslt" ) )

// in service()

Transformer reqTansformer=this.myTestTemplates.newTransformer( );

Hope this helps,
Peter

"Alan Krueger" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) 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.
>
> Any help in figuring out what we're doing wrong, or what could be
> causing this exception, would be greatly appreciated.
>
> Thanks,
> Alan Krueger
>
>
> ---begin TestReuseTransformerServlet.java---
> import java.io.IOException;
>
> import javax.servlet.ServletConfig;
> import javax.servlet.ServletException;
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
> import javax.servlet.http.HttpServlet;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.parsers.FactoryConfigurationError;
> import javax.xml.parsers.ParserConfigurationException;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerConfigurationExcept ion;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.dom.DOMSource;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
>
> import org.w3c.dom.Document;
> import org.w3c.dom.Element;
> import org.w3c.dom.Text;
>
> public class TestReuseTransformerServlet extends HttpServlet
> {
> public void init( ServletConfig config ) throws ServletException
> {
> try
> {
> myTestTransformer = TransformerFactory.newInstance()
> .newTransformer( new StreamSource(
> config.getServletContext().getRealPath( "test.xslt" ) )
> );
> }
> catch ( TransformerConfigurationException e )
> {
> throw new ServletException( "Transformer exception: "
> + e.getMessage(), e );
> }
> }
>
> public void service( ServletRequest request, ServletResponse
> response )
> throws ServletException, IOException
> {
> try
> {
> Document document = DocumentBuilderFactory.newInstance()
> .newDocumentBuilder().newDocument();
> Element element = document.createElement( "input" );
> document.appendChild( element );
> Text text = document.createTextNode( "one" );
> element.appendChild( text );
>
> myTestTransformer.transform(
> new DOMSource( document ),
> new StreamResult( response.getOutputStream() ) );
> }
> catch ( ParserConfigurationException e )
> {
> throw new ServletException( "Parser config exception: "
> + e.getMessage(), e );
> }
> catch ( FactoryConfigurationError e )
> {
> throw new ServletException( "Factory config exception: "
> + e.getMessage(), e );
> }
> catch ( TransformerException e )
> {
> throw new ServletException( "Transformer exception: "
> + e.getMessage(), e );
> }
> }
>
> Transformer myTestTransformer;
> }
> ---end TestReuseTransformerServlet.java---
>
> ---begin test.xslt---
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <xsl:stylesheet version="1.0"
> xmlnssl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:variable name="foo">
> <xsl:value-of select="/input"/>
> </xsl:variable>
> <xsl:variable name="otherPath" select="concat( 'test_', $foo,
> '.xml')"/>
> <xsl:variable name="otherPage" select="document($otherPath)"/>
>
> <xsl:template match="/">
> <foo>
> <xsl:value-of select="$otherPage/foo/foo[@id='id']/foo[@id='id']"/>
> </foo>
> </xsl:template>
>
> </xsl:stylesheet>
> ---end test.xslt---
>
> ---begin test_one.xml---
> <foo>
> <foo id="id">
> <foo id="id">one</foo>
> </foo>
> </foo>
> ---end test_one.xml---
>
>
> The exception I get is the following: (nothing snipped because I
> wasn't sure what would be significant)
>
> java.lang.NullPointerException
> at org.apache.xpath.axes.AxesWalker.setRoot(Unknown Source)
> at org.apache.xpath.axes.WalkingIteratorSorted.setRoo t(Unknown
> Source)
> at org.apache.xpath.axes.LocPathIterator.execute(Unkn own Source)
> at org.apache.xpath.Expression.executeCharsToContentH andler(Unknown
> Source)
> at org.apache.xalan.templates.ElemValueOf.execute(Unk nown Source)
> at

org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(Unknown
> Source)
> at org.apache.xalan.templates.ElemLiteralResult.execu te(Unknown
> Source)
> at

org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(Unknown
> Source)
> at

org.apache.xalan.transformer.TransformerImpl.apply TemplateToNode(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans formNode(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
> Source)
> at

TestReuseTransformerServlet.service(TestReuseTrans formerServlet.java:51)
> at

org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(Application
FilterChain.java:247)
> at

org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterCh
ain.java:193)
> at

org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.ja
va:256)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.ja
va:191)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.catalina.core.StandardContext.invoke(St andardContext.java:2416)
> at

org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:180
)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.valves.ErrorDispatcherValve.in voke(ErrorDispatcherValve.
java:171)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:641)
> at

org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:172
)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:641)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java
:174)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.coyote.tomcat4.CoyoteAdapter.service(Co yoteAdapter.java:223)
> at

org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:601)
> at

org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConne
ction(Http11Protocol.java:392)
> at

org.apache.tomcat.util.net.TcpWorkerThread.runIt(P oolTcpEndpoint.java:565)
> at

org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.jav
a:619)
> at java.lang.Thread.run(Unknown Source)



 
Reply With Quote
 
 
 
 
William Brogden
Guest
Posts: n/a
 
      09-09-2003

"Alan Krueger" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) 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.

>
> Any help in figuring out what we're doing wrong, or what could be
> causing this exception, would be greatly appreciated.
>
> Thanks,
> Alan Krueger
>
>
> ---begin TestReuseTransformerServlet.java---
> import java.io.IOException;
>
> import javax.servlet.ServletConfig;
> import javax.servlet.ServletException;
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
> import javax.servlet.http.HttpServlet;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.parsers.FactoryConfigurationError;
> import javax.xml.parsers.ParserConfigurationException;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerConfigurationExcept ion;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.dom.DOMSource;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
>
> import org.w3c.dom.Document;
> import org.w3c.dom.Element;
> import org.w3c.dom.Text;
>
> public class TestReuseTransformerServlet extends HttpServlet
> {
> public void init( ServletConfig config ) throws ServletException
> {
> try
> {
> myTestTransformer = TransformerFactory.newInstance()
> .newTransformer( new StreamSource(
> config.getServletContext().getRealPath( "test.xslt" ) )
> );
> }
> catch ( TransformerConfigurationException e )
> {
> throw new ServletException( "Transformer exception: "
> + e.getMessage(), e );
> }
> }
>
> public void service( ServletRequest request, ServletResponse
> response )
> throws ServletException, IOException
> {
> try
> {
> Document document = DocumentBuilderFactory.newInstance()
> .newDocumentBuilder().newDocument();
> Element element = document.createElement( "input" );
> document.appendChild( element );
> Text text = document.createTextNode( "one" );
> element.appendChild( text );
>
> myTestTransformer.transform(
> new DOMSource( document ),
> new StreamResult( response.getOutputStream() ) );
> }
> catch ( ParserConfigurationException e )
> {
> throw new ServletException( "Parser config exception: "
> + e.getMessage(), e );
> }
> catch ( FactoryConfigurationError e )
> {
> throw new ServletException( "Factory config exception: "
> + e.getMessage(), e );
> }
> catch ( TransformerException e )
> {
> throw new ServletException( "Transformer exception: "
> + e.getMessage(), e );
> }
> }
>
> Transformer myTestTransformer;
> }
> ---end TestReuseTransformerServlet.java---
>
> ---begin test.xslt---
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <xsl:stylesheet version="1.0"
> xmlnssl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:variable name="foo">
> <xsl:value-of select="/input"/>
> </xsl:variable>
> <xsl:variable name="otherPath" select="concat( 'test_', $foo,
> '.xml')"/>
> <xsl:variable name="otherPage" select="document($otherPath)"/>
>
> <xsl:template match="/">
> <foo>
> <xsl:value-of select="$otherPage/foo/foo[@id='id']/foo[@id='id']"/>
> </foo>
> </xsl:template>
>
> </xsl:stylesheet>
> ---end test.xslt---
>
> ---begin test_one.xml---
> <foo>
> <foo id="id">
> <foo id="id">one</foo>
> </foo>
> </foo>
> ---end test_one.xml---
>
>
> The exception I get is the following: (nothing snipped because I
> wasn't sure what would be significant)
>
> java.lang.NullPointerException
> at org.apache.xpath.axes.AxesWalker.setRoot(Unknown Source)
> at org.apache.xpath.axes.WalkingIteratorSorted.setRoo t(Unknown
> Source)
> at org.apache.xpath.axes.LocPathIterator.execute(Unkn own Source)
> at org.apache.xpath.Expression.executeCharsToContentH andler(Unknown
> Source)
> at org.apache.xalan.templates.ElemValueOf.execute(Unk nown Source)
> at

org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(Unknown
> Source)
> at org.apache.xalan.templates.ElemLiteralResult.execu te(Unknown
> Source)
> at

org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(Unknown
> Source)
> at

org.apache.xalan.transformer.TransformerImpl.apply TemplateToNode(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans formNode(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
> Source)
> at org.apache.xalan.transformer.TransformerImpl.trans form(Unknown
> Source)
> at

TestReuseTransformerServlet.service(TestReuseTrans formerServlet.java:51)
> at

org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(Application
FilterChain.java:247)
> at

org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterCh
ain.java:193)
> at

org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.ja
va:256)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.ja
va:191)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.catalina.core.StandardContext.invoke(St andardContext.java:2416)
> at

org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:180
)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.valves.ErrorDispatcherValve.in voke(ErrorDispatcherValve.
java:171)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:641)
> at

org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:172
)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:641)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java
:174)
> at

org.apache.catalina.core.StandardPipeline$Standard PipelineValveContext.invok
eNext(StandardPipeline.java:643)
> at

org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:480)
> at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:995)
> at

org.apache.coyote.tomcat4.CoyoteAdapter.service(Co yoteAdapter.java:223)
> at

org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:601)
> at

org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConne
ction(Http11Protocol.java:392)
> at

org.apache.tomcat.util.net.TcpWorkerThread.runIt(P oolTcpEndpoint.java:565)
> at

org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.jav
a:619)
> at java.lang.Thread.run(Unknown Source)



 
Reply With Quote
 
Alan Krueger
Guest
Posts: n/a
 
      09-12-2003
"William Brogden" <(E-Mail Removed)> wrote in message news:<3f5dd00e$(E-Mail Removed)>...
> "Alan Krueger" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed) 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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
OT:Transformers CBIC MCSE 32 07-11-2007 11:21 PM
random use of different notebook transformers JWBH Computer Support 23 03-18-2007 04:17 PM
Web Part connections & using transformers... AC [MVP MCMS] ASP .Net 0 07-28-2006 09:38 PM
DVD Verdict reviews: TRANSFORMERS: BEAST WARS: THE COMPLETE SECOND SEASON and more! DVD Verdict DVD Video 0 07-15-2004 09:06 AM
problems reusing certain Transformers in Tomcat - NullPointerException Alan Krueger XML 3 09-12-2003 07:33 PM



Advertisments