Hallo,
ich hatt folgendes Problem in der Klasse unten, also eine Klasse welche Singleton ist, es müsste also nur ein Objekt dieser Klasse geben, Meine Applikation läuft in einem JBoss- context.
Wenn ich jetzt das Programm ausgeführt habe, dann würde mit der Methode setCurrentUser ein user gesetzt. Im weiteren Programmablauf würde die Methode getCurrentUser aufgerufen und diese Methode gab dann "null" zurück -> und das kann ich mir jetzt nicht erklären, es gibt ja nur ein Objekt von der Klasse MyClass und daher auch nur einen ThreadLocal "user".
Warum dann null zurückgegeben wird obwohl vorher schon ein User mit setCurrentUser gesetzt wurde ist mir absolut nicht klar.
Mein workaround war jetzt, dass ich den ThreadLocal "static" mache, dann gehts natürlich und es deutet für mich auch darauf hin, dass es mehrere Instanzen der Klasse MyClass gibt, wie das aber sein kann bei einer Singleton- Klasse ist mir nicht klar.
Hat vielleicth jemand eine Idee, warum das sein kann,
Vielen Dank,
lg
ich hatt folgendes Problem in der Klasse unten, also eine Klasse welche Singleton ist, es müsste also nur ein Objekt dieser Klasse geben, Meine Applikation läuft in einem JBoss- context.
Wenn ich jetzt das Programm ausgeführt habe, dann würde mit der Methode setCurrentUser ein user gesetzt. Im weiteren Programmablauf würde die Methode getCurrentUser aufgerufen und diese Methode gab dann "null" zurück -> und das kann ich mir jetzt nicht erklären, es gibt ja nur ein Objekt von der Klasse MyClass und daher auch nur einen ThreadLocal "user".
Warum dann null zurückgegeben wird obwohl vorher schon ein User mit setCurrentUser gesetzt wurde ist mir absolut nicht klar.
Mein workaround war jetzt, dass ich den ThreadLocal "static" mache, dann gehts natürlich und es deutet für mich auch darauf hin, dass es mehrere Instanzen der Klasse MyClass gibt, wie das aber sein kann bei einer Singleton- Klasse ist mir nicht klar.
Hat vielleicth jemand eine Idee, warum das sein kann,
Vielen Dank,
lg
Java:
pulic class MyClass extends BaseClass implements MyInterface {
public final static MyClass INSTANCE = new MyClass();
protected ThreadLocal<IUser> user = new ThreadLocal<IUser>()
private MyClass() {}
public void setCurrentUser(IUser user) {
if(user != null )
this.user.set(user)
}
public IUser getCurrentUser() {
return this.user.get();
}
}