# EJBs Kommunikation



## Acasta89 (15. Jun 2012)

Hallo Freunde,

ich habe ein Problem bei einer Java EE 6 Web-Applikation. Bin dabei ein Zeiterfassungtools zu schreiben. Ich habe 4 Klassen:

- User.java
- Company.java
- Correspondent.java --> Ansprechpartner des Unternehmens
- Task.java

Ich habe für alle Objekte auch die dazugehörigen EJBs und PMs (Präsentation) erstellt. Das wäre bei User z.B.

UserEJB.java und UserPM.java --> MVC Model

Mein Anspruch ist sauberen Code zu schreiben und ich möchte jetzt das einem eingeloggten User all seine Tasks angezeigt werden. Wie mache ich das jetzt am geschicktesten, wenn ich den Benutzernamen, der beim Login an die UserPM.java geht, an die TaskPM.java zu übertragen, damit ich von dort aus sagen kann: Gib mir alle Tasks die zum User XY gehören.

Danke im Voraus.


----------



## Sym (18. Jun 2012)

In der Regel würde ich ein Framework zum Authentifizieren verwenden, wie z.B. JAAS. Damit kannst Du in den EJBs den eingeloggten User direkt auslesen und musst ihn nicht übergeben bekommen.

Du hättest dann folgendes (mit JAAS)

[java=EJB3.1]
@Stateless
public class TaskServiceBean implements TaskService {

    @Inject
    private SessionContext sessionContext;

    public List<Task> loadMyTasks() {
        final String login = this.sessionContext.getCallerPrincipal().getName();
        // call query to load tasks for a specific login name
        return query.getResultList();
    }

}
[/code]

edit: in Plain-EJB müsstest Du an dem SessionContext die @Resource-Annotation (statt @Inject) verwenden.


----------



## FArt (18. Jun 2012)

Bzgl. sauberem Code:
nicht jedes Objekt muss ein EJB sein. Lediglich die Entitäten und die gekapselte Businesslogik.
Tipp: lege für jeden User eine unveränderbare ID an, auf die der aktuelle gesetzte Name gemappt wird. Denn Namen können sich ändern und das ist dann immer problematisch... ;-)


----------

