You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2006/03/10 12:58:19 UTC

DO NOT REPLY [Bug 38713] - java.io.IOException: tmpFile.renameTo(classFile) failed when compiling new JSP (upon redeploy)

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=38713>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=38713





------- Additional Comments From matthias.ernst@coremedia.com  2006-03-10 11:58 -------
We have the same problem. I think I managed to find out the cause: it only
happens if the JSP itself throws FileNotFoundException. So in order to
reproduce: have only one JSP in your Webapp like so:

<%!
  java.util.Random r = new java.util.Random();
%><% if(r.nextInt(10) > 0) throw new java.io.FileNotFoundException(); %>

and put some concurrent load on that JSP.

Evaluation: Jasper has a rather big catch block in JspServletWrapper.java and
will interpret any FNFE as an indication that the JSP itself has disappeared. It
will remove the JspServletWrapper which triggers a recompilation.

I'm pretty sure there is a race condition in that recompilation code that causes
two concurrent compilations for the same file. These two compilations would
fight over the generated files and lead to the observed bug. See the thread dump
below (taken after SDEInstaller hit a breakpoint in the offending line): two
compilations with different OIDs for JSPServletWrapper although the webapp has
only one JSP.


"http-16001-Processor22" daemon prio=10 tid=0x00764340 nid=0x23 waiting on
condition [0xedb7e000..0xedb7f9f0]
        at java.io.IOException.<init>(IOException.java:40)
        at java.io.FileNotFoundException.<init>(FileNotFoundException.java:46)
        at
org.apache.jasper.compiler.SmapUtil$SDEInstaller.<init>(SmapUtil.java:248)
        at
org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:236)
        at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:163)
        at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:429)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
        at
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
        at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
        - locked <0xf1320090> (a org.apache.jasper.servlet.JspServletWrapper)


"http-16001-Processor25" daemon prio=10 tid=0x00767a50 nid=0x26 runnable
[0xed87d000..0xed87fc70]
        at java.net.URLStreamHandler.setURL(URLStreamHandler.java:505)
        at java.net.URLStreamHandler.parseURL(URLStreamHandler.java:283)
        at sun.net.www.protocol.file.Handler.parseURL(Handler.java:50)
        at java.net.URL.<init>(URL.java:596)
        at java.net.URL.<init>(URL.java:464)
        at java.net.URL.<init>(URL.java:413)
        at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
        at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
        at
sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:61)
        at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
        at java.net.URL.openConnection(URL.java:943)
        at java.net.URL.openStream(URL.java:1007)
        at
org.apache.catalina.loader.StandardClassLoader.getResourceAsStream(StandardClassLoader.java:679)
        at java.lang.Class.getResourceAsStream(Class.java:1998)
        at org.apache.tools.ant.ComponentHelper.initTypes(ComponentHelper.java:741)
        at
org.apache.tools.ant.ComponentHelper.initDefaultDefinitions(ComponentHelper.java:247)
        at org.apache.tools.ant.Project.init(Project.java:262)
        at org.apache.jasper.compiler.Compiler.getProject(Compiler.java:116)
        at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:320)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
        at
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
        at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
        - locked <0xf0c4d448> (a org.apache.jasper.servlet.JspServletWrapper)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org