Hallo Liebe Forenmember
Ich habe gelesen, dass es nicht erlaubt ist, innerhalb einer Stateless- Session Bean Threads zu synchronisieren. Mit anderen Worten das Schlüsselwort synchronized sowie die Methode Object.wait() funktionieren da nicht.
Gilt das auch für Stateful Session Beans?
Wenn ja, wie ist dann folgendes Szenario lösbar:
Auf einer Stateful Session Bean wird eine Methode doWork aufgerufen. Diese Methode macht aus einem Auftrag Teilaufträge. Diese schreibt sie in eine MessageQueue. Nun kommen mehrere Instanzen einer Message Driven Bean und arbeiten jeweils einen Teilauftrag ab. Danach wird eine Antwort (über eine temporäre Queue) mit dem erarbeiteten Resultate zurück an (immer dieselbe) Stateful Session Bean geschickt.
Das Ziel ist nun, dass die Methode doWork erst einen Wert zurückgibt, nachdem alle Teilaufträge abgearbeitet wurden.
Ich habe es mit wait und notify probiert. Entweder habe ich das falsch gemacht oder es funktioniert einfach nicht. Nur eben, was soll ich dann machen?
Danke für eure Hilfe!
Synchronisation innerhalb einer Session Bean
Moderator: wegus
Re: Synchronisation innerhalb einer Session Bean
Moin!
Hier ein (nicht unkritischer) Artikel zu nebenläufigen Prozessen in EJB Umgebungen und ein Lösungsansatz:
http://www.prozesse-und-systeme.de/ejbAsynchron.html
Wenn es EJB 3.1 sein darf: http://www.theserverside.com/tt/article ... resEJB31-3 - IMHO mit Glassfish zu realisieren.
Beste Grüße,
Josch.
Hier ein (nicht unkritischer) Artikel zu nebenläufigen Prozessen in EJB Umgebungen und ein Lösungsansatz:
http://www.prozesse-und-systeme.de/ejbAsynchron.html
Wenn es EJB 3.1 sein darf: http://www.theserverside.com/tt/article ... resEJB31-3 - IMHO mit Glassfish zu realisieren.
Beste Grüße,
Josch.
Re: Synchronisation innerhalb einer Session Bean
Hi Josch
Danke für deinen Beitrag!
Leider bringen mich die beiden Artikel noch nicht wirklich weiter, denn das dort beschriebene wurde von mir bereits umgesetzt. (Nicht die EJB 3.1 Geschichte, sondern via Message Queue).
Zur Verdeutlichung habe ich noch eine kleine Grafik erstellt, welche den Aufbau erklären soll. Was aber noch nicht funktioniert ist folgendes:
Das return an den Client soll erst erfolgen, NACHDEM alle Teilresultate bei der Session Bean angekommen sind (und diese somit zu einem fertigen Endresultat zusammengeschustert wurden). Das bedeutet, dass doch nach dem Senden der Teilaufgaben ein wait und nach dem Erhalten aller Antwort- Messages ein notify ausgeführt werden sollte. Wenn ich das aber mache, bleibt nach dem Senden der Teilaufgaben einfach alles stehen (die Teilaufgabe- Messages werden von den MDBs auch nicht mehr erhalten). Dies ist für mich auch nachvollziehbar, nur fällt mir halt keine andere Lösung ein.
Ich hoffe, du kennst Rat...
Danke für deinen Beitrag!
Leider bringen mich die beiden Artikel noch nicht wirklich weiter, denn das dort beschriebene wurde von mir bereits umgesetzt. (Nicht die EJB 3.1 Geschichte, sondern via Message Queue).
Zur Verdeutlichung habe ich noch eine kleine Grafik erstellt, welche den Aufbau erklären soll. Was aber noch nicht funktioniert ist folgendes:
Das return an den Client soll erst erfolgen, NACHDEM alle Teilresultate bei der Session Bean angekommen sind (und diese somit zu einem fertigen Endresultat zusammengeschustert wurden). Das bedeutet, dass doch nach dem Senden der Teilaufgaben ein wait und nach dem Erhalten aller Antwort- Messages ein notify ausgeführt werden sollte. Wenn ich das aber mache, bleibt nach dem Senden der Teilaufgaben einfach alles stehen (die Teilaufgabe- Messages werden von den MDBs auch nicht mehr erhalten). Dies ist für mich auch nachvollziehbar, nur fällt mir halt keine andere Lösung ein.
Ich hoffe, du kennst Rat...
Re: Synchronisation innerhalb einer Session Bean
Moin!
Das der Client hängt, wenn Du auf die Komplettantwort synchronisierst ist wirklich kein Wunder
Was ist bei Dir der Client? Denn der muss im Prinzip "nebenläufig" die synchronisierte Antwort abwarten. Das SessionBean kann da nichts machen, es ist in seinem eigenen Thread gefangen.
Beste Grüße,
Josch.
Das der Client hängt, wenn Du auf die Komplettantwort synchronisierst ist wirklich kein Wunder

Was ist bei Dir der Client? Denn der muss im Prinzip "nebenläufig" die synchronisierte Antwort abwarten. Das SessionBean kann da nichts machen, es ist in seinem eigenen Thread gefangen.
Beste Grüße,
Josch.