Bug 29570 - JSP don't compile because of: Error creating temporary file
Summary: JSP don't compile because of: Error creating temporary file
Status: RESOLVED FIXED
Alias: None
Product: Tomcat 4
Classification: Unclassified
Component: Jasper (show other bugs)
Version: 4.1.29
Hardware: PC Linux
: P3 blocker (vote)
Target Milestone: ---
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-06-15 10:53 UTC by Marc Guillemot
Modified: 2004-11-16 19:05 UTC (History)
2 users (show)



Attachments
Ant 1.6.1 patch (754 bytes, patch)
2004-09-15 08:21 UTC, Fernando Nasser
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Marc Guillemot 2004-06-15 10:53:08 UTC
We've got a strange problem: on one application of a virtual host, the jsp
couldn't get compiled because the compile task wanted to create a temporary file
in tomcat root dir, where it hadn't any write right. 
This was the case only for one virtual host and it worked previously. We are not
aware of changes that may have caused this behavior. As a workaround we have
changed the permissions to allow the task to write in tomcat's dir, but that's
not a clean solution.

The log excerpt:
2004-06-06 00:25:39 Exception:
Error creating temporary file
        at
org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:
429)
        at
org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute(JavacExternal.java:81)
        at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:842)
        at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:682)
        at org.apache.jasper.compiler.Compiler.generateClass(Unknown Source)
        at org.apache.jasper.compiler.Compiler.compile(Unknown Source)
        at org.apache.jasper.JspCompilationContext.compile(Unknown Source)
        at org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source)
        at org.apache.jasper.servlet.JspServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(Unknown Source)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(Unknown Source)
        at org.apache.catalina.core.ApplicationDispatcher.forward(Unknown Source)
        at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
        at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
        at
org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:254)
        at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:309)
        at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.hibernate.SessionClosingFilter.doFilter(SessionClosingFilter.java:65)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.web.JSPEngineExceptionReporter.doFilter(JSPEngineExceptionReporter.java:45)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.web.SessionsObserver$SessionCreationFilter.doFilter(SessionsObserver.java:77)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at de.internetzky.jnetz.web.Log4jNDCFilter.doFilter(Log4jNDCFilter.java:68)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardContext.invoke(Unknown Source)
        at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
        at java.lang.Thread.run(Thread.java:536)
Caused by: java.io.FileNotFoundException: /var/tomcat4/files2048078612
(Permission denied)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:176)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
        at java.io.FileWriter.<init>(FileWriter.java:70)
        at
org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:
420)
        ... 63 more
--- Nested Exception ---
java.io.FileNotFoundException: /var/tomcat4/files2048078612 (Permission denied)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:176)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
        at java.io.FileWriter.<init>(FileWriter.java:70)
        at
org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:
420)
        at
org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute(JavacExternal.java:81)
        at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:842)
        at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:682)
        at org.apache.jasper.compiler.Compiler.generateClass(Unknown Source)
        at org.apache.jasper.compiler.Compiler.compile(Unknown Source)
        at org.apache.jasper.JspCompilationContext.compile(Unknown Source)
        at org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source)
        at org.apache.jasper.servlet.JspServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(Unknown Source)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(Unknown Source)
        at org.apache.catalina.core.ApplicationDispatcher.forward(Unknown Source)
        at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
        at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
        at
org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:254)
        at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:309)
        at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.hibernate.SessionClosingFilter.doFilter(SessionClosingFilter.java:65)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.web.JSPEngineExceptionReporter.doFilter(JSPEngineExceptionReporter.java:45)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.web.SessionsObserver$SessionCreationFilter.doFilter(SessionsObserver.java:77)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at de.internetzky.jnetz.web.Log4jNDCFilter.doFilter(Log4jNDCFilter.java:68)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardContext.invoke(Unknown Source)
        at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
        at java.lang.Thread.run(Thread.java:536)

2004-06-06 00:25:39 ApplicationDispatcher[] Servlet.service() for servlet jsp
threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: -1 in the jsp file: null

Generated servlet error:
    [javac] Compiling 1 source file



        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(Unknown Source)
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(Unknown Source)
        at org.apache.jasper.compiler.Compiler.generateClass(Unknown Source)
        at org.apache.jasper.compiler.Compiler.compile(Unknown Source)
        at org.apache.jasper.JspCompilationContext.compile(Unknown Source)
        at org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source)
        at org.apache.jasper.servlet.JspServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(Unknown Source)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(Unknown Source)
        at org.apache.catalina.core.ApplicationDispatcher.forward(Unknown Source)
        at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
        at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
        at
org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:254)
        at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:309)
        at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.hibernate.SessionClosingFilter.doFilter(SessionClosingFilter.java:65)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.web.JSPEngineExceptionReporter.doFilter(JSPEngineExceptionReporter.java:45)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at
de.internetzky.util.web.SessionsObserver$SessionCreationFilter.doFilter(SessionsObserver.java:77)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at de.internetzky.jnetz.web.Log4jNDCFilter.doFilter(Log4jNDCFilter.java:68)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
        at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardContext.invoke(Unknown Source)
        at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown
Source)
        at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
        at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
        at java.lang.Thread.run(Thread.java:536)
Comment 1 Mark Thomas 2004-09-12 20:51:36 UTC
When the command line for the javac task is more the 4096 characters long, the 
ant task creates a temporary file to hold the full command. This is to 
overcome command length limitations on a number of OSes.

Jasper was not setting the temp dir so Ant tries to use the user dir which in 
your case must be the tomcat root dir.

Jasper has now been patched to fix this.
Comment 2 Fernando Nasser 2004-09-15 08:21:05 UTC
We have run into this problem with Red Hat App Server (which includes Tomcat 5).

It is a bug (IMO) in the Ant javac task  -- it uses the user home directory
instead of the system temp directory for a temporary file created when the
command line gets larger than 4K, which happens with long classpaths.

I have filed a bug for Ant and a patch has been checked into Ant's CVS
repository.  It was not supposed to be included in 1.6.2 yet so more people had
a chance to comment on it.  I have backpatched the change in the Ant 1.6.1 that
we've released.

I believe the fix in the Ant task is the better solution, although the change is
Jasper makes it immune to this problem.

In any case, I am attaching the Ant patch we are using (last thing I've heard
this was in Ant's current sources).

Reards to all,
Fernando
Comment 3 Fernando Nasser 2004-09-15 08:21:49 UTC
Created attachment 12738 [details]
Ant 1.6.1 patch