# Prozess wird nicht beendet



## perco (25. Mai 2009)

Hallo,

ich habe einen Konverter geschrieben, der ein RDF Framework verwendet (openRDF.org: Home). 

Ich verwende meinen Konverter samt Framework in einer Servlet Anwendung.
Allerdings habe ich schwerwiegendes Problem, für das ich einfach keine Lösung finde.

Die Ausführung der gesamten Applikation funktioniert einwandfrei. Wenn ich allerdings, nach einer Benutzung, die WebApp vom Tomcat entfernen möchte (undeploy) dann ist dies nicht komplett möglich, da eine bestimmte jar Datei (Teil des Frameworks) noch in der Benutzung durch Tomcat ist. Bei einem Undeploy werden alle Dateien der Webapp gelöscht, bis eben auf diese eine Jar.
Es ist nur möglich diese Jar zu entfernen, indem ich den kompletten Tomcat runterfahre, die webapp komplett lösche und anschließend wieder neustarte.

Innerhalb meines Konverter achte ich darauf sämtliche geöffnete Stream oder sonstiges was geschlossen werden muss, nach der Benutzung zu closen.

Hat von euch jemand einen Rat, wie ich der Sache auf den Grund gehen könnte und wie ich es zum einen schaffe die ständige Benutzung dieser einen jar durch Tomcat zu unterbinden und zum anderen wie ich die Webapp sauber entfernen kann, ohne jedes Mal den Tomcat neuzustarten?

Habe mir auch mal die Log-Files vom Tomcat angesehen, aber hier konnte ich keine Auffälligkeiten feststellen.

Vielen Dank für eure Hilfe!


----------



## maki (25. Mai 2009)

Startest du selbst einen Thread der immer im Hintergrund läuft?
Wenn ja, solltest du ihn als Dämon markieren: Thread (Java 2 Platform SE v1.4.2))


----------



## perco (25. Mai 2009)

Hallo,

ich verstehe deine Frage nicht genau.

Ich habe ein Servlet das eine Instanz von meinem Konverter erzeugt. Dieser Konverter benutzt viele Jars aus dem o. g. Framework. Wenn ich die ganze WebApp undeployen möchte, wird auch alles entfernt, eben nur bis auf diese eine Jar. Somit lässt sich auch nicht die gesamte WebApp entfernen.

Zur Entfernung ist immer ein Runterfahren notwendig.

Also ich selbst starte keinen Thread, der die ganze Zeit im Hintergrund laufen soll.

Grüße


----------



## perco (25. Mai 2009)

Ich glaube das Problem nun gelöst zu haben.

Habe im Servlet vor Instanziierung des Konverters im ServletContext folgende Attribute geändert:

```
getServletContext().setAttribute("antiJARLocking", true);
getServletContext().setAttribute("antiResourceLocking", true);
```

Es funktioniert und somit sollten auch keine Jars mehr gelockt werden.

Weiß allerdings nicht, ob das die beste Methode ist.


----------



## perco (26. Mai 2009)

Hi,

noch ein kleiner Input von mir. Komischerweise hat nach einer gewissen Zeit meine Lösung wieder nicht mehr funktioniert.

Zusätzlich habe ich herausgefunden, dass das Problem der "locked" JARS nur bei Tomcat-Server auftritt, deren BS Windows ist. Linux ist davon nicht betroffen.

Letztendlich habe ich dann doch noch für Windows eine Lösung gefunden. Sie ist vom Prinzip her dieselbe wie die, die ich hier schon gepostet habe. 

Allerdings habe ich in der WebApp im Ordner META-INF eine context.xml abgelegt. Im Tag <context> habe ich zusätzlich die Attribute "antiJARLocking" und "antiResourceLocking" beide auf true gesetzt.
Somit tritt das Problem nicht mehr auf!

Grüße, perco.


----------

