Nachfolgend wird eine Beispiel-Regeldatei dargestellt, gefolgt von einer Beschreibung jedes Tags in der Datei.
<RULES>
<RULE>
<NAME>Client has sufficient memory</NAME>
DESCRIPTION>Prüft, ob der Client über ausreichend Speicher zur Ausführung der Anwendung verfügt</DESCRIPTION
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
TEXT>Application cannot run with less than 100 MB. </TEXT>
</MOREINFO>
</SEVERITY>
<SEVERITY level="WARNING">
<PARAM id='SIZE'>150</PARAM>
<MOREINFO>
<TEXT>Approaching minimum memory level</TEXT>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES
In diesem Beispiel wird eine Regel dargestellt, mit der geprüft wird, ob der Client über ausreichend Speicher zur Ausführung der Anwendung verfügt. <VIOLATION> ist ein XPATH-Ausdruck, den das Applet für eine XML-Datei auswertet, die alle Daten enthält, die erfasst wurden. Da die Verletzung ein XPATH-Ausdruck ist, der in einer XML-Datei eingebettet ist, müssen bestimmte Zeichen in dem XPATH, wie z.B. ‘<', ‘>', und ‘&', durch Entitys ersetzt werden. Wenn der XPATH-Ausdruck einen Non-Null Node Set zurückgibt, war die Regel nicht erfolgreich. In diesem Fall ist die Regel nicht erfolgreich, wenn der verfügbare Speicher des Clients kleiner ist als ein bestimmter Wert. Der tatsächliche Wert, der eine Verletzung auslöst, kann mit verschiedenen Dringlichkeitsgraden konfiguriert werden.
In diesem Beispiel ersetzt das Applet zuerst die Unterzeichenfolge “$arg=SIZE$” in dem VIOLATION-Ausdruck durch “100” und wertet dann den Ausdruck aus. Wenn der verfügbare Speicher des Clients kleiner ist als 100 MB, verläuft die Regel mit kritischem Status nicht erfolgreich. Das Applet gibt den Status zusammen mit der Meldung “Application cannot run with less than 100 MB of memory” an. Wenn die Regel erfolgreich verläuft, ersetzt das Applet “$arg=SIZE$” durch 150 und wiederholt den Versuch. Wenn die Regel nicht erfolgreich verläuft, zeigt das Applet die Meldung “Approaching minimum memory level” an. Wenn das Applet durch alle angegebenen Dringlichkeitsgrade geht und keine Verletzung findet, ist sie erfolgreich.
In dem obigen Beispiel sind die zusätzlichen Informationen, die mit jeder Verletzung angezeigt werden (wie in den <TEXT>-Elementen angegeben) nicht dynamisch. Der Administrator kann dem Benutzer jedoch mitteilen, wieviel Speicher er hat, wenn eine Verletzung ermittelt wird. Dies erfolgt mit einem <ARG>-Element unter dem Tag <MOREINFO>. Angenommen die Regel wurde folgendermßaen geschrieben:
<RULE>
<NAME>Client has sufficient memory</NAME>
DESCRIPTION>Prüft, ob der Client über ausreichend Speicher zur Ausführung der Anwendung verfügt</DESCRIPTION
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT>Anwendung kann nicht mit weniger als 100 MB ausgeführt werden. Sie haben nur {0} MB verfügbar </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
Wenn eine kritische Verletzung erkannt wird, wertet das Applet den XPATH-Ausdruck in dem Element <ARG> aus und fügt ihn in den Text <MOREINFO> an der Stelle der Zeichenfolge “{0}” ein, was zu einer Meldung wie “Application cannot run with less than 100 MB. You have only 45 MB available” führt. Der Wert eines Elements <ARG> muss ein gültiger XPATH-Ausdruck sein. Mehrere Argumente können angegeben werden. Das Applet wertet den ersten Ausdruck aus und ersetzt ihn durch “{0}”, ersetzt den zweiten Ausdruck durch “{1}” usw. Wenn einer der XPATH-Ausdrücke mehrere Knoten zurückgibt, erzeugt das Applet eine durch Komma getrennte Liste der Knoten.
Um diselbe Regel für mehrere Client-Lokalen zu verwenden, kann der Administrator Resource Bundles verwenden, um die Übersetzung von <NAME>, <DESCRIPTION> und <TEXT>-Elementen zu aktivieren. Resource Bundles werden mit einem Element <BUNDLE> angegeben, wie unten dargestellt:
<RULES>
<BUNDLE id=”bundle1”>acme.bundles.RuleBundle</BUNDLE>
<BUNDLE id=”bundle2”>ruleBundle.xml</BUNDLE>
<RULE>
<NAME resource=”name@bundle1”>Client verfügt über ausreichend Speicher</NAME>
DESCRIPTION resource=”description@bundle2”>Diese Regel prüft, ob der Client über ausreichend Speicherplatz zur Ausführung der Anwendung verfügt</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT resource=” moreinfo@bundle2 ”>Sie haben nur {0} MB Speicherplatz. </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
Ein Resource Bundle kann eine Java Class-Datei in der JAR-Datei des Applets, eine Java Class-Datei auf dem Server oder eine XML-Datei auf dem Server sein. Alle Java Resource Bundle-Klassen müssen Java.util.ResourceBundle erweitern, während alle XML Resource Bundles das nachfolgend dargestellte Format haben müssen:
<BUNDLE>
<STRING id='Hello'>Hola</STRING>
<STRING id='moreinfo'>Solo tienes {0} MB de memoria</STRING>
</BUNDLE>
Das Applet sucht zuerst den aus zwei Buchstaben bestehenden Code für die aktuelle Lokale, wie z.B. “es”. Wenn das Applet das Tag BUNDLE parst, geht es zuerst davon aus, dass der Wert des Tags ein Java Class-Name ist. Das Applet ändert den Klassennamen in den aktuellen Lokalen-Code und versucht dann, diese Klasse aus der JAR-Datei des Applets zu laden. Wenn die Lokale bei dem ersten BUNDLE in dem obigen Beispiel “es” war, würde das Applet versuchen, acme.bundles.RuleBundle_es zu laden. Wenn diese Klasse nicht vorhanden ist, versucht das Applet, sie aus dem Server zu laden, wobei das Verzeichnis, in dem die Deployment-Seite gespeichert ist, als Root-Verzeichnis des Classpath behandelt wird. Wenn der Benutzer also bei dem ersten Bundle das CSA Applet aus http://www.company.com/csa/CSA abruft, versucht das Applet, http://www.company.com/csa/acme/bundles/RuleBundle_es.class zu laden. Wenn dieser Schritt nicht erfolgreich verläuft, behandelt das Applet den Wert des Tags BUNDLE als den Namen einer XML-Datei auf dem Server. Bei dem zweiten <BUNDLE>-Element versucht das Applet http://www.company.com/csa/ruleBundle_es.xml herunterzuladen.
Wenn das Applet ein Tag NAME, DESCRIPTION oder TEXT in einer Regel findet, für die ein Ressourcenattribut angegeben ist, versucht es zuerst, die angegebene Ressource zu suchen und anzuzeigen. Wenn das angegebene Bundle in der aktuellen Lokale nicht verfügbar ist oder wenn die angegebene ID nicht in dem Bundle vorhanden ist, zeigt das Applet den Wert des Tags selbst an. Angenommen bei der oben angegebenen Regeldatei ist die Lokale Spanisch (es) , in der Datei ruleBundle_es.xml ist jedoch keine Ressource mit der ID “description” vorhanden. Wenn der Client nur einen Speicherplatz von 45 MB hat, würde das Applet Folgendes anzeigen
El cliente tiene bastante memoria – Diese Regel prüft, ob der Client über genügend Speicherplatz zu Ausführung der Anwendung hat.
- X Solo tienes 45 MB de memoria
Schließlich gibt es noch Fälle, in denen eine bestimmte Regel nicht ausgewertet werden sollte. Eine Regel, die prüfen soll, ob der Benutzer die richtigen Netscape Browser-Einstellungen hat, muss nicht ausgewertet werden, wenn der Benutzer mit Internet Explorer auf die Anwendung zugreift. Deshalb kann der Administrator eine oder mehrere Vorbedingungen für jede Regel angeben, wie unten dargestellt:
<RULES>
<PRECONDITION id=”a”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_TYPE[text() = ‘Netscape']</PRECONDITION>
<PRECONDITION id=”b”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_VERSION[number() > 4]</PRECONDITION>
<RULE precondition=”a,b”>
<NAME>Client verfügt über ausreichend Speicher</NAME>
<DESCRIPTION >Diese Regel prüft, ob der Client über ausreichend Speicherplatz zur Ausführung der Anwendung verfügt</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT>Anwendung kann nicht mit weniger als 100 MB ausgeführt werden. Sie haben nur {0} MB verfügbar </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
Für jede Vorbedingung wertet das Applet den angegebenen XPATH-Ausdruck aus. Wenn der Ausdruck eine Nicht-Null -Ergebnismenge zurückgibt, ist die Vorbedingung erfüllt. (Beachten Sie, dass diese Semantik das Gegenteil der Semantik für den XPATH-Ausdruck in dem <VIOLATION>-Element ist). Eine Regel mit einer Vorbedingungsliste wird nur ausgewertet, wenn alle aufgeführten Vorbedingungen erfüllt sind.
Als letztes Beispiel wird die Auflistung aller verfügbaren Elemente einer Regeldatei nachfolgend angezeigt, zusammen mit einer Tabelle, die jedes Element zusammenfasst.
<RULES>
<PRECONDITION id=”a”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_TYPE[text() = ‘Netscape']</PRECONDITION>
<PRECONDITION id=”b”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_VERSION[number() > 4]</PRECONDITION>
<BUNDLE id=”bundle1”>acme.bundles.RuleBundle</BUNDLE>
<BUNDLE id=”bundle2”>ruleBundle.xml</BUNDLE>
<RULE>
<NAME resource=”name@bundle1”>Client verfügt über ausreichend Speicher</NAME>
DESCRIPTION resource=”description@bundle2”>Diese Regel prüft, ob der Client über ausreichend Speicherplatz zur Ausführung der Anwendung verfügt</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT resource=” moreinfo@bundle2 ”>Sie haben nur {0} MB Speicherplatz. </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
| Tag-Name | Beschreibung |
|---|---|
| RULES | Dies ist das Tag der obersten Ebene für die XML-Datei |
| BUNDLE |
Dieses Tag gibt die Resource Bundles an, die für die Übersetzung verwendet werden. Der Wert des Tags ist entweder der Name einer Datei oder ein Java Class-Name. Die Rule Engine liest diese Zeichenfolge und versucht zuerst, eine Datei in der Applet JAR zu finden, die diesen Namen hat. Es wird davon ausgegangen, dass diese Datei eine Zuordnung von Ressourcen-IDs an Zeichenfolgen in verschiedenen Sprachen enthält. Wenn eine derartige Datei nicht vorhanden ist, wird die Zeichenfolge als Name einer Java Resource Bundle Class behandelt. Zeichenfolgen in einem Resource Bundle werden mit der Syntax <resource id>@<bundle id> referenziert. |
| PRECONDITION | Mit diesem Tag wird ein XPATH-Ausdruck angegeben, der einen Non-Null Node Set zurückgeben muss, damit eine Regel ausgewertet wird. Das Attribut “id” gibt die ID der Vorbedingung an. Eine Regel kann eine Liste mit Vorbedingungen angeben, die ausgewertet werden müssen, indem deren IDs aufgeführt werden. |
| RULE | Dieses Tag stellt einen einzelnen Knoten dar, der ausgewertet werden muss. Die Dringlichkeit der Regel wird mit einem Tag <SEVERITY> angegeben (siehe unten). Mindestens ein Severity Tag muss für eine Regel angegeben werden. Das Tag verfügt über ein optionales “precondition”-Attribut, mit dem eine Liste der Vorbedingungs-IDs durch Komma getrennt angegeben wird. Bevor die Regel ausgewertet wird, müssen alle Vorbedingungen erfüllt sein. Wenn die Vorbedingungen nicht erfüllt werden, hat die Regel den Status “Nicht anwendbar” und wird überhaupt nicht in der Client UI angezeigt. Die untergeordneten Elemente eines RULE Tags sind NAME, DESCRIPTION, VIOLATION, SEVERITY und MOREINFO. |
| NAME |
Dieses Tag gibt den Namen der Regel an und identifiziert das Tag in dem Repository. Hinweis: Dieses Tag muss einen Wert enthalten und darf nicht leer sein. |
| DESCRIPTION | Dies ist die Beschreibung der Regel. |
| VIOLATION |
Dieses Tag führt die Verletzungen auf, die für eine bestimmte Regel geprüft werden müssen. Die Verletzung wird in der CSA Condition Language angegeben. |
| SEVERITY | Eine Regel kann drei Dringlichkeitsgrade haben: INFO, WARNING und CRITICAL. Der SEVERITY-Knoten muss eine Anzahl von untergeordneten ARG-Elementen aufweisen, die gleich der Anzahl von Argumenten ist, die von dem Ausdruck in dem VIOLATION-Knoten akzeptiert werden kann. Wenn die Rule Engine eine Regel auswertet, wertet sie die Bedingung in VIOLATION für jede Gruppe mit Argumenten aus, die in den Dringlichkeitsgraden angegeben werden, beginnend mit CRITICAL und in der Reihenfolge der Dringlichkeit nach unten weitergehend. Sobald die Engine auf eine Bedingung stößt, die nicht erfolgreich erfüllt wird, wird die Regel als fehlerhaft deklariert, mit einem Dringlichkeitsgrad, der dem Dringlichkeitsgrad des Arguments entspricht, das den Fehler verursacht hat. Wenn die Bedingungen für alle angegebenen Grade erfüllt werden, verläuft die Regel erfolgreich. Die untergeordneten Elemente des SEVERITY-Knotens sind PARAM und MOREINFO |
| PARAM | Dieses Tag gibt den Wert eines Arguments an, das durch einen Ausdruck ersetzt werden soll. Das ‘id' Attribut des Tags muss mit dem Namen von einem der Argumente in dem Ausdruck übereinstimmen. |
| MOREINFO |
Dieses Tag gibt die Informationen an, die angezeigt werden, wenn der Benutzer auf die Schaltfläche “more information” klickt, die neben einer nicht erfolgreichen Regel angezeigt wird. Die untergeordneten Elemente von MOREINFO sind TEXT und ARG. Hinweis: Der Knoten MOREINFO kann ein untergeordneter Knoten des Severity-Knotens (wenn mehrere Dringlichkeiten angegeben werden) oder der Regel selbst sein. |
| TEXT | Dieses Tag gibt den Text an, der angezeigt werden muss, wenn auf die Schaltfläche “More Info” geklickt wird. Das “resource”-Attribut gibt eine Zeichenfolge in einem Resource Bundle an – wenn diese Zeichenfolge nicht vorhanden ist, wird stattdessen der Wert des Knotens angezeigt. Der Text (entweder in dem Resource Bundle oder in dem Knoten selbst) kann einen Speicherort für einzufügende Argumente mit “{0}”, “{1}” usw. angeben. In diesem Fall werden die Ausdrücke in den ARG-Knoten ausgewertet und in den Text in der Reihenfolge eingefügt, in der sie angegeben werden. Wenn mehr ARG-Knoten angegeben werden, als Slots in der Zeichenfolge vorhanden sind, werden die zusätzlichen Knoten ignoriert. |
| ARG |
Dieses Tag gibt einen Ausdruck in der CSA Condition Language an, der ausgewertet und in den Text MOREINFO eingefügt wird. |
Wegweiser zu Enterprise Manager-Informationen
Wegweiser zu Enterprise Manager-Informationen
Copyright © 1996, 2007, Oracle. All rights reserved. Alle Rechte vorbehalten.