Offene zession Muster

Offene zession Muster

Das folgende Java-Beispiel veranschaulicht das Muster “virtueller Proxy”. Die ProxyImage-Klasse wird für den Zugriff auf eine Remotemethode verwendet. In diesem Artikel haben wir unsere Aufmerksamkeit auf eine ziemlich kontroverse Funktion im Frühjahr und ein paar andere Unternehmensframeworks gerichtet: Open Session in View. Zunächst wurden wir mit diesem Muster sowohl konzeptionell als auch umsetzungstechnisch aquagetiert. Dann haben wir es aus Produktivitäts- und Leistungsperspektiven analysiert. Transaktionen können in der Service-Schicht festgeschrieben werden – Transaktionen sind nicht mit OSIV verknüpft. Es ist die Sitzung, die offen bleibt, keine Transaktion – ausgeführt. Die Lösung für dieses Problem ist natürlich die richtige Arbeitseinheit Abgrenzung und Design, unterstützt durch möglicherweise eine Abfangtechnik, wie im Muster hier gezeigt, und/oder die richtige Abruftechnik, so dass alle erforderlichen Informationen für eine bestimmte Arbeitseinheit mit minimaler Auswirkung, bester Leistung und Skalierbarkeit abgerufen werden können. Und wenn wir die Fähigkeit des ORM, Beziehungen faul zu laden, völlig ignorieren wollen, dann sollten wir vielleicht einen winterlähchen.use-the-joins-luke-Flag einführen. 🙂 und werfen Sie LIE auf einen nicht geladenen Feldzugriffsversuch, auch wenn em noch geöffnet ist.

🙂 Ja, dies ist eigentlich eine bessere Umsetzung dieses Musters. Eine Datenbanktransaktion wird verwendet, um Daten während der Verarbeitung des Anforderungsereignisses zu lesen und zu schreiben. Die zweite Datenbanktransaktion wird nur zum Lesen von Daten während des Renderns der Ansicht verwendet. An dieser Stelle werden keine Änderungen an Objekten vorgenommen. Daher werden Datenbanksperren früh in der ersten Transaktion freigegeben, was eine bessere Skalierbarkeit ermöglicht, und die zweite Transaktion kann möglicherweise optimiert werden (z. B. erfordern einige Datenbanken schreibgeschützte Transaktionseinstellungen für die beste Bereinigung nach dem Transaktionscommit). Um zwei Transaktionen zu verwenden, benötigen Sie einen leistungsfähigeren Interceptor als einen einfachen Servlet-Filter – AOP ist eine gute Wahl.

Die JBoss Seam-Frameworks verwenden dieses Modell. Da die Sitzung geöffnet bleibt, treten keine LazyInitializationExceptions mehr auf. Der Sitzungs- oder Entitäts-Manager wird über einen Filter geöffnet, der der Anforderungsverarbeitungskette hinzugefügt wird. heapdump.wordpress.com/2010/04/04/should-i-use-open-session-in-view/ Die Proxyklasse ProxyImage wird auf einem anderen System als der realen Bildklasse selbst ausgeführt und kann das reale Image RealImage da drüben darstellen. Auf die Bildinformationen wird von der Festplatte aus zugegriffen. Mithilfe des Proxymusters vermeidet der Code des ProxyImage das mehrfache Laden des Bildes und greift vom anderen System aus auf speichersparende Weise darauf zu. Die in diesem Beispiel demonstrierte verzögerte Belastung ist nicht Teil des Proxymusters, sondern lediglich ein Vorteil, der durch die Verwendung des Proxys ermöglicht wird. Aber wenn Sie wissen, dass Ihre Anwendung auf einer einzelnen vm ausgeführt wird, warum nicht Ihre Schmerzen lindern, indem Sie eine offene Sitzung in Ansicht Strategie verwenden? Ich habe gerade einen Beitrag zu einigen Richtlinien, wann die offene Sitzung in der Ansicht in meinem Blog zu verwenden. Schauen Sie es sich an, wenn Sie interessiert sind.

Wenn Hibernate, vor dem Entwickler verborgen und außerhalb einer Transaktionsabgrenzung, zufällige Datenbankverbindungen und Transaktionen starten würde, warum sollte die Transaktionsabgrenzung überhaupt sein? Was passiert, wenn Hibernate eine neue Datenbankverbindung öffnet, um eine Auflistung zu laden, aber die besitzende Entität wurde zwischenzeitlich gelöscht? (Beachten Sie, dass dieses Problem nicht mit der oben beschriebenen Zwei-Transaktions-Strategie auftritt – die einzelne Sitzung bietet wiederholbare Lesevorgänge für Entitäten.) Warum sollte man überhaupt eine Dienstebene haben, wenn jedes Objekt durch einfaches Navigieren abgerufen werden kann? Wie viel Speicher sollte dadurch verbraucht werden und welche Objekte sollten zuerst entfernt werden? All dies führt zu keiner Lösung, da Hibernate ein Dienst für die Online-Transaktionsverarbeitung (und bestimmte Arten von Batch-Operationen) und kein “Streaming-Objekte aus einem persistenten Datenspeicher in undefinierten Arbeitseinheiten” ist.

#

Pin It on Pinterest

Share This