Причина «tmpFile.renameTo(classFile) failed» во время компиляции JSP

Недавно я начал испытывать странное поведение в JSP-приложении JBOss 4.0.5. Компиляция JSP завершается ошибкой с первой (второй, третьей,...) попытки, за исключением:

17:24:29,909 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.io.IOException: tmpFile.renameTo(classFile) failed
        at org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:245)
        at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:164)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:429)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:297)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:305)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)

После нескольких попыток (от 0 до ~ 7) страница в конечном итоге компилируется и отображается нормально.

Платформа — Windows 7-Pro 64 бит, версия Java —

c:\ATG\ATG2007.1>java -version
java version "1.5.0_21"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_21-b01)
Java HotSpot(TM) Client VM (build 1.5.0_21-b01, mixed mode)

Версия JBoss:

16:49:51,384 INFO  [Server] Release ID: JBoss [Zion] 4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)

Версия Tomcat 5.5 (включенная в JBoss).

Спасибо.


person Miro A.    schedule 10.09.2010    source источник


Ответы (3)


Это связано с ошибкой 38713 в Tomcat 5.5. Кажется, это исправлено в Tomcat 5.5.25 и выше.

person BalusC    schedule 11.09.2010
comment
Кажется, это довольно старый баг. Теория состояния гонки может быть верной, поскольку в команде есть другие люди, использующие Windows 7 (хотя и не 64-разрядную версию Pro) с тем же JBoss/Tomcat, у которых нет проблем. - person Miro A.; 12.09.2010
comment
Я попытался обновить Tomcat внутри JBoss 4.0.5 до 5.5.30 — инструкции здесь: itapproaches.blogspot.com/2010/08/ — к сожалению, я все еще вижу ошибку, хотя и намного меньше. - person Miro A.; 12.09.2010
comment
Это все еще происходит, когда Tomcat 6 развернут внутри STS 3.3. - person anon58192932; 09.09.2013
comment
Просто хочу сказать, что я использую Windows 8.1 и Tomcat 7 и получаю эту ошибку - person IcedDante; 11.03.2014
comment
Я использую tomcat-7.0.42 и периодически получаю эту ошибку. После того, как я прочитал комментарий stackoverflow.com/a/14361529/1565521, я понял, что какая-то папка внутри каталога tomcat была только чтение. Я щелкнул правой кнопкой мыши каталог tomcat-7.0.42 и снял флажок только для чтения. Вещи выглядят после этого. Так что это определенно связано не только с Tomcat 5.5 и затрагивает и более поздние версии. - person atsurti; 03.04.2014

Перенесемся на четыре года вперед, в 2014. Tomcat 8, Java 8, Windows 8, та же ошибка. После полдня разочарований выяснилось, что это вызвано моим антивирусным программным обеспечением, которым в моем случае был McAfee. Я пошел на крайние меры и удалил все это. Но, вероятно, я мог бы сделать некоторые настройки, чтобы исключить каталоги Tomcat из сканирования в реальном времени.

person John Fitzpatrick    schedule 08.08.2014
comment
Год 2015, то же самое, большое спасибо, я бы никогда не смог поймать его сам. Я думаю, причина в том, что я случайно включил что-то в одном из бесчисленных окон, которые McAfee показывает вам в тот или иной момент во время использования ПК, но я продолжаю полностью удалять его, как и вы, потому что, знаете ли, к черту производителей ПК и их включение некоторого бесполезного антивирусного программного обеспечения, срок действия которого уже истек, когда вы запускаете машину в первый раз. - person Giulio Piancastelli; 04.06.2015

Папка, которая вызывает IOException, на самом деле доступна только для чтения, после изменения ее на запись все работает нормально.

person Feng Zhang    schedule 16.01.2013
comment
Как вы можете сказать из исходного вопроса, какая это папка? - person Tom van Enckevort; 16.01.2013
comment
Это было именно то, что было неправильно. Я сделал корень своего приложения доступным для записи со всеми подпапками, и эта проблема исчезла. Спасибо. - person max; 26.01.2014