You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Fischer Tibor <fi...@freemail.hu> on 2002/04/21 18:10:18 UTC

running FOP multiple times, at one tomcat server(and one JVM) (IMPORTANT)

Hello,

I run FOP from a JSP page, at Tomcat webserver.
It works fine, til there is only one user at a time. But if 2 users want 
to use the fop converter at the same time, it fails, and says:

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server 
Error) that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: duplicate class definition: 
org/apache/xalan/processor/TransformerFactoryImpl
    at 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:457) 

    at 
org.apache.jsp.dmConvertXML2PDF$jsp._jspService(dmConvertXML2PDF$jsp.java:174) 

    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202) 

    at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) 

    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) 

    at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
    at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

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

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

    at 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1011) 

    at 
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106) 

    at java.lang.Thread.run(Thread.java:484)


root cause

java.lang.LinkageError: duplicate class definition: 
org/apache/xalan/processor/TransformerFactoryImpl
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:486)
    at 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:111)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at 
org.apache.catalina.loader.StandardClassLoader.findClass(StandardClassLoader.java:671) 

    at 
org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:1090) 

    at 
org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:989) 

    at 
org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:1073) 

    at 
org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:989) 

    at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1293) 

    at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1156) 

    at javax.xml.transform.FactoryFinder.newInstance(Unknown Source)
    at javax.xml.transform.FactoryFinder.find(Unknown Source)
    at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
    at 
com.tracetracker.xslt.TTXSLTProcessor.execWFop(TTXSLTProcessor.java:124)
    at 
com.tracetracker.jsp.TTDMJSPHandler.convertXML2PDF(TTDMJSPHandler.java:2996) 

    at 
org.apache.jsp.dmConvertXML2PDF$jsp._jspService(dmConvertXML2PDF$jsp.java:120) 

    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202) 

    at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) 

    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) 

    at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
    at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

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

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

    at 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163) 

    at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at 
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1011) 

    at 
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106) 

    at java.lang.Thread.run(Thread.java:484)


So,
i think, that if i could start FOP in a new JVM, it would be fine.
But i donw know how to do it.
now i exec fop like this:
    try {
      javax.xml.transform.stream.StreamSource xmlSource =
        new javax.xml.transform.stream.StreamSource(new 
java.io.File(xmlFile));
      javax.xml.transform.stream.StreamSource xslSource =
        new javax.xml.transform.stream.StreamSource(new 
java.io.File(xslFile));
      javax.xml.transform.Transformer transformer =
        
javax.xml.transform.TransformerFactory.newInstance().newTransformer(xslSource);

      // transformer.setURIResolver(new TTURIResolver());
      org.apache.fop.apps.Driver driver = new org.apache.fop.apps.Driver();
      java.io.FileOutputStream outputStream = new 
java.io.FileOutputStream(outputFile);

      driver.setOutputStream(outputStream);
      driver.setRenderer(org.apache.fop.apps.Driver.RENDER_PDF);
      transformer.transform(xmlSource, new 
javax.xml.transform.sax.SAXResult(driver.getContentHandler()));
      outputStream.close();


    } catch (Exception e) {
      e.printStackTrace();
    }


Thanks, for help,

BR,
Fishy




Re: running FOP multiple times, at one tomcat server(and one JVM) (IMPORTANT)

Posted by Fischer Tibor <fi...@freemail.hu>.
thanks, but i solved the problem.
i had to put these row, into my FOP executer method:
      org.apache.fop.messaging.MessageHandler.setID(true);


BR,
Fishy

J.Pietschmann wrote:

> Fischer Tibor wrote:
>
>> I run FOP from a JSP page, at Tomcat webserver.
>> It works fine, til there is only one user at a time. But if 2 users 
>> want to use the fop converter at the same time, it fails, and says:
>
> ...
>
>> javax.servlet.ServletException: duplicate class definition: 
>> org/apache/xalan/processor/TransformerFactoryImpl
>
>
> This is a problem with the Tomcat classloader loading a
> Xalan class. It has absolutely nothing to do with FOP.
>
> Ask the Tomcat people for help. If you are using Tomcat
> 4.0.3, they'll probably tell you to try 4.0.4b2. Another
> possibility is that you have JDK1.4 or for some other
> reason two different Xalan instances in the classpath(es).
>
>
> J.Pietschmann
>
>
>
>
>



Re: running FOP multiple times, at one tomcat server(and one JVM) (IMPORTANT)

Posted by "J.Pietschmann" <j3...@yahoo.de>.
Fischer Tibor wrote:
> I run FOP from a JSP page, at Tomcat webserver.
> It works fine, til there is only one user at a time. But if 2 users want 
> to use the fop converter at the same time, it fails, and says:
...
> javax.servlet.ServletException: duplicate class definition: 
> org/apache/xalan/processor/TransformerFactoryImpl

This is a problem with the Tomcat classloader loading a
Xalan class. It has absolutely nothing to do with FOP.

Ask the Tomcat people for help. If you are using Tomcat
4.0.3, they'll probably tell you to try 4.0.4b2. Another
possibility is that you have JDK1.4 or for some other
reason two different Xalan instances in the classpath(es).


J.Pietschmann