@Stateful
@Stateful markiert eine EJB als "eine Instanz pro Client".
Member-State erlaubt, lebt bis @Remove oder Timeout.
I. Eigenschaften
- Jeder JNDI-Lookup → neue Instanz
- Member-Felder dürfen User-spezifische Daten halten
- Container hält die Instanz im Speicher zwischen Calls
- Typisch: Shopping-Cart, Wizard, Session
II. Beispiel
@Stateful
public class CartBean {
private final List<String> items = new ArrayList<>();
public void addItem(String item) { items.add(item); }
public List<String> getItems() { return items; }
}
III. Lookup für "pro User"
Bei @Stateful willst du oft eine eigene Instanz pro User → also kein @EJB, sondern manueller JNDI-Lookup:
CartBean cart = (CartBean) ctx.lookup("java:module/CartBean");
IV. .NET-Pendant
Wie Session-State — aber Container-managed.