Es ist häufig notwendig, Werte für eine Gruppe von Ressourcen zu speichern, wobei die Mitglieder dieser Gruppe dynamisch sein und sich während des Berechnungszeitraums ändern können. In der folgenden beispielhaften Anforderungsberechnung ist es notwendig, eine intermediäre Berechnung für jede Ressource durchzuführen, um am Ende das aggregative Ergebnis zu erhalten.
Nachfolgend sind einige solche Beispiele angegeben:
In diesen Beispielen sind Standorte Ressourcen, die mit ihnen verknüpfte Incidents haben.
Ein Server ist eine Ressource, für die der Verfügbarkeitsprozentsatz bewertet werden muss.
In diesem Fall ist ein Transaktionstyp eine Ressource, die mit ihren fehlgeschlagenen Events verknüpft sind. Für jeden Transaktionstyp wird ein Fehlerzähler als intermediäres Ergebnis gespeichert und die Anzahl von unterschiedlichen Transaktionstypen, die mehr als X Fehler hatten, wird gezählt.

Beispiel:
Für die folgende Berechnungsanforderung:
Berechnen Sie den Prozentsatz der Verfügbarkeit für ein System, das aus einem Cluster von Servern besteht. Das System wird nur dann als verfügbar angesehen, wenn alle zu Grunde liegenden Server verfügbar sind.
Das Lösungsdesign wird folgendermaßen implementiert:
Die Systemverfügbarkeit wird anhand der Verfügbarkeit der zu Grunde liegenden Cluster-Ressourcen beurteilt. In diesem Fall ist es erforderlich, den Status aller geclusterten Ressourcen zu bearbeiten und zu speichern, um den Systemstatus zu jedem Zeitpunkt zu beurteilen.
Dazu muss die Formel eine Zuordnungsgrafik (die Zuordnungsgrafik "ServerAvailabilityIndicators" im nachfolgenden Beispielcode) umfassen, die einen Eintrag für jede der überwachten Ressourcen enthält. Da alle Zuordnungsgrafikobjekte ein Schlüsselfeld erfordern, um auf den zugeordneten Wert hinzuweisen, wird der Ressourcenindikator der Schlüssel (dies ist die Ressourcen-ID) dieser Zuordnungsgrafik und der Wert der Komponentenstatus sein. Wann immer sich der Status einer Komponente ändert, sollte auch der zugehörige Eintrag in dieser Zuordnungsgrafik geändert werden. Die Formel wird den Status der zugehörigen Ressource in der Zuordnungsgrafik nach jedem angezeigten Verfügbarkeits-Event aktualisieren und den Systemstatus entsprechend neu beurteilen.
Da sich die überwachten Ressourcen ändern können (einige könnten während des Berechnungszeitraums entfernt und andere hinzugefügt werden), muss dies innerhalb der Formel verwaltet werden. Dazu wird eine Funktion hinzugefügt, die die Änderung identifiziert und die überwachte Zuordnungsgrafik der Komponenten aktualisiert, indem ein neuer Eintrag für eine neue Komponente hinzugefügt oder ein Eintrag einer entfernten Komponente gelöscht wird.
OnRegistration ist der Event-Handler, der ein Registrierungsevent verarbeitet, das durch eine Änderung in den überwachten Ressourcen ausgelöst wird. Solch eine Änderung kann das Ergebnis der Übernahme einer Ressource (oder einem Änderungssatz) sein, die entsprechend der Registrierungsmethode der Formel zu Änderungen in den Ressourcen führen kann, die in die Berechnung eingeschlossen sind.
Während jeder Registrierung ist es notwendig, die Zuordnungsgrafik zu aktualisieren, die den Ressourcenstatus mit allen erforderlichen Änderungen umfasst. Dies bedeutet, dass die Zuordnungsgrafik, die die Ressourcenstatus enthält, mit der Zuordnungsgrafik, die die Ressourcen zum Zeitpunkt der Registrierungsausführung (basierend auf der Registrierungsmethode) enthält, verglichen wird. Schließen Sie dazu alle Ressourcen ein, die hinzugefügt wurden, oder löschen Sie die Ressourcen, die entfernt wurden.
Das OnRegistration-Verfahren muss daher eine Funktion ausführen, die die überwachten Ressourcen mit den neu zugewiesenen Ressourcen vergleicht, um die überwachten Ressourcen dementsprechend zu strukturieren.
Das Kontextobjekt verfügt über einen Satz an Methoden, die mit den Registrierungsmethoden vergleichbar sind. Diese geben eine Zuordnungsgrafik mit all den Ressourcen aus, die entsprechend der Registrierungsmethode Teil der Ressourcen sind.
Im folgenden Beispiel ist die Registrierung der Formel "ByContractParty" und die gleiche Methode wird daher von "Context.ResourcesOfContractParty" verwendet. Dies gibt eine Zuordnungsgrafik mit all den Ressourcen aus, die zum Zeitpunkt der Registrierung Teil dieses Satzes sind.
Um die beiden Zuordnungsgrafiken zu vergleichen, müssen die Zuordnungsgrafiken parallel iteriert werden. Die Iteration der Zuordnungsgrafik erfolgt mithilfe der Erklärung "For Each". Diese Erklärung ermöglicht eine Iteration der Werte einer Zuordnungsgrafik und daher wird eine andere Zuordnungsgrafik als Spiegelbild der Statuszuordnungsgrafik benötigt, um die Ressourcen und nicht ihre Statuswerte zu iterieren. Diese Erklärung iteriert die Werte einer Zuordnungsgrafik und nicht deren Schlüssel. Aus diesem Grund wird eine weitere Zuordnungsgrafik benötigt, die die IDs sowohl als Schlüssel als auch als Wert enthält. Darüber hinaus muss die Spiegelzuordnungsgrafik gepflegt werden, damit sie die Statuszuordnungsgrafik laufend spiegelt und so immer denselben Satz an Ressourcen beinhaltet. Dies bedeutet, dass bei einer Aktualisierung der Statuszuordnungsgrafik auch die Spiegelzuordnungsgrafik aktualisiert werden muss.
Die folgende Abbildung zeigt das Konzept der Spiegelzuordnungsgrafiken.

Beispiel:
Dim ServerAvailabilityIndicators
Dim MonitoredServers
Set ServerAvailabilityIndicators=CreateObject("SlalomMap.Map")
Set MonitoredServers=CreateObject("SlalomMap.Map")
Sub OnRegistration(dispatcher)
dispatcher.RegisterByContractParty "OnAvailabilityEvent",_
"Availability Event", "SAP Production Server"
Dim AllocatedServers
Set AllocatedServers = Context.ResourcesOfContractParty("SAP Production Server")
UpdateMonitoredServers AllocatedServers
End Sub
Sub UpdateMonitoredServers(allocatedServers)
Dim Server
For Each Server In allocatedServers
If Not MonitoredServers.Exist(Server) Then
MonitoredServers(Server) = Server
ServerAvailabilityIndicators(Server)=True
End If
Next
For Each Server In MonitoredServers
If Not allocatedServers.Exist(Server) Then
MonitoredServers.Erase Server
ServerAvailabilityIndicators.Erase Server
End If
Next
End Sub
Beispiel:
Die folgende Funktion zeigt auf, wie die Spiegelzuordnungsgrafik zum Iterieren der Statuszuordnungsgrafik verwendet wird, wenn es erforderlich ist, den Status des ganzen Systems basierend auf dem Status von jeder überwachten Ressource zu beurteilen.
In diesem Beispiel wird das System als verfügbar angesehen, wenn alle Ressourcen verfügbar sind. Sobald nur eine einzige Komponente ausgeschaltet ist, wird das System als nicht verfügbar angesehen:
Function SystemAvailability
Dim Server
For Each Server In MonitoredServers
If ServerAvailabilityIndicators(Server) = DOWN then
SystemAvailability=DOWN
Exit Function
End if
Next
End Function
Ein komplettes Beispiel der Business-Logik mit dynamischer Ressourcenhandhabung wird im folgenden Designmusterbeispiel beschrieben.
|
Copyright © 2013 CA.
Alle Rechte vorbehalten.
|
|