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!

Page: 1 2 3 4 5 6

ZDNet.de Redaktion

Recent Posts

Kostenloser Dekryptor für ShrinkLocker

Mit dem Dekryptor von Bitdefender können Opfer von Attacken mit der Shrinklocker-Ransomware Dateien wiederherstellen.

2 Wochen ago

Malwarebytes warnt vor Betrugsmaschen beim Weihnachtseinkauf

In der Vorweihnachtszeit ist vor allem Malvertising auf dem Vormarsch. Cyberkriminelle locken Nutzer über schädliche…

2 Wochen ago

Bedrohungsindex: Deutliche Zunahme von Infostealern im Oktober

Dazu trägt unter der Infostealer Lumma-Stealer bei. Hierzulande dominiert der Infostealer Formbook die Malware-Landschaft.

2 Wochen ago

Chrome 131 schließt zwölf Sicherheitslücken

Eine schwerwiegende Anfälligkeit hebelt die Sicherheitsfunktion Seitenisolierung auf. Betroffen sind Chrome für Windows, macOS und…

2 Wochen ago

DeepL Voice mit KI für Sprach- übersetzungen

DeepL Voice ermöglicht Live‑Übersetzung von Meetings und Gesprächen in 13 Sprachen.

2 Wochen ago

November-Patchday: Microsoft schließt Zero-Day-Lücken in Windows

Betroffen sind Windows und Windows Server. Microsoft patcht aber auch Schwachstellen in Excel, Word und…

2 Wochen ago