Coldfusion: Lese- und Schreibzugriffe auf gemeinsame Variablen sperren

Im Beispiel des newsManager wurde die Notwendigkeit von Read-only-Locks durch die Architektur-Entscheidung, dass der newsManager stateless sein sollte, vermieden. Doch was ist mit einer Situation, bei der man weiß, dass Daten, die sich ändern, in einer CFC, die in einem Shared Scope besteht, vorhanden sind? Es scheint, dass entweder die Aufrufe der CFC korrekt gesperrt sein müssen, oder dass die CFC selbst für ein internes Locking sorgen muss.

Wie gesagt sind Daten, die im „this“-Scope und im „variables“-Scope gespeichert werden, Instanzdaten für diese CFC. Doch die meisten Menschen denken nicht daran, dass diese Bereiche gesperrt werden müssen, wenn eine CFC in einem Shared Scope gespeichert wird. Daher soll das hier deutlich gemacht werden. Die „this“- und „variables“-Scopes werden für einen Augenblick übersprungen, um eine CFC zu betrachten, die Daten manipuliert, die im Session-Scope gespeichert sind. Zur Erinnerung: Eine Session-Variable ist eine Variable in einem Shared Scope, die für einen Benutzer spezifisch ist. Ein Einkaufswagen ist ein Beispiel dafür.

Ebenso wie den newsManager kann man auch einen cartManager im Application-Scope erzeugen:


Ab hier werden die Dinge jedoch anders gehandhabt als bei der newsManager CFC. Der cartManager arbeitet als Session-Façade, die Interaktionen mit einer Cart CFC managt, die im Session-Scope gehalten wird. Zur Erinnerung: Die Session-Variablen sind spezifisch für jeden Benutzer. Da der cartManager eine Cart-CFC-Instanz im Session-Scope manipuliert, müssen die Lese- und Schreibzugriffe korrekt gesperrt sein, um Race Conditions zu vermeiden. So eine Situation kann auftreten, wenn der Benutzer die Applikation in mehreren Browserfenstern verwendet. Der cartManager-Code ist in Listing B zu sehen, der Cart-Code in Listing C.

Listing B


Listing C


Anzumerken ist, dass die Cart CFC selbst keine Locks hat und sich nicht darum kümmert und nicht einmal weiß, in welchen Scopes sie verwendet wird. Der cartManager übernimmt diese Verpflichtungen. Das ist ein gutes Design, das Verbindungen zwischen dem Geschäftsobjekt (dem Einkaufswagen) und dem Rest der Applikation reduziert. Zur Vermeidung von Race Conditions managt der cartManager Locks für Lese- und Schreibzugriffe und schreibt Daten in den Session-Scope.

Hoffentlich ist klar, dass, da die Manager CFC eine Variable im Session-Scope manipuliert, Locks eingebunden werden müssen. Das trifft aber auch zu, wenn eine Shared Scope CFC Instanzdaten, die modifizierbar sind, im „this“- oder „variables“-Scope hält. Noch einmal, wenn die CFC-Instanz in einem Shared Scope gehalten wird, befinden sich auch alle Instanzdaten im Shared Scope!

Themenseiten: Anwendungsentwicklung, Software, Webentwicklung

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Coldfusion: Lese- und Schreibzugriffe auf gemeinsame Variablen sperren

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *