Hallo,
bei meinem Servlet wird angehaengte Exception geworfen.
EDIT:
den Anhang kann nicht oeffnen, obwohl er eine Textdatei ist.
Die ersten Zeilen sind
1 | 30.11.2010 11:28:57 org.apache.catalina.loader.WebappClassLoader loadClass
|
2 | INFO: Illegal access: this web application instance has been stopped already. Could not load inet.htmlbas. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
|
3 | java.lang.IllegalStateException
|
4 | at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273)
|
5 | at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
|
6 | at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
|
7 | at inet.httpthr.readhtml(httpthr.java:178)
|
8 | at inet.httpthr.transfer_http(httpthr.java:306)
|
9 | at inet.httpthr.get_http(httpthr.java:237)
|
10 | at inet.fileUpload3.doPost(fileUpload3.java:133)
|
Angeblich koennen Klassen nicht geladen werden, die aber definitiv im
richtigen Verzeichnis vorhanden sind. Auch die File-Permissions stimmen.
Auf meinem lokalen Tomcat passiert das nicht, nur auf dem
mivitec-Webserver
(Der lokale Tomcat benutzt exakt die gleichen Dateien, auch web.xml)
Nach langem Suchen konnte ich die das Problem durch einen Hack beheben:
Bei Beginn der doPost-Funktion allokier ich schon einmal ein
htmlbas-Objekt und andere Klassen.
Wenn das schon am Anfang geladen wurde, dann kann er das auch an der
kritischen Stelle laden.
Ich habe das Tomcat-Mini von
http://webhosting.mivitec.de/tomcat-provider/Jspservlets.html
Bei diesem Paket ist TOMCAT - RAM (Arbeitsspeicher für Ihre
Tomcat-Instanz) auf 64 MB beschraenkt.
Da dachte ich an Speicherplatzproblem.
An den kritischen Stellen gab ich Memory-Info aus:
1 | Runtime runtime=Runtime.getRuntime();
|
2 | long memtot = runtime.totalMemory();
|
3 | long memfree= runtime.freeMemory();
|
4 | out.println("memtot="+(memtot/1024)+
|
5 | "kiB ,memfree="+(memfree/1024)+"kiB<br/>\n");
|
6 |
|
7 | memtot=64704kiB ,memfree=27627kiB
|
8 | memtot=64704kiB ,memfree=27574kiB
|
9 | memtot=64768kiB ,memfree=25407kiB
|
Daran sollte es nicht liegen. Meine paar Arrays sind nur maximal 0x4000
lang.
Im Vergleich hat das gleiche Programm als Desktop-PC-Programm folgende
ausgaben:
1 | memtot=15552kiB, memfree=15276kiB
|
und da enstand nie eine classLoad Exception.
Weiss jemand, woher das obige Problem kommt? Der Workaround mit dem
vorherigen Laden von spaeter benoetigten Klassen gefaellt mir nicht.
Gruss, Juergen