Frage

Stateless Bohnen in Java nicht halten ihren Zustand zwischen zwei Anrufe von den Kunden. Also kurz gesagt könnten wir sie als Objekte mit Business-Methoden berücksichtigen. Jede Methode nimmt Parameter und Rückgabe Ergebnisse. Wenn das Verfahren einige lokale Variablen aufgerufen wird, werden in Ausführungsstapel erstellt. Wenn die Methode gibt die Einheimischen aus dem Stapel entfernt und wenn einige temporäre Objekte zugewiesen wurden sie sowieso Müll gesammelt.

Aus meiner Sicht, die nicht vom Aufruf der Methode der gleichen einzigen Instanz durch separate Threads unterscheidet. Warum also nicht ein Container eine Instanz einer Bean verwenden, anstatt eine Reihe von ihnen zu bündeln?

War es hilfreich?

Lösung

Pooling tut mehrere Dinge.

Ein, um eine Bohne mit pro Instanz, sind Sie garantiert Fäden sicher (Servlets, zum Beispiel, sind nicht Thread-sicher).

Zwei, reduzieren Sie jede mögliche Startzeit, die eine Bohne haben könnte. Während Session Beans „stateless“ sind, müssen sie nur in Bezug auf den Client staatenlos sein. Zum Beispiel in EJB, können Sie mehrere Server-Ressourcen in eine Session Bean injizieren. Dieser Zustand ist auf die Bohne privat, aber es gibt keinen Grund, warum Sie es nicht von Aufruf zu Aufruf halten. Also, von Bohnen Bündelung reduzieren Sie diese Lookups nur geschieht, wenn die Bohne erstellt wird.

Drei, können Sie Bohne Pool als Mittel zur Drosselverkehr verwenden. Wenn Sie nur 10 Beans in einem Pool haben, sind Sie nur gehen gleichzeitig arbeiten höchstens 10 Anträge zu erhalten, der Rest wird Warteschlange gestellt.

Andere Tipps

Pooling verbessert die Leistung.

Eine einzige Instanz alle Anforderungen der Handhabung / Threads zu viel Streit und Blockierungen führen würde.

Da Sie nicht wissen, welche Instanz verwendet werden (und mehrere Threads eine einzelne Instanz gleichzeitig verwendet werden können), müssen die Bohnen THREAD sein.

Der Behälter kann Poolgröße verwalten basierend auf dem tatsächlichen Aktivität.

Die Transaktionalität des Java EE-Modell verwendet den Thread-Kontext der Transaktion Lebenszyklus zu verwalten.

Diese Vereinfachung besteht, so dass es nicht notwendig ist, eine bestimmte Schnittstelle zu implementieren mit dem Usertransaction-Objekt direkt zu interagieren; Wenn die Transaktion von dem Initial (oder injizierte in den Session-Bean) abgerufen wird, wird es zu einem faden lokalen Variable für die Wiederverwendung gebunden (zum Beispiel, wenn ein Verfahren in der zustandslosen Session-Bean eines anderen zustandslosen Session-Bean aufruft, die auch eine injizierte Transaktion verwendet. )

Lebenszyklus der Statelesss Session Beans sind doesnot existieren, Passive und MethodReady (Passiv oder inaktiv) state.To auf perormance zu optimieren, anstatt die Bohne des Durchlaufens von allen durch Verfahren Bereitschaftszustand zu erstellen, Container verwaltet die Bohne zwischen aktiven und passive Zustände durch die Behälter Rückrufe -. ejbActivate () und ejbPassivate () dort durch die Bohnen Pool verwalten

sreenut

Methoden der Natur sind threadsicher (einschließlich statisch). Warum? Einfach, weil jede Variable in dem Verfahren wird in dem Stapelspeicher erstellt, das heißt jede Variable in dem Verfahren verwendet wird, pro Anruf erzeugt (es ist nicht gemeinsam). Allerdings Parameter sind nicht Teil des Stapels.

Jedoch ist ein Verfahren ist unsicher, wenn er eine unsichere Variable verwendet:

a) Aufruf einer statischen Feld oder eine Variable. Es ist jedoch in jedem Einzelfall geschieht.

b) ruft eine Ressource, die sie gemeinsam genutzt werden. Wie die EntityManager.

c), die einen Parameter, der nicht sicher ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top