1

I have been working on developing a web app using spring-boot, but suddenly ran into a possible permissions issue when deploying with apache tomcat (9.0.36). None of the code has changed, but suddenly Jasper cannot compile my JSP class files. It looks like it is trying to delete class files in the tomcat deployment directory, but fails.

I am not sure what could be causing this, but it happens both when running it through MyEclipse Tomcat, and using the embedded Tomcat server with Maven's spring-boot:run command. Here is an example of the error:

Fri Sep 04 11:04:00 EDT 2020
There was an unexpected error (type=Internal Server Error, status=500).
Unable to delete class file

Stack Trace:

2020-09-08 16:37:26.192 ERROR 21236 --- [nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/].[jsp]        : Servlet.service() for servlet [jsp] in context with path [] threw exception [org.apache.jasper.JasperException: Unable to compile class for JSP] with root cause

java.io.IOException: Unable to delete class file [C:\Users\ek040e\Documents\Work\apache-tomcat-9.0.36\work\Catalina\localhost\ROOT\org\apache\jsp\index_jsp.class]
    at org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:180) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:142) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:543) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:392) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:362) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:346) ~[jasper.jar:9.0.36]
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605) ~[jasper.jar:9.0.36]
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400) ~[jasper.jar:9.0.36]
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) ~[jasper.jar:9.0.36]
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) ~[jasper.jar:9.0.36]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[servlet-api.jar:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.36]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.36]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:9.0.36]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [catalina.jar:9.0.36]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.36]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) [catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [catalina.jar:9.0.36]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:9.0.36]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) [tomcat-coyote.jar:9.0.36]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-coyote.jar:9.0.36]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-coyote.jar:9.0.36]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) [tomcat-coyote.jar:9.0.36]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.36]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_112]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_112]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.36]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_112]
zappee
  • 20,148
  • 14
  • 73
  • 129
Tover119
  • 11
  • 1
  • could be windows - do you have the .jsp file opened somewhere else? Also make sure this path is not used by some other process C:\Users\ek040e\Documents\Work\apache-tomcat-9.0.36\work\Catalina\localhost\ROOT\org\apache\jsp\ – ACV Sep 08 '20 at 22:00
  • Does this answer your question? [How can I delete a file that is in use by another process?](https://stackoverflow.com/questions/5232647/how-can-i-delete-a-file-that-is-in-use-by-another-process) – zappee Sep 09 '20 at 15:28
  • I checked using Windows Process Explorer, and there are no processes using the associated Tomcat work directories when running the application. – Tover119 Sep 09 '20 at 16:16

1 Answers1

0

Stuff like this happens on local boxes. It could be your antivirus or some other process on your computer or parallel threads in your IDE. I wouldn't worry about it until it starts happening on a prod box. Sometimes you just need to nuke the whole thing and start over, especially when using eclipse. I wouldnt worry too much about it so long as everything works properly via maven and the command line.

Deadron
  • 5,135
  • 1
  • 16
  • 27
  • True, it's not currently happening in Prod, but it does hinder development, and I can't do anything WebDriver selenium testing... It's strange, because I will get the error, but most of the time, refreshing the page gets rid of it and the page loads fine. – Tover119 Sep 09 '20 at 15:46