Announcement

Collapse
No announcement yet.

Seam Authentifizierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Seam Authentifizierung

    Moin liebe Gemeinde,
    ich habe da mal eine Frage zu Seam und der Authentifizierung.

    Und zwar hatte ich bislang für meine "Spiel"applikation immer nur ein Benutzer-Objekt, auf das ich problemlos über den Namen der Entität zugreifen konnte und es den ScopeType Session hatte.

    Jetzt habe ich mir gerade überlegt was passiert wenn ich Vererbung ins Spiel bringe.

    Ich habe mir eine abstrakte Oberklasse gemacht und zwei Subklassen, die von meiner abstrakten Oberklasse erben. So far so good. Mein Hibernate Mapping habe ich ebenfalls dementsprechend umgestellt (ich habe mich für den Joined-Typen entschieden (ich weiß das es die unperformante Lösung ist)).

    Meine abstrakte Oberklasse sieht dann folgendermaßen aus:
    @Entity
    @Table(name = "test.anwender", uniqueConstraints = @UniqueConstraint(columnNames = "login"))
    @Scope(ScopeType.SESSION)
    @Inheritance(strategy = InheritanceType.JOINED)
    @DiscriminatorColumn(name = "ANWENDERTYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
    @DiscriminatorValue("ANWENDER")
    public abstract class Anwender

    Meine zweite Entität sieht folgendermaßen aus:
    @Entity
    @Table(name = "test.benutzer")
    @Name("benutzer")
    @Scope(ScopeType.SESSION)
    @DiscriminatorValue("BENUTZER")
    @PrimaryKeyJoinColumn(name = "OBJ_ID", referencedColumnName = "OBJ_ID")
    public class Benutzer extends Anwender implements Serializable {

    Meine dritte Entität sieht dementsprechend aus, nur mit dem Unterschied, dass der Name "firma" ist und der Table-Name ist test.firma.
    Soweit klappt das auch noch alles problemlos.

    Wenn ich meine login-Methode aufrufe ist auch noch alles Bestens. Mein "Anwender" wird gefunden, alles ist rosarot.

    @Stateless
    @Name("authenticator")
    public class Authenticator {
    @Logger
    private Log log;

    @Out(required = true)
    Anwender anwender;

    public boolean authenticate() {
    ....
    this.anwender = <gefundenerBenutzerInDb>
    ...

    return true;
    }

    Meine Managed-Beans sehen folgendermaßen aus:
    public class TestHandler {

    @In
    protected Anwender anwender;


    Wenn ich jetzt allerdings in meinen Beans auf mein Anwender-Objekt zugreifen möchte, ist dieses null und ich weiß nicht warum.
    Normalerweise sollte das gute Stück doch jetzt in der Session stehen und ich
    sollte Zugriff auf das gute Stück haben, oder?

    Über eure Hilfe würde ich mich freuen! :-)
    Was mache ich falsch??

    Eine @Name Annotation kann ich bei einer abstrakten Superklasse nicht setzen...

    Grüße
Working...
X