Wird die @Resource
Annotation auf eine Methode angewendet, wenn eine EJB
deserialisiert wird? Ich habe einen EJB-Timer, der vom Container beibehalten wird und möchte wissen, ob der Transient TimerService
(er ist nicht serialisierbar) erneut injiziert wird, wenn der EJB deserialisiert wird.Wird die @Resource-Annotation angewendet, wenn ein zustandsloses EJB deserialisiert wird?
Antwort
Vielleicht ist dieser Artikel helfen:
What is the Stateless Session Bean Life Cycle?: die Stateless Session EJB zum Zeitpunkt der Erstellung eingespritzt wird, und es die Ressourcen entlang seiner Lebensdauer hält.
What is the Life Cycle of a Stateful Session Bean?: Es scheint, dass die Abhängigkeitsinjektion nur zur Erstellungszeit auftritt. Wie auch immer, nach der Aktivierung wird der Callback-Handler @PostActivate aufgerufen, wo Sie Ihre transienten Elemente wiederherstellen können.
bearbeiten zu diesem Thema der Java EE Tutorial Link für das Hinzufügen, das bestätigt, was ausgesetzt:
So, als Abschluss, lautet die Antwort nein, die Container wird Ihre transienten Ressourcen nach der Aktivierung nicht erneut injizieren, aber Sie können einen PostActivate-Handler implementieren, um dies auf Ihre eigene Weise zu tun.
Danke für den Link 'JEE tutorial'. Auf Staatenlosen Bohnen (http://download.oracle.com/javaee/5/tutorial/doc/bnbmt.html#bnbmw) 'Da eine Stateless-Session-Bean niemals passiviert wird, hat ihr Lebenszyklus nur zwei Stufen: nicht vorhanden und bereit für der Aufruf von Geschäftsmethoden. Das Timer-EJB wird höchstwahrscheinlich serialisiert, so dass es über Server-Neustarts hinweg existieren kann. Wenn es jedoch benötigt wird und nicht verfügbar ist, wird immer eine neue Instanz erstellt, und die Abhängigkeitsinjektion funktioniert. – n002213f
Ausgezeichnete Frage. Keine Ahnung, was die Antwort ist ... –
meinst du "aktiviert" (nach der Passivierung)? – Bozho
Ich denke, es wird nicht schwer sein, es zu versuchen. – Bozho