# Stateful SessionBean Instanzen entfernen?



## Deadalus (23. Feb 2010)

Hallo,

ich hab folgendes Problem. Ich habe eine JSF basierende Web Applikation erstellt. Die Geschäftslogik hab ich in einem EJB Container realisiert. Soweit ich weiß, sollten Stateful Session Beans beim Ausloggen des Benutzers entfernt werden. 

Also hab ich in meinem Session Bean eine Methode mit @remove gekennzeichnet. Ein JSF Backing Bean ruft diese Methode auf sobald die Session beendet wird. Allerdings bekomme ich eine Exception: 


```
javax.ejb.NoSuchObjectLocalException: The EJB does not exist. session-key: .............................
```


----------



## FArt (23. Feb 2010)

... da war wohl jemand schneller... das Bean wurde schon entfernt...


----------



## Deadalus (23. Feb 2010)

Ja das stimmt. Aus irgendeinem, mir unbekannten, Grund wird bei einem Logout 2 mal die @PreDestroy Methode meines JSF Backing Beans aufgerufen. 

Das passiert in meiner Anwendung bei jedem BackingBean. Ich verstehe leider absolut nicht warum diese Methode 2 mal direkt hintereinander aufgerufen wird. Ich logge einem Benutzer aus, indem ich ihn zu einer JSP weiterleite, in der die Session terminiert und danach eine Weiterleitung zur Loginseite stattfindet.


----------



## FArt (24. Feb 2010)

Mehr nachdenken, weniger posten: schalte mal sinnvolles Logging ein und/oder stell dich mit dem Debugger an diese Stelle und schaue nach, wer das aufruft... und überlege dann warum.
Annahme: du bist mit der J2EE-Spec und der EJB Spec einigermaßen vertraut...


----------



## Deadalus (8. Mrz 2010)

Naja mit der JEE Spec bin ich zumindest soweit vertraut um zu wissen, dass mir die EJB Spec bei diesem Problem nicht helfen wird. 


Die PreDestroy Lifecycle Methoden der JSF Managed Beans werden 2 mal hintereinander vom HTTPSSLWorkerThread aufgerufen.


----------



## FArt (8. Mrz 2010)

> Naja mit der JEE Spec bin ich zumindest soweit vertraut um zu wissen, dass mir die EJB Spec bei diesem Problem nicht helfen wird.


Wieso?



> Die PreDestroy Lifecycle Methoden der JSF  Managed Beans werden 2 mal hintereinander vom HTTPSSLWorkerThread aufgerufen.


Der HTTPSSLWorkerThread hört sich nicht an, als wäre das ein Thread des EJB Containers. In der EJB-Spec steht, dass diese Methode lediglich eine Callback-Methode für den Container ist. Diese Methode darf nie direkt aufgerufen werden!


----------



## Deadalus (8. Mrz 2010)

FArt hat gesagt.:


> Wieso?



Weil ich nicht von der PreDestroy Methode eines EJB sondern von der PreDestroy Methode eines JSF Managed Beans rede. 

Ich dachte anfangs, (als ich diesen Thread erstellt habe) der Fehler würde im EJB Container liegen. Erst später wurde mir klar, dass es die PreDestroy Methode eines JSF Managed Beans ist, die 2 mal aufgerufen wird. 

Aktuell prüfe ich mit einer boolean Variable ab die Methode schon aufgerufen wurden und überspringe dann den Aufruf der Destroy Methode des Session Beans. Das funktioniert auch alles nur kann ich halt das Verhalten des Managed Beans nicht nachvollziehen. 

Mir ist übrigens sehr wohl bewusst, das man Lifecylce Methoden nicht selbst aufruft. 

Da der Thread nach meiner Erkenntnis nicht mehr in dieses Unterforum passt hab ich einen neuen erstellt. 
http://www.java-forum.org/web-tier/96703-jsf-lifecycle-methode-mehrfach-aufgerufen.html#post618389


----------



## FArt (9. Mrz 2010)

[quoet][/quote]
Ja, tut mir leid, das habe ich nicht richtig mitbekommen... gründlicher lesen soll da helfen... 
Ist der Container OpenSource? Dann würde ich einfach mal debuggen, dann dürft man schon sehen ob es ein Bug ist oder eine falsche Konfiguration.


----------

