Benutzer-Daten über mehrere Session-Beans

Status
Nicht offen für weitere Antworten.

kevin82

Mitglied
Hallo,

ist es irgendwie möglich Benutzerdaten in einer Session zu speichern, so dass mehrere Session-Bean darauf zugriff haben?

Beispiel: Ich will z.B. 3 Session-Beans (Stateful) einrichten:

AuthentificationBean
OrderBean
MyAccountBean

Der Client macht einen lookup auf alle 3 Session-Beans und meldet sich anschließend mit einer login Methode an der Authentificationbean an. Nun sollte die OrderBean irgendwie wissen, dass der Benutzer angemeldet ist.

Natürlich könnte ich die 3 Bean auch zu einer Kombinieren, nur würde dadurch die Übersicht extrem leiden.

Weiß jemand eine Lösung?

Viele Grüße
Kevin
 

benders

Aktives Mitglied
Vielleicht stehe ich auf den Schlauch, aber kann die OrderBean nicht auf die MyAccountBean zugreifen?
 

benders

Aktives Mitglied
Ja die IDE! Die hilft Dir beim Zugriff auf die anderen Beans.

Wichtig ist mir noch zu wissen: Sind die SessionBeans Remote oder Local ?
 

kevin82

Mitglied
nee.. benutze eclipse.

die session-beans werden remote angesprochen (zumindest vom client).
Kann ich mittels DI die authentification-Bean in den anderen Beans einbinden?
 

benders

Aktives Mitglied
Ja, theoretisch!
Solltest Du mal probieren, aber ich hatte schon Probleme wenn ich nur nicht der Annotation @EJB gearbeitet habe.

Ein "richtige" Lookup-Fkt. hilft dann aber weiter.

Versuch:
@EJB
private MyAccountBeanRemote myAccountBean;

Dann kannst Du mit myAccountBean.<methode()> weiterarbeiten.
 

benders

Aktives Mitglied
Sehr gute Frage! Ich habe eben nochmal nachgelesen.
Das wird wohl nicht so sein. Jedenfalls beim Remote.
 

kevin82

Mitglied
gibt es denn keine möglichkeit (im sessioncontext habe ich leider nichts gefunden) daten von einem Client zu speichern, so dass man von mehreren Session-Beans darauf zugreifen kann?

quasi ein session-objekt wie in Servlet/JSP
 

Ceene

Aktives Mitglied
Eventuell hilft dir die Annotation "@EJB" weiter.
Damit wird eine Referenz auf ein Bean gesetzt.

Allerdings nicht auf Remote-Interface sondern auf Local-Interface. Da deine Application auf einen Server läuft und auch dort auswgeführt wird, brauchst du normalerweise kein Remote-Interface, außer du hast die Beans nicht im gleichen Project.

@EJB
private myAccountBeanLocal myAccountBean;

Damit sollte es gehen.
 
Zuletzt bearbeitet:

Ceene

Aktives Mitglied
Ok ich habe das gleiche Problem mittlerweile.

Hallo ihr lieben

Ich habe da mal eine verständniss-Frage zu Variablen in EJBs.
Ich habe Stateful-Session-Beans und will auch zwischen diesen Beans Daten übergeben.

Ich mache das Bean über die Annotation @EJB bekannt und dann über eine set-Methode der Variablen will ich den Wert übergeben.
Wenn dann aber das Bean dem ich den Wert übergeben habe aufgerufen wird und der Wert abgefragt wird, so ist er nicht mehr da.

Setze ich die Variable auf static geht es. Leider aber auch nur für einen User. Kann mir jemand helfen? Wie bekomme ich Werte von ausserhalb in ein Stateful-Bean ohne das die Werte verloren gehen, wenn das Bean passiv ist.

Ich hoffe ihr könnt mir helfen, denn ich bin total ratlos
 

FArt

Top Contributor
Konkurrierende Zugriffe auf ein SFSB sind nicht erlaubt. Theoretisch kann man mit dem BeanHandle ein Referenz auf ein bestehendes SFSB erhalten.

Für kevin82 und Ceene gilt jedoch: ihr wollt mit "Java-Mitteln" eine Funktionalität in der EE Welt realisieren. Das ist oft nicht möglich, weil man dabei (in der Regel mangels besseren Wissens) gerne mal gegen die Spec verstößt und das Verhalten (wenn man es denn überhaupt realisieren kann) nicht das erwartete ist.
Euer Problem liegt im Design eurer Enterpriseanwendung.

Vermutung:
kevin will eine Zugriffskontrolle realisieren, weil er JAAS nicht kennt oder es zu kompliziert scheint, Ceene will eine zentrale Konfigurationsmöglichkeit oder etwas ähnliches, was man z.B. mit einer Datenbank realisieren könnte oder über einen Service im JNDI, vielleicht auch über Spring, ... usw...
Eine gute Lösung kann man finden, wenn ihr das eigentliche Problem formulieren könnt, nicht den vermeintlichen Lösungsansatz (siehe Link in meiner Signatur).
 

dojolava

Mitglied
Hi,

ich habe genau dasselbe Problem und habe dazu auch grade schon einen neuen Post gemacht. Ich benutze JAAS, habe ein eigenes LoginModul und der Benutzer wird erfolgreich registriert und ist dann auch über den SessionContext als CallerPrinzipal noch identifizierbar. Das Problem ist, daß ich aber von SessionContext.getCallerPrincipal().getName() gar nicht unbedingt den username bekomme, sondern wie bei OpenEJB einen Group Principal. Das hilft mir also gar nix, ich weis bei einem Methodenaufruf nicht wer der Caller ist.

Daher hab ich dieselbe Frage, wie designed man eine EJB Applikation wenn man mehrere Dienste (SessionBeans) hat und in diesen das aktuelle Benutzerobjekt braucht.

Nachdem ich lange rumprobiert habe, hatte ich nun die Idee das so zu lösen wie ich es mit RMI lösen würde. Also eine SessionFacade von der man die das Stateful SessionBean bekommt, dass dann ein Benutzerobjekt halten kann und über das auch weitere SessionBeans verfügbar sind. Also ZB. so:

[highlight=Java]
StatelessBeanRemote initBean = (StatelessBeanRemote)ctx.lookup("StatelessBeanRemote");
StatefulBeanRemote myConn = initBean.login(username, password);

StatefulSearchBeanRemote search = myConn.getSearchService();
search.search("*");
StatefulAccountBeanRemote account = myConn.getAccountService();
account.getProfile();
[/highlight]

in myConn könnte dann der Benutzer in einer Instanzvariable gespeichert werden und an alle weiteren Services übergeben werden.
myConn müsste dann für alle weiteren Aufrufe in der Client Session gespeichert werden.

Funktioniert das überhaupt, daß ich von einer RemoteBean andere RemoteBeans bekomme?

Und wie kann ich hier verhindern, daß jemand direkt auf zB StatefulAccountBeanRemote zugreift? Muss ich dann mit @RunAs/@RolesAllowed arbeiten?

Macht "man" das so? Was ist hier ein sinnvolles Vorgehen? Gibt es da eine "standard" Lösung?

Mathis
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben