2011-01-06 9 views
0

Wir haben eine Klasse, Foo, die ein Singleton ist und von Thread erbt. Es gab einige Probleme nach der erneuten Bereitstellung, bei denen 2 dieser Threads möglicherweise ausgeführt wurden. Ich habe einige Druckanweisungen hinzugefügt, um den ClassLoader jedes Mal zu laden, wenn Foo aus dem Schlaf aufwachte. Die Ausdrucke zeigen an, dass tatsächlich eine andere Instanz der Klasse mit einem anderen ClassLoader erstellt wurde.Weblogic 10.3.1 reploy reelling Klassen

Ich weiß nicht, ob es relevant ist, aber Foo wird immer über Foo :: instance zum ersten Mal über eine Session Bean erstellt. Foo ist als Service gedacht, um sich um die Desinfektion der DB zu kümmern.

Danke

Antwort

0

Offenbar gibt es 2 redeploy Methoden. Es scheint, dass beide weiterhin die alte Anwendung laufen lassen, bis sie Anfragen nicht mehr bedient. Die beiden Methoden unterscheiden sich nur darin, wie sie die Anwendung entfernen. Die von uns verwendete Methode führt dazu, dass die alte Anwendung vollständig ausgeführt wird und verschiedene Klassenladeprogramme verwendet werden, um die neue Anwendung zu laden. Unsere alte Anwendung wurde nicht freigestellt. Wenn Sie jedoch einen Thread ausführen, der nicht explizit beendet wurde (was sich als der Fall herausstellte), werden möglicherweise zwei Instanzen derselben Klasse über verschiedene Klassenladeprogramme geladen, die gleichzeitig ausgeführt werden. Das Ausführen von Threads, die Weblogic nicht im Griff hat, gilt als schlechte Übung und unsicher. Jetzt weiß ich warum.