Synchronisation innerhalb einer Session Bean

J2EE, JSP, JSF, VisualWeb-Pack usw.

Moderator: wegus

Antworten
cryptonit
Beiträge: 18
Registriert: 05.11.2008, 09:15

Synchronisation innerhalb einer Session Bean

Beitrag von cryptonit » 19.01.2010, 10:30

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!

Benutzeravatar
arittner
Beiträge: 3229
Registriert: 05.08.2008, 07:20
Wohnort: Südniedersachsen
Kontaktdaten:

Re: Synchronisation innerhalb einer Session Bean

Beitrag von arittner » 19.01.2010, 10:53

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.
JNBB/BeanDev-Blog | Twitter@beandev
Bild
Sun Certified Specialist for NetBeans IDE

cryptonit
Beiträge: 18
Registriert: 05.11.2008, 09:15

Re: Synchronisation innerhalb einer Session Bean

Beitrag von cryptonit » 19.01.2010, 13:13

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.
aufbau.jpg
aufbau.jpg (20.78 KiB) 5365 mal betrachtet
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...

Benutzeravatar
arittner
Beiträge: 3229
Registriert: 05.08.2008, 07:20
Wohnort: Südniedersachsen
Kontaktdaten:

Re: Synchronisation innerhalb einer Session Bean

Beitrag von arittner » 20.01.2010, 11:41

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.
JNBB/BeanDev-Blog | Twitter@beandev
Bild
Sun Certified Specialist for NetBeans IDE

Antworten