Página Reglas

A continuación se muestra un archivo de reglas de ejemplo seguido de una descripción de las etiquetas que contiene el archivo.

<RULES>
<RULE>
<NAME>El cliente tiene memoria suficiente</NAME>

<DESCRIPTION>Comprueba si el cliente tiene memoria suficiente para ejecutar la aplicación</DESCRIPTION>

<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() &lt; $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>

<TEXT>La aplicación no se puede ejecutar con menos de 100 MB. </TEXT>
</MOREINFO>
</SEVERITY>
<SEVERITY level="WARNING">
<PARAM id='SIZE'>150</PARAM>
<MOREINFO>
<TEXT>Se está alcanzando el nivel mínimo de memoria</TEXT>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>

Este ejemplo demuestra una regla que se puede utilizar para comprobar si el cliente tiene memoria suficiente para ejecutar la aplicación. <VIOLATION> es una expresión XPATH que el applet evaluará con un archivo XML que contiene todos los datos que ha recopilado. Tenga en cuenta que, ya que la violación es una expresión XPATH embebida en un archivo XML, se deben sustituir determinados caracteres en la XPATH, tales como ‘<', ‘>', y ‘&', por entidades. Si la expresión XPATH devuelve un juego de nodos que no sea nulo, la regla ha fallado. En este caso, la regla fallará si la memoria disponible del cliente es inferior a una cantidad determinada. Se puede configurar la cantidad real que dispara una violación mediante diferentes niveles de gravedad.

En este ejemplo, el applet sustituirá primero la subcadena “$arg=SIZE$” en la expresión VIOLATION por “100” y a continuación evaluará la expresión. Si la memoria disponible del cliente es inferior a 100 MB, se producirá un fallo en la regla con estado crítico. El applet indicará el estado junto con el mensaje “La aplicación no se puede ejecutar con menos de 100 MB de memoria”. Si se aprueba la regla, el applet sustituirá “$arg=SIZE$” por 150 y lo intentará de nuevo; si la regla falla, el applet mostrará el mensaje “Se está alcanzando el nivel mínimo de memoria”. Si el applet pasa por todos los niveles de gravedad especificados y no encuentra una violación, la regla es correcta.

En el ejemplo anterior, la información adicional que se muestra con cada violación (tal y como se especifica en los elementos <TEXT> ) no es dinámica. Sin embargo, es posible que el administrador desee indicar al usuario la cantidad de memoria de la que dispone si se detecta una violación. Esto se puede conseguir mediante la utilización de un elemento <ARG> en la etiqueta <MOREINFO>. Por ejemplo, si la regla estaba escrita del siguiente modo:

<RULE>
<NAME>El cliente tiene memoria suficiente</NAME>

<DESCRIPTION>Comprueba si el cliente tiene memoria suficiente para ejecutar la aplicación</DESCRIPTION>

<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() &lt; $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>

<TEXT>La aplicación no se puede ejecutar con menos de 100 MB de memoria. Sólo tiene {0} MB disponibles </TEXT>

<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>

Si se detecta una violación crítica, el applet evaluará la expresión XPATH en el elemento <ARG> y la insertará en el texto <MOREINFO> en la posición de la cadena “{0}”, que da como resultado un mensaje como “La aplicación no se puede ejecutar con menos de 100 MB. Sólo tiene 45 MB disponibles”. El valor de un elemento <ARG> debe ser una expresión XPATH válida. Se pueden especificar varios argumentos; el applet evaluará la primera expresión y la sustituirá por “{0}”, sustituirá la segunda expresión por “{1}”, etc. Si alguna de las expresiones XPATH devuelve varios nodos, el applet construirá una lista separada por comas de los nodos.

Para utilizar la misma regla para varios códigos locales de cliente, el administrador puede usar grupos de recursos para activar la traducción de los elementos <NAME>, <DESCRIPTION> y <TEXT>. Los grupos de recursos se especifican mediante un elemento <BUNDLE>, tal y como se muestra a continuación:

<RULES>

<BUNDLE id=”bundle1”>acme.bundles.RuleBundle</BUNDLE>

<BUNDLE id=”bundle2”>ruleBundle.xml</BUNDLE>

<RULE>
<NAME resource=”name@bundle1”>Client has sufficient memory</NAME>

<DESCRIPTION resource=”description@bundle2”>Esta regla comprueba si el cliente tiene memoria suficiente para ejecutar la aplicación</DESCRIPTION>

<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() &lt; $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>

<TEXT resource=” moreinfo@bundle2 ”>Sólo tiene {0} MB de memoria. </TEXT>

<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>

</RULES>

Un grupo de recursos puede ser un archivo de clase Java en el archivo JAR del applet, un archivo de clase Java del servidor o un archivo XML del servidor. Todas las clases de grupos de recursos Java deben ampliar Java.util.ResourceBundle, mientras que todos los grupos de recursos XML deben tener el formato que se muestra a continuación:

<BUNDLE>

<STRING id='Hello'>Hola</STRING>

<STRING id='moreinfo'>Sólo tiene {0} MB de memoria</STRING>

</BUNDLE>

El applet primero busca el código de dos letras para su código local actual, como por ejemplo “es”. Cuando el applet analiza la etiqueta BUNDLE, primero asume que el valor de la etiqueta es un nombre de clase Java. El applet modificará el nombre de clase con el código local y, a continuación, intentará cargar esta clase desde el archivo JAR del applet. Por lo tanto, para el primer BUNDLE del ejemplo anterior, si el código local era “es”, el applet intentaría cargar acme.bundles.RuleBundle_es. Si no existe tal clase, el applet intenta cargarla desde el servidor, tratando el directorio en el que se encuentra la página de despliegue como el directorio raíz de la classpath. Por lo tanto, en el caso del primer grupo, si el usuario obtiene el applet de CSA desde http://www.company.com/csa/CSA , el applet intentará cargar http://www.company.com/csa/acme/bundles/RuleBundle_es.class . Si se produce un fallo en este paso, el applet tratará el valor de la etiqueta BUNDLE como el nombre de un archivo XML del servidor. Por lo tanto, en el caso del segundo elemento <BUNDLE>, el applet intentará descargar http://www.company.com/csa/ruleBundle_es.xml .

Si el applet encuentra una etiqueta NAME, DESCRIPTION o TEXT en una regla que tiene un atributo de recurso especificado, primero intentará localizar y mostrar el recurso especificado. Si el grupo especificado no está disponible para el código local actual o si el identificador especificado no existe en el grupo, el applet mostrará el valor de la etiqueta. Por ejemplo si, con la regla anteriormente especificada, el código local fuera Español (es) pero no existiera el recurso en el archivo ruleBundle_es.xml con el identificador “description”. Si el cliente sólo tuviera 45 MB disponibles, el applet mostraría los siguiente:

El cliente tiene bastante memoria: Esta regla comprueba si el cliente tiene memoria suficiente para ejecutar la aplicación.

- X Sólo tiene 45 MB de memoria

Por último, podría haber circunstancias en las que una determinada regla no se debería evaluar. Por ejemplo, no es necesario evaluar una regla diseñada para comprobar si el usuario tiene la configuración correcta del explorador Netscape si el usuario accede a la aplicación con Internet Explorer. Por esta razón, el administrador puede especificar una o más condiciones previas para cada regla, tal como se muestra a continuación:

<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() &gt; 4]</PRECONDITION>

<RULE precondition=”a,b”>
<NAME> El cliente tiene memoria suficiente</NAME>

<DESCRIPTION >Esta regla comprueba si el cliente tiene memoria suficiente para ejecutar la aplicación</DESCRIPTION>

<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() &lt; $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>

<TEXT>La aplicación no se puede ejecutar con menos de 100 MB de memoria. Sólo tiene {0} MB disponibles </TEXT>

<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>

</RULES>

Para cada condición previa, el applet evaluará la expresión XPATH especificada. Si la expresión devuelve un juego de resultados no nulo , se cumple la condición previa (tenga en cuenta que esta semántica es la opuesta a la de la expresión XPATH del elemento <VIOLATION>). Una regla que tenga una lista de condiciones previas sólo se evaluará si se cumplen todas las condiciones previas de la lista.

A continuación, se muestra un ejemplo final que presenta una lista de todos los elementos disponibles de un archivo de regla, junto con una tabla que resume cada elemento.


<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() &gt; 4]</PRECONDITION>

<BUNDLE id=”bundle1”>acme.bundles.RuleBundle</BUNDLE>

<BUNDLE id=”bundle2”>ruleBundle.xml</BUNDLE>

<RULE>
<NAME resource=”name@bundle1”>Client has sufficient memory</NAME>

<DESCRIPTION resource=”description@bundle2”>Esta regla comprueba si el cliente tiene memoria suficiente para ejecutar la aplicación</DESCRIPTION>

<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() &lt; $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>

<TEXT resource=” moreinfo@bundle2 ”>Sólo tiene {0} MB de memoria. </TEXT>

<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>

</RULES>

Nombre de la Etiqueta Descripción
RULES Ésta es la etiqueta de nivel superior del archivo XML.
BUNDLE

Esta etiqueta especifica los grupos de recursos utilizados para la traducción. El valor de esta etiqueta es el nombre de un archivo o bien el nombre de una clase Java. El sistema de reglas lee esta cadena e intenta, en primer lugar, encontrar un archivo en el archivo JAR del applet con este nombre. Se supone que dicho archivo contiene una asignación de los identificadores de recursos y las cadenas en diversos lenguajes. Si no existe ese archivo, se trata la cadena como si fuera el nombre de una clase de grupos de recursos Java. A las cadenas de un grupo de recursos se hace referencia utilizando la sintaxis <identificador de recurso>@<identificador de grupo>.

PRECONDITION Esta etiqueta se utiliza para especificar una expresión XPATH que debe devolver un juego de nodos que no sean nulos para que se evalúe la regla. El atributo “id” especifica el identificador de la condición previa. Una regla puede especificar una lista de condiciones previas que se deben evaluar mostrando sus identificadores.
RULE Esta etiqueta representa un nodo individual que se debe evaluar. La gravedad de la regla se especifica con una etiqueta <SEVERITY> (consulte la descripción más adelante). Se debe especificar al menos una etiqueta de gravedad en cada regla. Esta etiqueta tiene un atributo “precondition” opcional, que se utiliza para especificar una lista de identificadores de condición previa separados por comas. Para que se evalúe la regla, se deben cumplir todas las condiciones previas. En caso contrario, la regla adoptará el estado “No Aplicable” y no se mostrará en la interfaz de usuario del cliente. Los secundarios de una etiqueta RULE son NAME, DESCRIPTION, VIOLATION, SEVERITY y MOREINFO.
NAME

Esta etiqueta especifica el nombre de la regla e identifica la etiqueta en el repositorio.

Nota: Esta etiqueta debe contener un valor; no se puede dejar en blanco.

DESCRIPTION Ésta es la descripción de la regla.
VIOLATION

Esta etiqueta muestra las violaciones que se tienen que comprobar para la regla concreta. La violación se especifica en el lenguaje de condiciones de CSA.

SEVERITY Una regla puede tener tres niveles de gravedad: INFO, WARNING y CRITICAL. El nodo SEVERITY debe contener un número de secundarios ARG igual al número de argumentos que puede aceptar la expresión del nodo VIOLATION. Cuando el sistema de reglas evalúa una regla, evalúa la condición de VIOLATION en cada uno de los juegos de argumentos especificados en los niveles de gravedad empezando por CRITICAL y siguiendo en orden descendente de gravedad. En cuanto el sistema encuentra una condición que falla, se declara el error de la regla con un nivel de gravedad igual al del argumento que causa el fallo. Si se cumplen las condiciones de todos los niveles especificados, se aprueba la regla. Los secundarios del nodo SEVERITY son PARAM y MOREINFO.
PARAM Esta etiqueta especifica el valor de un argumento que se tiene que sustituir en una expresión. El atributo ‘id’ de la etiqueta debe coincidir con el nombre de uno de los argumentos de la expresión.
MOREINFO

Esta etiqueta especifica la información que se muestra si el usuario hace clic en el botón “Más Información” que aparece junto a una regla fallida. Los secundarios de MOREINFO son TEXT y ARG.

Nota: El nodo MOREINFO puede ser un secundario del nodo de gravedad (en caso de que se especifiquen varios niveles de gravedad) o de la propia regla.

TEXT Esta etiqueta especifica el texto que se muestra al hacer clic en el botón “Más Información”. El atributo “resource” especifica una cadena de un grupo de recursos; si no aparece esta cadena, se mostrará el valor del nodo. El texto (del grupo de recursos o del propio nodo) puede especificar una ubicación para que se inserten argumentos utilizando “{0}”, “{1}”, y así sucesivamente. En este caso, las expresiones de los nodos ARG se evalúan y se insertan en el texto en el orden en que se especifican. Si hay más nodos ARG que huecos en la cadena, se ignorarán los sobrantes.
ARG

Esta etiqueta especifica una expresión en el lenguaje de condiciones de CSA que se puede evaluar e insertar en el texto de MOREINFO.

Temas Relacionados

Guía Básica de Información de Enterprise Manager

Acerca de la Clonación

Guía Básica de Información de Enterprise Manager