2016-05-24 18 views
0

Ich habe die 2 folgenden zustandslosen EJBs, die, wie Sie sehen, einen Verweis auf den anderen haben.Melden sich 2 EJBs schlecht?

@Stateless 
public class EjbA { 

    @Inject 
    private EjbB b; 

} 

@Stateless 
public class EjbB { 

    @Inject 
    private EjbA a; 

} 

Ist das eine schlechte Praxis? Kann dies zu einem Speicherleck führen?

EDIT

Wenn man af der EJB Stateful ist, ist, dass das gleiche Verhalten?

Antwort

0

Nein, das ist keine schlechte Praxis.

Dies ist die empfohlene Vorgehensweise, wenn Sie den Transaktionskontext ändern möchten, da Sie wissen sollten, dass das Aufrufen einer Methode in einem EJB nicht vom Container abgefangen wird und somit die Transaktionseigenschaften nicht geändert werden.

Beachten Sie jedoch, dass dadurch eine neue Instanz erstellt wird, wenn ein EJB X in sich selbst injiziert wird.

Ich weiß nicht, was mit Statefull EJBs geschieht

0

über den Code Denken ohne EJB spezifische Anmerkungen:

public class EjbA { 

    private EjbB b; 
} 

public class EjbB { 

    private EjbA a; 
} 

Hier haben Sie zirkuläre Abhängigkeiten zwischen zwei Klassen. Im Allgemeinen ist es eine schlechte Übung, den Code in einer solchen Beziehung zu halten. Wenn Sie beide Klassen als EJBs kennzeichnen, geben Sie ihnen zusätzliche Power (z. B. Transaktionen, Dependency Injection, Instanzpool). Das Problem mit der zirkulären Beziehung ist jedoch immer noch vorhanden. Um weitere mögliche Probleme zu vermeiden, versuchen Sie, dieses Design zu vermeiden.

0

Das ist nur sinnvoll, wenn beide EJB @stateful sind: Sie haben 2 verschiedene Objekte, die sich auf die doppelte Sichtbarkeit beziehen. Falls nicht, ist dies nicht sinnvoll, da de @stateless das @stateful immer bei jedem Aufruf zurücksetzt oder Sie können die @stateless-Methode mit einem statischen Methodenaufruf versehen.