Vous trouverez ci-dessous un exemple de fichier de règle, suivi d'une description de chaque balise du fichier.
<RULES>
<RULE>
<NAME>Le client a suffisamment de mémoire</NAME>
<DESCRIPTION>Vérifie si le client a suffisamment de mémoire pour exécuter l'application</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>L'application ne peut pas fonctionner avec moins de 100 Mo. </TEXT>
</MOREINFO>
</SEVERITY>
<SEVERITY level="WARNING">
<PARAM id='SIZE'>150</PARAM>
<MOREINFO>
<TEXT>Vous êtes proche du seuil minimal de mémoire</TEXT>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
Cet exemple montre une règle qui peut être utilisée pour vérifier si le client a suffisamment de mémoire pour exécuter l'application. <VIOLATION> est une expression XPATH que l'applet évalue en fonction d'un fichier XML qui contient toutes les données collectées. Comme la violation est une expression XPATH imbriquée dans un fichier XML, certains caractères de XPATH, tels que "<", ">" et "&", doivent être remplacés par des entités. Si l'expression XPATH renvoie un ensemble de noeuds non nuls, la règle a échoué. Dans ce cas, la règle échoue si la mémoire disponible du client est inférieure à une quantité donnée. Vous pouvez configurer la quantité réelle qui déclenche une violation en utilisant plusieurs degrés de gravité.
Dans cet exemple, l'applet remplace d'abord la sous-chaîne "$arg=SIZE$" de l'expression VIOLATION par "100", puis évalue l'expression. Si la mémoire disponible du client est inférieure à 100 Mo, la règle échoue avec le statut critique. L'applet indiquera ce statut avec le message "L'application ne peut pas fonctionner avec moins de 100 Mo de mémoire". Si la règle réussit, l'applet remplacera "$arg=SIZE$" par "150" et effectuera une nouvelle tentative ; si la règle échoue, l'applet affichera le message "Vous êtes proche du seuil minimal de mémoire.". Si l'applet effectue une tentative dans tous les degrés de gravité et ne détecte aucune violation, la règle réussit.
Dans l'exemple ci-dessus, les informations supplémentaires affichées avec chaque violation (indiquées dans les éléments <TEXT>) ne sont pas dynamiques. Toutefois, l'administrateur peut souhaiter indiquer à l'utilisateur la quantité de mémoire dont il dispose si une violation est détectée. Pour cela, il doit utiliser un élément <ARG> sous la balise <MOREINFO>. Imaginons que la règle ait été écrite comme suit :
<RULE>
<NAME>Le client a suffisamment de mémoire</NAME>
<DESCRIPTION>Vérifie si le client a suffisamment de mémoire pour exécuter l'application</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>L'application ne peut pas fonctionner avec moins de 100 Mo. Vous disposez uniquement de {0} Mo </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
Si une violation critique est détectée, l'applet évalue l'expression XPATH de l'élément <ARG> et l'insère dans le texte <MOREINFO> au niveau de la chaîne "\{0\}". Vous obtenez un message du type "L'application ne peut pas fonctionner avec moins de 100 Mo. Espace disponible : 45 Mo uniquement." La valeur d'un élément <ARG> doit constituer une expression XPATH valide. Vous pouvez spécifier plusieurs arguments ; l'applet évalue la première expression et la remplace par "\{0\}", remplace la deuxième par "\{1\}" et ainsi de suite. Si l'une des expressions XPATH renvoie plusieurs noeuds, l'applet dresse une liste de noeuds séparés par des virgules.
Afin d'utiliser la même règle pour plusieurs paramètres locaux client, l'administrateur peut utiliser des groupes de ressources pour activer la traduction des éléments <NAME>, <DESCRIPTION> et <TEXT>. Les groupes de ressources sont spécifiés à l'aide d'un élément <BUNDLE>, comme dans l'exemple ci-dessous :
<RULES>
BUNDLE id="bundle1">acme.bundles.RuleBundle</BUNDLE
BUNDLE id="bundle2">ruleBundle.xml</BUNDLE
RULE>
<NAME resource=”name@bundle1”>Le client a suffisamment de mémoire</NAME
DESCRIPTION resource="description@bundle2">Cette règle vérifie si le client dispose de suffisamment de mémoire pour exécuter l'application</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 ?>Vous ne disposez que de {0} Mo de mémoire. </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
Un groupe de ressources peut être un fichier de classe Java dans le fichier JAR de l'applet, un fichier de classe Java ou un fichier XML sur le serveur. Toutes les classes de groupe de ressources Java doivent avoir l'extension Java.util.ResourceBundle et tous les groupes de ressources XML doivent avoir le format suivant :
<BUNDLE>
<STRING id='Hello'>Hola</STRING>
<STRING id='moreinfo'>Solo tienes {0} MB de memoria</STRING>
</BUNDLE>
L'applet détecte d'abord le code à deux lettres des paramètres locaux actifs, par exemple "es". Lorsque l'applet analyse la balise BUNDLE, elle considère d'abord que la valeur de la balise est un nom de classe Java. Elle modifie le nom de la classe en fonction du code des paramètres locaux et tente ensuite de charger cette classe à partir du fichier JAR de l'applet. Par conséquent, pour la première balise BUNDLE de l'exemple ci-dessus, si les paramètres locaux sont "es", l'applet tente de charger le fichier acme.bundles.RuleBundle_es. Si cette classe n'existe pas, l'applet tente de la télécharger à partir du serveur, considérant le répertoire de stockage de la page de déploiement comme le répertoire racine de classpath. Par conséquent, dans le cas du premier groupe, si l'utilisateur obtient l'applet CSA à partir de http://www.company.com/csa/CSA , l'applet tente de charger http://www.company.com/csa/acme/bundles/RuleBundle_es.class . Si cette étape échoue, l'applet traite la valeur de la balise BUNDLE comme le nom d'un fichier XML sur le serveur ; par conséquent, dans le cas du deuxième élément <BUNDLE>, l'applet tente de télécharger http://www.company.com/csa/ruleBundle_es.xml.
Si l'applet détecte une balise NAME, DESCRIPTION ou TEXT dans une règle qui dispose d'un attribut de ressource, elle tente dans un premier temps de trouver et d'afficher la ressource en question. Si le groupe spécifié n'est pas disponible pour les paramètres locaux actifs ou si l'ID indiqué n'existe pas dans le groupe, l'applet affiche la valeur de la balise. Par exemple, supposons qu'avec le fichier de règle indiqué ci-dessus, les paramètres locaux sont Espagnol (es), mais qu'aucune ressource n'existe dans le fichier ruleBundle_es.xml avec l'ID "description". Si le client dispose uniquement de 45 Mo d'espace disponible, l'applet affiche
El cliente tiene bastante memoria. Cette règle vérifie si le client dispose de suffisamment de mémoire pour exécuter l'application.
- X Solo tienes 45 MB de memoria
Enfin, dans certains cas, la règle ne doit pas être évaluée. Par exemple, une règle conçue pour vérifier si les paramètres du navigateur Web Netscape de l'utilisateur sont configurés correctement ne doit pas être évaluée si l'utilisateur accède à l'application avec Internet Explorer. C'est la raison pour laquelle l'administrateur peut spécifier plusieurs conditions préalables pour chaque règle, comme dans l'exemple ci-dessous :
<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>Le client a suffisamment de mémoire</NAME>
<DESCRIPTION >Cette règle vérifie si le client dispose de suffisamment de mémoire pour exécuter l'application</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>L'application ne peut pas fonctionner avec moins de 100 Mo. Vous disposez uniquement de {0} Mo </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
Pour chaque condition préalable, l'applet évalue l'expression XPATH spécifiée. Si l'expression renvoie un ensemble de résultats non NULL, la condition préalable est remplie (sémantique opposée à celle de l'expression XPATH dans l'élément <VIOLATION>). Une règle disposant d'une condition préalable sera uniquement évaluée si toutes les conditions préalables répertoriées sont remplies.
Un dernier exemple, répertoriant tous les éléments disponibles d'un fichier de règle, est affiché ci-dessous, avec un tableau récapitulatif de chaque élément.
<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”>Le client a suffisamment de mémoire</NAME
DESCRIPTION resource="description@bundle2">Cette règle vérifie si le client dispose de suffisamment de mémoire pour exécuter l'application</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 ?>Vous ne disposez que de {0} Mo de mémoire. </TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
| Nom de la balise | Description |
|---|---|
| RULES | Il s'agit de la balise de niveau supérieur du fichier XML. |
| BUNDLE |
Cette balise indique les groupes de ressources utilisés pour la traduction. Sa valeur est le nom d'un fichier ou le nom d'une classe Java. Le moteur de règle lit cette chaîne et commence par tenter de trouver un fichier portant ce nom dans le fichier JAR de l'applet. Ce fichier est supposé contenir des correspondances entre ID de ressource et des chaînes dans différentes langues. Si ce fichier n'existe pas, la chaîne est traitée comme étant le nom d'une classe de groupe de ressources Java. Les chaînes d'un groupe de ressources sont référencées à l'aide de la syntaxe <ID de ressource>@<ID de groupe>. |
| PRECONDITION | Cette balise sert à indiquer une expression XPATH, qui doit renvoyer un ensemble de noeuds non-NULL pour qu'une règle soit évaluée. L'attribut "id" indique l'ID de cette condition préalable. Une règle peut indiquer une liste de conditions préalables à évaluer, en répertoriant leurs ID. |
| RULE | Cette balise représente un noeud individuel à évaluer. La gravité de la règle est indiquée par la balise <SEVERITY> (voir ci-après). Pour chaque règle, vous devez indiquer au moins une balise de gravité (SEVERITY). La balise dispose d'un attribut "precondition" facultatif, qui permet de fournir une liste d'ID de condition préalable, séparés par des virgules. Toutes les conditions préalables doivent être remplies avant l'évaluation de la règle. Sinon, la règle adopte le statut "Non applicable" et n'apparaît pas du tout dans l'interface graphique du client. Les enfants d'une balise RULE sont les suivants : NAME, DESCRIPTION, VIOLATION, SEVERITY et MOREINFO. |
| NAME |
Cette balise indique le nom de la règle et identifie la balise dans le référentiel. Remarque : cette balise doit contenir une valeur et ne peut pas être vide. |
| DESCRIPTION | Il s'agit de la description de la règle. |
| VIOLATION |
Cette balise répertorie les violations à rechercher pour une règle donnée. La violation est indiquée en langage de condition CSA. |
| SEVERITY | Une règle peut être associée à trois niveaux de gravité : INFO, WARNING et CRITICAL. Le noeud SEVERITY doit contenir un nombre d'enfants ARG égal au nombre d'arguments que peut accepter l'expression figurant dans le noeud VIOLATION. Lorsque le moteur de règle évalue une règle, il évalue la condition dans VIOLATION pour chaque ensemble d'arguments indiqué dans les niveaux de gravité, en commençant par CRITICAL et en descendant l'échelle de gravité. Dès que le moteur rencontre une condition qui échoue, la règle est déclarée comme "Echec", avec un niveau de gravité égal à celui de l'argument ayant généré l'échec. Si les conditions sont remplies pour tous les niveaux indiqués, la règle est acceptée. Les enfants du noeud SEVERITY sont PARAM et MOREINFO. |
| PARAM | Cette balise indique la valeur d'un argument qui doit être remplacé au sein une expression. L'attribut "id" de la balise doit correspondre au nom de l'un des arguments de l'expression. |
| MOREINFO |
Cette balise fournit les informations qui seront affichées si l'utilisateur clique sur le bouton Informations supplémentaires, en regard d'une règle en échec. Les enfants de MOREINFO sont TEXT et ARG. Remarque : le noeud MOREINFO peut être un enfant du noeud de gravité (si plusieurs niveaux de gravité sont indiqués) ou de la règle elle-même. |
| TEXT | Cette balise indique le texte à afficher lorsque l'utilisateur clique sur le bouton Infos supplémentaires. L'attribut "resource" mentionne une chaîne dans un groupe de ressources (si cette chaîne est absente, la valeur du noeud apparaît à sa place). Le texte (que ce soit dans le groupe de ressources ou dans le noeud lui-même) peut indiquer l'emplacement des arguments à insérer, à l'aide de "{0}", "{1}", etc. Dans ce cas, les expressions des noeuds ARG sont évaluées et insérées dans le texte, dans l'ordre où elles ont été spécifiées. Si le nombre de noeuds ARG indiqués est supérieur au nombre d'emplacements dans la chaîne, les noeuds superflus sont ignorés. |
| ARG |
Cette balise indique une expression en langage de condition CSA, qui peut être évaluée et insérée dans le texte MOREINFO. |
Enterprise Manager - Guide d'informations
Enterprise Manager - Guide d'informations
Copyright © 1996, 2007, Oracle. Tous droits réservés.