Página Regras

Um exemplo de arquivo é mostrado abaixo, seguido de uma descrição de cada tag contida no arquivo.

<RULES>
<RULE>
<NAME>O cliente tem memória suficiente</NAME>

<DESCRIPTION>Verifica se o cliente tem memória suficiente para processar a aplicação</ 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>A aplicação não pode ser processada com menos de 100 MB. </TEXT>
</MOREINFO>
</SEVERITY>
<SEVERITY level="WARNING">
<PARAM id='SIZE'>150</PARAM>
<MOREINFO>
<TEXT> Aproximando-se do nível mínimo de memória</TEXT>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>

Este exemplo demonstra uma regra que pode ser usada para verificar se o cliente tem memória suficiente para processar a aplicação. <VIOLATION> é uma expressão XPATH que o applet avaliará com relação a um arquivo XML que contém todos os dados coletados. Observe que como a violação é uma expressão XPATH incorporada em um arquivo XML, certos caracteres na XPATH, como ‘<', ‘>' e ‘&', devem ser substituídos por entidades. Se a expressão XPATH retornar um conjunto de nós não-nulo, ocorreu falha na regra. Neste caso, a regra falhará se a memória disponível do cliente for menor do que um certo valor. O valor real que dispara uma violação pode ser configurado usando níveis diferentes de severidade.

Neste exemplo, o applet primeiro substituirá a substring “$arg=SIZE$” na expressão VIOLATION por “100”, e depois avaliará a expressão. Se a memória disponível do cliente for menor do que 100 MB, a regra falhará com status crítico. O applet indicará o status juntamente com a mensagem “A aplicação não pode ser processada com menos de 100 MB”. Se a regra passar, o applet substituirá “$arg=SIZE$” por 150 e tentará novamente; se a regra falhar, o aplicativo exibirá a mensagem “Aproximando do nível mínimo de memória”. Se o applet passar por todos os níveis de segurança especificados e não encontrar uma violação, a regra será bem-sucedida.

No exemplo anterior, as informações adicionais exibidas com cada violação (como especificado nos elementos <TEXT&gt) não é dinâmica. No entanto, o administrador pode desejar comunicar ao usuário o quanto de memória ele terá, se uma violação for detectada. Isso pode ser alcançado se você usar um elemento<ARG> na tag lt;MOREINFO&gt. Imagine que a regra tenha sido escrita assim:

<RULE>
<NAME >O cliente tem memória suficiente</ /NAME>

<DESCRIPTION>Verifica se o cliente tem memória suficiente para processar a aplicação</ 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>Não é possível processar a aplicação com menos de 100 MB. Você só tem {0} MB disponíveis </TEXT>

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

Se uma violação crítica for detectada, o applet avaliará a expressão XPATH no elemento <ARG> e a inserirá no texto<MOREINFO>, na posição da string “{0}”, resultando em uma mensagem como “A aplicação não pode ser processada com menos de 100 MB. Você tem 45 MB disponíveis”. O valor de um elemento <ARG> deve ser uma expressão XPATH válida. Vários argumentos podem ser especificados; o applet avaliará a primeira expressão e a substituirá por “{0}”, substituirá a segunda por “{1}” etc. Se qualquer expressão XPATH retornar vários nós, o applet construirá uma lista de nós separados por vírgulas.

Para usar a mesma regra para vários locais de cliente, o administrador pode usar pacotes de recurso para permitir a tradução dos elementos<NAME>, <DESCRIPTION> e <TEXT>. Os pacotes de recurso são especificados usando um elemento<BUNDLE>, como mostrado a seguir.

<RULES>

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

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

<RULE>
<NAME resource=”name@bundle1” >O cliente tem memória suficiente.>/ /NAME>

<DESCRIPTION resource=”description@bundle2”>Esta regra verifica se o cliente tem memória suficiente para processar a aplicação</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 ”>Você tem apenas {0} MB de memória. </TEXT>

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

</RULES>

Um pacote de recursos pode ser um arquivo de classe Java no arquivo JAR do applet, um arquivo classe Java ou um arquivo XML no servidor. Todas as classes de pacote de recursos Java devem ter a extensão Java.util.ResourceBundle, ao passo que todos os pacotes de recursos XML devem ter os formatos mostrados a seguir:

<BUNDLE>

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

<STRING id='moreinfo'> Você tem apenas {0} MB de memória</STRING>

</BUNDLE>

O applet primeiro localiza o código de duas letras de seu local atual, como “es”. Quando o applet faz parse da tag BUNDLE, inicialmente ele supõe que o valor da tag é um nome de classe Java. O applet modificará o nome de classe com o código do local e então tentará carregar esta classe a partir do arquivo JAR do applet. Portanto, para o primeiro BUNDLE do exemplo anterior. Se o local era “es”, o applet tentaria carregar acme.bundles.RuleBundle_es. Se tal classe não existisse, o applet tentaria carregá-la do servidor, tratando o diretório em que a página de disponibilização está localizada como o diretório-raiz do caminho de classe. Portanto, no caso do primeiro pacote, se o usuário obtiver o applet do CSA em http://www.company.com/csa/CSA , o applet tentará carregar http://www.company.com/csa/acme/bundles/RuleBundle_es.class . Se esta etapa falhar, o applet tratará o valor da tag BUNDLE como o nome de um arquivo XML no servidor. Portanto, no caso do segundo elemento <BUNDLE>, o aplicativo tentará fazer o download de http://www.company.com/csa/ruleBundle_es.xml

Se o applet encontrar uma tag NAME, DESCRIPTION ou TEXT em uma regra com atributo de recurso especificado, ele primeiro tentará localizar e exibir o recurso especificado. Se o pacote especificado não estiver disponível para o local atual ou se o ID especificado não existir no pacote, o applet exibirá o valor da própria tag. Por exemplo, suponha que, com o arquivo de regra especificado anteriormente, o local fosse espanhol (es), mas que não existisse recurso no arquivo ruleBundle_es.xml com a “descrição” de ID. Se o cliente tiver somente 45 MB disponíveis, o applet exibiria

El cliente tiene bastante memoria – Esta regra verifica se o cliente tem memória suficiente para processar a aplicação.

- X Só há 45 MB de memória

Finalmente, pode haver circunstâncias em que certas regras não devem ser avaliadas. Por exemplo, uma regra criada para verificar se o usuário tem as definições do browser Netscape corretas não precisa ser avaliada se o usuário estiver acessando a aplicação com o Internet Explorer. Por essa razão, o administrador pode especificar uma ou mais pré-condição para cada regra, como mostrado a seguir.

<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>O cliente tem memória suficiente</NAME>

<DESCRIPTION>Esta regra verifica se o cliente tem memória suficiente para processar a aplicação</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>Não é possível processar a aplicação com menos de 100 MB. Você só tem {0} MB disponíveis </TEXT>

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

</RULES>

Para cada pré-condição, o applet avaliará a expressão XPATH especificada. Se a expressão retornar um conjunto de resultados não-nulo, a pré-condição foi correspondida (observe que essa semânticas são o oposto das referentes à expressão XPATH no elemento <VIOLATION> ). Uma regra com uma lista de pré-condições só será avaliada se todas as pré-condições da lista forem correspondidas.

Um exemplo final, listando todos os elementos disponíveis de um arquivo de regra, será mostrada a seguir, juntamente com uma tabela resumindo 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” >O cliente tem memória suficiente.>/ /NAME>

<DESCRIPTION resource=”description@bundle2”>Esta regra verifica se o cliente tem memória suficiente para processar a aplicação</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 ”>Você tem apenas {0} MB de memória. </TEXT>

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

</RULES>

Nome da Tag Descrição
RULES Este é o nível de tag mais alto para o arquivo XML
BUNDLE

Esta tag especifica os pacotes de recursos usados para tradução. O valor da tag é o nome de um arquivo ou o nome de uma classe Java. O mecanismo de regra lê essa string e primeiro tenta encontrar um arquivo que tenha esse nome no JAR do applet. Esse arquivo deverá conter um mapeamento de IDs de recursos para strings em diversos idiomas. Se esse arquivo não existir, a string será tratada como o nome de uma classe de pacote de recursos. As strings contidas em um pacote de recursos são referenciadas com a sintaxe <resource id>@<bundle id>.

PRECONDITION Esta tag é usada para especificar uma expressão que deverá retornar um conjunto de nós não nulos para uma regra a ser avaliada. O atributo “id” especifica o ID da pré-condição. Uma regra pode especificar uma lista de pré-condições que deverão ser avaliadas por meio da listagem de seus IDs.
RULE Esta tag representa um nó individual a ser avaliado. A severidade da regra é especificada com uma tag <SEVERITY> (veja abaixo). Pelo menos uma tag de severidade deverá ser especificada para uma regra. A tag tem um atributo de “pré-condição” opcional, que é usado para especificar uma lista de IDs de pré-condição separada por vírgulas. Antes de a regra ser validada, todas as pré-condições deverão ser atendidas. Se as pré-condições não forem atendidas, a regra terá o status de “Não Aplicável” e não será exibida na UI do cliente. As filhas de uma tag RULE são NAME, DESCRIPTION, VIOLATION, SEVERITY e MOREINFO.
NOME

Esta tag especifica o nome da regra e identifica a tag no repositório.

Observação: Esta tag conterá um valor e não poderá ficar em branco.

DESCRIÇÃO Este é a descrição da regra.
VIOLATION

Esta tag lista as violações que deverão ser verificadas para determinada regra. A violação é especificada no Idioma de Condição CSA

SEVERITY Uma regra pode ter três níveis de severidade: INFO, WARNING e CRITICAL. O nó SEVERITY deverá conter diversos filhos ARG iguais ao número de argumentos que podem ser aceitos pela expressão no nó VIOLATION. Quando o mecanismo de regra avalia uma regra, ela avalia a condição na tag VIOLATION para cada um dos conjuntos de argumentos especificados nos níveis de severidade, começando com CRITICAL e retrocedendo em ordem de severidade. Quando o mecanismo encontra uma condição que apresenta falha, a regra tem uma falha declarada, com um nível de severidade igual ao nível de severidade do argumento que causou a falha. Se as condições de todos os níveis especificados forem atendidas, a regra será aprovada. Os filhos do nó SEVERITY são PARAM e MOREINFO
PARAM Esta tag especifica o valor de um argumento que deverá ser substituído por uma expressão. O atributo “id” da tag deverá corresponder ao nome de um dos argumentos da expressão.
MOREINFO

Esta tag especifica as informações a serem exibidas se o usuário clicar no botão “mais informações” que é exibido ao lado de um regra com falha. Os filhos de MOREINFO são TEXT e ARG.

Observação: o nó MOREINFO pode ser filho do nó de severidade (nos casos em que várias severidades são especificadas) ou da própria regra.

TEXT Esta tag especifica o texto a ser exibido quando o botão “More Info” é clicado. O atributo “resource” especifica uma string em um pacote de recursos – se esta string não estiver presente, o valor do nó será exibido no lugar da string. O texto (no pacote de recursos ou no próprio nó) pode especificar a localização de argumentos a serem inseridos por meio da utilização de “{0}”, “{1}” etc. Nesse caso, as expressões nos nós ARG serão avaliadas e inseridas no texto na ordem em que são especificadas. Se houver mais nós ARG especificados do que slots na string, os nós extras serão ignorados.
ARG

Esta tag especifica uma expressão no Idioma de Condição CSA que pode ser avaliada e inserida no texto MOREINFO.

Tópicos Relacionados

Roteiro de Informações do Enterprise Manager

Sobre Clonagem

Roteiro de Informações do Enterprise Manager