Eine Stateful Session Bean ist wie folgt definiert:
Stateful Session Beans Der Status eines Objekts besteht aus den Werten seiner Instanzvariablen. In einer Stateful Session Bean repräsentieren die Instanzvariablen den Status einer eindeutigen Client-Bean-Sitzung. Da der Client mit seiner Bean interagiert („spricht“), wird dieser Status häufig als Konversationsstatus bezeichnet.
Eine zustandslose Sitzungs-Bean ist wie folgt definiert:
Stateless Session Beans Eine Stateless Session Bean verwaltet keinen Konversationsstatus mit dem Client. Wenn ein Client die Methoden einer zustandslosen Bean aufruft, enthalten die Instanzvariablen der Bean möglicherweise einen für diesen Client spezifischen Status, jedoch nur für die Dauer des Aufrufs. Wenn die Methode abgeschlossen ist, sollte der clientspezifische Status nicht beibehalten werden. Clients können jedoch den Status von Instanzvariablen in gepoolten zustandslosen Beans ändern, und dieser Status wird beim nächsten Aufruf der gepoolten zustandslosen Bean beibehalten. Mit Ausnahme des Methodenaufrufs sind alle Instanzen einer zustandslosen Bean gleichwertig, sodass der EJB-Container jedem Client eine Instanz zuweisen kann. Das heißt, der Status einer zustandslosen Session-Bean sollte für alle Clients gelten.
Der Vorteil der Verwendung einer zustandslosen Sitzungs-Bean gegenüber einer zustandsbehafteten Sitzungs-Bean ist folgender:
Da zustandslose Session Beans mehrere Clients unterstützen können, bieten sie eine bessere Skalierbarkeit für Anwendungen, die eine große Anzahl von Clients erfordern. In der Regel benötigt eine Anwendung weniger zustandslose Session-Beans als Stateful-Session-Beans, um die gleiche Anzahl von Clients zu unterstützen.
Die Frage, die sich stellt, ist also, wann man Stateful Session Beans verwenden sollte. Nach meinem naiven Verständnis der Sache sollte man sich daran halten, eine zustandslose Session Bean zu verwenden, wie er kann.
Was wären die Kandidaten, in denen man Stateful Session Bean verwenden sollte? Irgendwelche guten Beispiele?