Konfigurationsverwaltung

In der Konfigurationsverwaltung werden Konfigurationswerte hinterlegt, die zur Konfiguration des Systems verwendet werden.

Die Konfigurationsverwaltung ist ein Land

Die Konfigurationsverwaltung ist grundsätzlich wie ein Land implementiert. Sie verwendet die Serviceimplementierungsgruppe "Infrastruktur", die auf jedem Systemstrukturelement registriert ist. Sie bietet darüber hinaus eine .NET-Bibliothek für den vereinfachten programmatischen Zugriff die resiliente Muster wie die Transactional Outbox implementiert. Zudem stellt die Konfigurationsverwaltung Cmdlets zur programmatischen Konfiguration des Systems bereit.

Festlegung von Konfigurationswerten

Konfigurationswerte können auf jedem Knoten in der Systemstruktur festgelegt werden. Konfigurationswerte können dabei folgende Scopes haben, für die jeweils unterschiedliche Werte abgelegt werden können

  • User - Diese Werte sind benutzerspezifisch.
  • Browser - Werte die im UI-Kontext festgelegt werden.
  • Local - Diese Werte sind Maschinen-spezifisch.
  • Global - Werte, die global verwendet werden.

Die Festlegung der konkreten Konfigurationswerte erfolgt mithilfe eines sogenannten Artifact Identifiers, hier im Beispiel per Powershell:

Set-ConfigurationValue -SessionToken $sessionToken -Namespace "Schleupen.CS.MT.BIB.Ausleihen" -Name "Ausleihekonfiguration" -ExternalVersion "1.0" -Scope Local -Document "<AusleiheConfigurationValue><MaxAusleiheTage>9</MaxAusleiheTage></AusleiheConfigurationValue>" 

Zur Spezifikation eines Konfigurationswertes muss dieser zuerst unter Angabe folgender Informationen deklariert werden:

  • Name des Artifact Identifiers - hiermit kann der Konfigurationswert ermittelt werden
  • Datentyp - als Datentypen können primitive Datentypen wie Integer, Decimal, String, Boolean und bei komplexen Datentypen XML-Dokumente verwendet werden
  • optional Pflichtwert - es wird festgelegt, ob ein Wert angegeben werden muss
  • optional Changelog - sollen Änderungen an Konfigurationswerten in das Datenänderungsprotokoll geschrieben werden?
New-ConfigurationType -ArtifactIdentifier Schleupen.CS.PI.Test_1.0 -WriteChangeLog -SessionToken ... -IsRequired -Description "eine Beschreibung"

Suchstrategie zur Ermittlung des konkreten Konfigurationswertes

Zur Ermittlung eines Konfigurationswertes wird eine Auswertungsregel verwendet. Die durch Schleupen.CS 3.0 bereitgestellte Default-Regel lautet: User -> Local -> Browser -> Global. Das bedeutet, dass zunächst nach dem benutzerspezifischen Wert gesucht wird. Ist dieser nicht gesetzt, wird der lokale verwendet und so weiter.

Globale Werte haben eine besondere Bedeutung. Wird auf einem Element kein Wert gefunden, so wird in der Systemstruktur nach globalen Werten auf übergeordneten Elementen gesucht.

Beispiele:

Beispiel 1:

System ------ user: <h/>, local: </i>, browser: </j>, global: </k>
    |
    |
Katalog ------  user: <d/>, local: </e>, browser: </f>, global: </g>
    |
    |
Mandant ------ user: <a/>, local: </b>, browser: </c>, global: </d> x
<em># liefert &lt;/a&gt;</em><br>Get-ConfigurationValue -SessionToken $mandantSessionToken -ArtifactIdentifier "Schleupen.CS.PI.AIF.Configuration.Test_1.0"

Auf Mandantenebene wird ein benutzerspezifischer Wert gefunden.

Beispiel 2:

System ------ user: <h/>, local: </i>, browser: </j>, global: </k>
    |
    |
Katalog ------  user: <d/>, local: </e>, browser: </f>, global: </g>
    |
    |
Mandant ------ x
# liefert </g>
Get-ConfigurationValue -SessionToken $mandantSessionToken -ArtifactIdentifier "Schleupen.CS.PI.AIF.Configuration.Test_1.0"

Auf Mandantenebene wird kein Wert gefunden. Dann wird auf Katalogebene nach globalen Werten gesucht und ein Treffer erzielt.

Beispiel 3:

System ------ user: <h/>, local: </i>, browser: </j>, global: </k>
    |
    |
Katalog ------  
    |
    |
Mandant ------ x
# liefert </k>
Get-ConfigurationValue -SessionToken $mandantSessionToken -ArtifactIdentifier "Schleupen.CS.PI.AIF.Configuration.Test_1.0"

Auf Mandantenebene wird kein Wert gefunden.  Danach wird auf Katalogebene auch kein globaler Wert gefunden. Dann wird auf Systemebene nach globalen Werten gesucht und ein Treffer erzielt.

Werden Konfigurationswerte immer in der Konfigurationsverwaltung abgelegt?

Die folgenden Punkte sollen helfen einzuschätzen, wann Konfigurationswerte in der Konfigurationsverwaltung, im Land /einer Geschäftsprozesskomponente oder an anderer Stelle abgelegt werden sollten.

Grundprämisse: Versuche im Standard die Konfiguration in der Konfigurationsverwaltung abzulegen.

Alle Punkte stehen gleichberechtigt nebeneinander und stellen somit keine Reihenfolge dar!

  • Wie häufig werden die Konfigurationswerte geändert? Die Änderungshäufigkeit kann ein Indiz dafür sein, dass es sich weniger um einen Konfigurationswert und eher um Bewegungsdaten handelt.
    • Bei sich häufig ändernden Werten ist eine Ablage in einem Land sinnvoll. Konfigurationswerte in der Konfigurationsverwaltung werden gecached. Wenn sich die Daten häufig ändern, führt das ansonsten zu vielen unnötigen Cache-Invalidierungen.
    • Werden die Konfigurationswerte nicht oder nur selten geändert, so kann vom Caching profitiert werden. Eine Ablage in der Konfigurationsverwaltung ist damit sinnvoll.
  • Die Konfigurationsverwaltung steht nur zur Verfügung, wenn der Applikationspool "Schleupen Services" läuft. Dadurch steht sie zum Installationszeitpunkt nicht zur Verfügung, sondern erst wenn das System konfiguriert wird (beispielsweise per Konfigurationsskript). Hieraus ergibt sich:
    • Wird der Konfigurationswert nur verwendet, wenn das System konfiguriert wird oder verfügbar ist? In diesem Fall kann der Wert in der Konfigurationsverwaltung abgelegt werden.
    • Falls der Konfigurationswert bereits zum Installationszeitpunkt benötigt wird, ist es nicht sinnvoll ihn in der Konfigurationsverwaltung abzulegen.
  • Konfigurationswerte werden in der Konfigurationsverwaltung als XML-Dokument abgelegt. Ihr Inhalt ist damit nicht ohne zusätzliche Logik durchsuchbar. Um eine Suche zu realisieren, müsste der vollständige Inhalt des Konfigurationswertes in den Speicher geladen werden. Demnach gilt:
    • Ist eine Suche im Inhalt des Konfigurationswertes notwendig, so handelt es sich vermutlich um komplexe Konfigurationsdaten. In diesem Fall ist eine Ablage in einem Land sinnvoller. Hier können die Daten ggf. in separaten Spalten in einer Tabelle abgelegt und effizienter durchsucht werden.
    • Ist keine Suche in den Inhalten des Konfigurationswertes notwendig, so kann die Konfigurationsverwaltung als Ablage gewählt werden.
  • Liegen die zu konfigurierenden Daten in großer Menge vor? Da die Konfigurationswerte als XML-Dokumente in der Datenbank abgelegt werden, entstehen bei großen Datenmengen entsprechend große XML-Dokumente, die immer vollständig geladen und geschrieben werden müssen.
    • Liegen die Daten massenhaft vor, so sollte eine Ablage in einem Land gewählt werden, um hier gezielter Anpassungen an Teilen der Daten durchführen zu können. Gegebenenfalls ist auch eine weitere Aufteilung des Konfigurationswertes sinnvoll.
    • Handelt es sich um einzelne kleine Werte, so sollten sie in der Konfigurationsverwaltung abgelegt werden.
  • Damit externe Bestandteile des Systems schneller gefunden und geändert werden können, sollten diese in der Konfigurationsverwaltung abgelegt werden. Beispiele für diese externe Bestandteile sind Pfade und Endpunkte. Diese können dann auch Verwendungszweck-spezifisch abgelegt werden.
    • Handelt es sich um einen z.B. Pfad, so sollte überprüft werden ob der Werte Verwendungszweck-spezifisch abzulegen ist. Er sollte dann in der Konfigurationsverwaltung abgelegt werden. Endpunkte sollte in der Endpunktverwaltung abgelegt werden.
    • Bei anderen Werten sollte überprüft werden, ob andere Kriterien für oder gegen eine Ablage in der Konfigurationsverwaltung sprechen.
  • Handelt es sich bei dem Konfigurationswert um einen Wert, der aus mehreren Ländern übergreifend genutzt wird?
    • Übergreifende Werte sollten zentral in der Konfigurationsverwaltung zur Verfügung gestellt werden.
    • Handelt es sich um einen Wert der nicht übergreifend genutzt wird, so sollten die anderen Kriterien für oder gegen eine Ablage in der Konfigurationsverwaltung geprüft werden.
  • Handelt es sich bei dem Konfigurationswert um eine globale Steuerung des Verhaltens der Software?
    • Feature Toggles sollten in der Konfigurationsverwaltung abgelegt werden, um sie zentral auffindbar zur Verfügung zu stellen.
      Beachte, dass es hierfür speziell ausgeprägte Cmdlets zur Aktivierung gibt: New-CSFeature, Set-CSFeature, etc. Die Implementierung legt die Werte dann in der Konfigurationsverwaltung ab! Zur Laufzeit kann dieser Wert über den  ConfigurationArtifactIdentifier "Schleupen.CS.Features" / <mein Feature> ausgelesen werden.
    • Handelt es sich nicht um ein Feature Toggle oder einen ähnlichen Wert ,so sollten die anderen Kriterien für oder gegen eine Ablage in der Konfigurationsverwaltung überprüft werden.
  • Sollen komplexe Datentypen/-strukturen abgelegt werden? (Lassen sich die Werte einfach erstellen und mit PowerShell verwenden ohne komplizierte Zwischenschritte?)
    • Für komplexe Konfigurationen sind in der Regel gesonderte Benutzeroberflächen notwendig. Dies spricht häufig für eine Ablage in einem Land.
    • Primitive Werte (bool, string, …) können über die bereitgestellten Cmdlets der Konfigurationsverwaltung schnell und unkompliziert bearbeitet werden.
  • Ist der abzulegende Werte spezifisch für einen Benutzer? Die Konfigurationsverwaltung bietet dafür einen Mechanismus zur Auswertung des angemeldeten Benutzers.
    • Benutzerspezifische Werte sollte in der Konfigurationsverwaltung abgelegt werden.
    • Sind die Werte nicht benutzerspezifisch so sollten die anderen Kriterien für oder gegen eine Ablage in der Konfigurationsverwaltung geprüft werden.
  • Die Konfigurationsverwaltung ist immer systemweit gültig. Werden die Werte hostspezifisch benötigt?
    • Sollen sich die Konfigurationswerte je nach Host unterscheiden, so ist eine Ablage mit Mechanismen des Deployments zu verwenden.
    • Sind die Konfigurationswerte nicht hostspezifisch so sollten die anderen Kriterien für oder gegen eine Ablage in der Konfigurationsverwaltung geprüft werden.
  • Muss ein Administrator die Konfiguration zum Einrichtungszeitpunkt vornehmen oder kann diese durch einen Domänenexperten zur Laufzeit des System erfolgen?
    • Wenn die Konfiguration durch einen Administrator vorgenommen werden kann und soll so ist die Ablage in der Konfigurationsverwaltung sinnvoll. Über ConfigurationTypes lässt sich steuern, ob Werte bei der Einrichtung des Systems angegeben werden müssen
    • Soll die Konfiguration durch Sachbearbeiter zur Laufzeit des Systems durchgeführt werden so sollten die anderen Kriterien für oder gegen eine Ablage in der Konfigurationsverwaltung geprüft werden.
Cookie Consent mit Real Cookie Banner