Konversationsstatus von Session-Beans

8

Ich lese ein Buch über Java EE 6 und habe folgende Teile getroffen:

"Stateless: Die Session-Bean enthält keinen Konversationsstatus zwischen Methoden und beliebigen Instanz kann für jeden Client verwendet werden. "

"Stateful: Die Session-Bean enthält den Konversationsstatus, der beibehalten werden muss über Methoden für einen einzelnen Benutzer. "

Was bedeutet "Gesprächszustand"? Hat jemand ein Beispiel aus der realen Welt, um es zu erklären?

Vielen Dank im Voraus.

II. Warum ist diese Klassifizierung von Bohnen so wichtig? Es sagt auch nichts mit der richtigen Erklärung oder für Anfänger (auf den ersten Blick) Also danke ich dir den logischen Unterschied, aber warum ist dieses nette Verhalten so wichtig?

    
cscsaba 01.03.2011, 10:06
quelle

3 Antworten

11

Im einfachsten Fall bezieht sich "Konversationsstatus" auf den Wert von Instanzfeldern.

Bei zustandslosen Session-Beans garantiert der Container nicht, dass nachfolgende Methodenaufrufe die gleiche EJB-Instanz (aus dem Pool) verwenden. Daher können Sie nicht davon ausgehen, dass die beim Aufruf einer Bean-Methode übergebenen Werte noch vorhanden sind Sie rufen die Methode erneut auf (oder eine andere Methode der Bean).

Bei Stateful-Session-Beans garantiert der Container, dass nachfolgende Aufrufe dieselbe EJB-Instanz verwenden. Daher können Sie Feldwerte für Instanzen beibehalten.

Nehmen wir als Beispiel an, Sie haben eine Bean, die eine increment () - und eine retrieve () -Methode hat. Increment erhöht den gespeicherten Wert und retrieve ruft den aktuellen gespeicherten Wert ab.

Wenn Sie bei einer statuslosen Session-Bean die increment () -Methode fünfmal aufrufen, ist es nicht garantiert, dass Sie beim Abrufen () eine 5 erhalten. Es hängt vom Container ab, welcher EJB es ist. lle deinem Anruf zuweisen. Wenn Sie also eine neue EJB-Instanz zugewiesen bekommen, erhalten Sie eine Null. Es ist auch möglich, dass der Container Ihre EJB-Instanz nicht bereinigt hat. Daher ist es möglich, eine 5 zu erhalten - dies ist jedoch nicht garantiert.

Wenn Sie bei einer Stateful-Session-Bean die increment-Methode fünfmal aufrufen, erhalten Sie beim Abrufen des Werts eine 5. Der Container garantiert, dass das EJB, das beim ersten Aufruf verwendet wurde, für alle nachfolgenden verwendet wird Anrufe.

    
Renan 01.03.2011, 10:51
quelle
4

Ein echtes Beispiel für einen Konversationsstatus wäre Einkaufswagen. Ein Benutzer kann mehrere Artikel nacheinander in den Einkaufswagen legen und dann die Kasse aufrufen. Alle hinzugefügten Zeiten wären da

Angenommen, der Einkaufswagen ist zustandsbehaftet, d. h. er behält den Konversationszustand bei.

%Vor%

Wenn der Wagen statuslos ist, ist jeder Anruf unabhängig von vorherigen und an der Kasse kann er nichts haben.

Für Ihren zweiten Punkt Die Unterscheidung ist aufgrund der Unterschiede im Verhalten beider Bohnen notwendig. Der Status Status benötigt Ressourcen, daher sind Stateful Beans nicht so skalierbar wie Stateless Beans.

    
anergy 01.03.2011 11:08
quelle
0

Was den zweiten Teil der Frage betrifft, können Sie aus dem java EE 6 Tutorial folgendes lesen:

  

Wann Sie Session-Beans verwenden sollten

     

Stateful Session-Beans sind geeignet, wenn eine der folgenden Bedingungen zutrifft.

     
  • Der Status des Beans repräsentiert die Interaktion zwischen der Bean und einem bestimmten Client.
  •   
  • Die Bean muss Informationen über den Client bei Methodenaufrufen speichern.
  •   
  • Die Bean vermittelt zwischen dem Client und den anderen Komponenten der Anwendung und bietet dem Client eine vereinfachte Ansicht.
  •   
  • Hinter den Kulissen verwaltet die Bean den Arbeitsfluss mehrerer Enterprise-Beans.
  •   

Um die Leistung zu verbessern, können Sie eine zustandslose Session-Bean auswählen, wenn eine dieser Eigenschaften vorhanden ist.

     
  • Der Status des Beans enthält keine Daten für einen bestimmten Client.
  •   
  • In einem einzigen Methodenaufruf führt die Bean eine allgemeine Aufgabe für alle Clients aus. Sie können beispielsweise eine Stateless-Session-Bean zum Senden einer E-Mail verwenden, die eine Online-Bestellung bestätigt.
  •   
  • Die Bean implementiert einen Web-Service.
  •   

Java EE 6-Lernprogramm

    
maximus 04.08.2013 21:43
quelle

Tags und Links