Stateful Session Bean mit einer ID aus dem EJB-Container holen

MS-Tech

Erfahrenes Mitglied
Hallo Zusammen,

ich habe eine Frage bzgl. der Verwaltung einzelner Stateful Session Beans im EJB Container.

Ich möchte meine Session Beans nicht mit einem Namen, sonder einer ID (es können mehrere Session Beans sein) im EJB Container verwalten. Wie kann ich sowas bewerkstelligen?

Momentan ist es so, dass die Session Bean einen Namen hat, über den ich die Session Bean auch im Context finde, was ja eigentlich das Standardvorgehen ist. Wenn ich dann diese Session Bean habe (hol mir die Bean mit lookup), dann binde ich diese Bean wieder mit einer ID im Context. Somit kann ich dann nun mit dieser bzw. einer ID die Bean aus dem Context holen. Anfangs frage ich natürlich ab, ob sich diese Bean bereits im Context befindet, wenn ja, dann hole ich mir die Bean mit lookup zurück, ansonsten muss ich diese, wie eben beschrieben, erst wieder an den Context binden. Ach ja für jeden Aufrufer sollte so eine Session Bean im Context bzw. EJB Container existieren und jeder Aufrufer hat seine eigene ID.

Geht das auch einfacher :)? Hat jemand eine Idee?

Viele Grüße
MS-Tech
 
Hallo,

was willst du denn damit erreichen? Das ein konkreter Client immer mit der selben SFSB kommuniziert?
Das ist IMHO bei SFSB Standardmäßig der Fall - deshalb heißen die ja auch "Statefull" Session Beans- sie halten den Kommunikationsstatus für ihren Client. Pro Client gibt es eine SFSB. Wenn du in deinem Client eine "remote" Referenez auf die SFSB im Container hälst sollten deine Calls immer an das selbe SFSB gehen bzw, an ein SFSB mit dem selben State. Der Container kann natürlich entscheiden bei längerer nicht aktivität das SFSB zu passivieren. Dabei wird der Instance-State extern gespeichert (passivate / @PrePassivate). Sobald der Client das SFSB wieder verwendet wird dieser Instance-State wieder hergestellt bzw. kann wieder entsprechend aufgebaut werden (activate / @PostActivate).

Du brauchst also IMHO keine ID dafür, oder möchtest du was anderes machen?

Gruß Tom
 
Hi Tom,

danke für deine Antwort.

Ich möchte damit erreichen, dass wirklich jeder Client immer mit der selben SFSB arbeitet. In der SFSB werden z.B. spezielle Sessiondaten gehalten, die ich nur einmal laden möchte und nicht jedes Mal, wenn ein Client diese SFSB verwendet. Ich möchte mit meiner Methode auf alle Eventualitäten vorbereitet sein, d.h. ein Client kommuniziert mit einer SFSB und aus irgendwelchen Gründen gibt es einen Verbindungsabbruch (Exception etc.) und der Client verbindet sich neu mit dem Server...somit möchte ich, dass sich der Client wieder die richtige SFSB holt.

Wird das standardmäßig sowieso abgedeckt? Wenn ja, dann brauch ich mich ja darum nicht zu kümmern.

Ach ja...ich hab keinen direkten Client. Ich schick Datenpakete über eine IP-Verbindung und mittels Netty-Framework an den Server. Im Netty-Framework habe ich einen Handler definiert, der dann diese Nachricht entgegen nimmt und verarbeitet. Genau in diesem Handler wird dann eine SFSB geholt und zwar über diese lookup-Methode und dem dazugehörigen JNDI-Namen. Ich habe es gerade getestet und ich bekomme immer eine neue SFSB mit jeder Nachricht, die ich abschicke. Ich arbeite hier auch nicht mit Remote-Interfaces, sondern mit Local-Interfaces, da ich keinen direkten Remote-Zugriff habe. Wenn ich aber nun eine SFSB wieder mit einer ID an den Context binde, dann bekomm ich immer wieder die gleiche SFSB zurück, es sei denn der EJB-Container hat dieses Objekt verworfen. In diesem Fall wird es neu generiert, was auch okay ist.

Viele Grüße
MS-Tech
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück