2009-06-25 2 views
0

Ich benutze einige Legacy-Java-Code, der aus mehreren statischen Klassen von in einer Grails App unter Tomcat besteht. Wenn ich nur einen Benutzer verwende, der die Webanwendung verwendet, funktioniert alles einwandfrei. Wenn zwei Benutzer die Anwendung verwenden, beginnen die Dinge schief zu laufen. Ich glaube, das liegt daran, dass die statischen Klassen Ressourcensperren wie Sockets beibehalten. Habe ich richtig angenommen, dass alle Sitzungen in der Anwendung standardmäßig die gleiche Kopie der statischen Klasse verwenden? Wenn ja, gibt es eine Möglichkeit, dieses Verhalten so zu ändern, dass für jede Benutzersitzung eine neue Kopie geladen wird?Sind statische Funktionen in JSP/Grails-Anwendungen unter tomcat isoliert?

+0

Können Sie ein Beispiel für die statischen Methoden veröffentlichen? Es gibt ziemlich viele statische Methoden in Grails, die völlig normal sind. –

Antwort

0

Nein, es ist nicht weg, statische Methoden zu http-Sitzungen in Tomcat oder einem anderen Anwendungsserver abzubilden. Allerdings sind statische Methoden nur dann ein Problem, wenn sie den Zustand statisch halten.

Wenn dies der Fall ist, müssen Sie diese Klassen entweder neu schreiben, so dass Sie Instanzen in der Sitzung halten können.

+0

Sie halten den Status für eine kurze Zeit, es sieht so aus, als würde das Synchronisieren von Anrufen mit ihnen das Problem beheben. – Jared

+0

Sie können möglicherweise die Klassendefinitionen ändern, sodass Methoden das synchronisierte Schlüsselwort in der Methodendefinition haben. public synchronized methodName() {} Auf diese Weise müssen Sie sich nicht darum sorgen, sie bei jedem Methodenaufruf in einen synchronisierten Block einzufügen. –