domingo, 11 de agosto de 2013

ACESSANDO VARIÁVEIS DO JBOSS AS 7 VIA LINHA DE COMANDO


INTRODUÇÃO

Além de acessar as configurações via arquivos xml no JBoss AS 7, podemos realizar operações como ler/escrever atributos e outras, na linha de comando (console) ou programaticamente (via Management API do JBoss AS 7).
Nesse artigo vamos explicar como fazer o acesso as variáveis no JBoss AS 7 tem linha de comando. Primeiramente, vamos explicar a estrutura geral das chamadas, linguagem, sintaxe até a conexão e execução via linha de comando.


ACESSO VIA LINHA DE COMANDO

Primeiramente, precisa entrar no diretório $JBOSS_HOME/bin e executar o script “jboss-cli.bat” (Windows) ou “jboss-cli.sh” (Linux). Ao executar esse programa, aparecerá outro shell (interface) e nesse momento, digite:

connect 127.0.0.1:9999

Para se conectar ao servidor no IP 127.0.0.1 e porta 9999 (responsável para permitir acesso ao módulo de gerenciamento no JBoss AS 7).

Estando conectado, digite o comando “ls” que dentro do JBoss CLI significa listar tudo que está dentro do “diretório”. Esse “diretório” entre aspas não significa um diretório realmente físico, mas como eles (JBoss AS) fizessem uma analogia entre a estrutura de diretórios (e até usando comandos similares do Linux, como o “ls”) e a estrutura das configurações usadas pelo JBoss (Hierarquia de configurações usadas nos arquivos XML). Veja na próxima figura para mais detalhes:
















Note que ao usar o comando “ls”, temos acesso já logo de cara as configurações fundamentais do servidor JBoss AS 7, como o modo de inicialização (launch-type) STANDALONE, versão (release-version) 7.1.3.Final e outras.
Digite o comando “help” para mais informações e use também o comando “clear” para limpar a tela.

Para começar, vamos entender como executar alguma instrução (requisição de operação) para poder ler/escrever nas propriedades do JBoss AS 7. Basicamente, uma requisição de operação (comumente chamado na documentação do JBoss AS 7) é construída de:

Caminho (endereço, Address), nome da operação e conjunto de parâmetros (depende da operação e é opcional).

Em uma notação na linguagem E-BNF (https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form), resumimos em:

[/node-type=node-name (/node-type=node-name)*]
“:” operation-name
(”[parameter-name=parameter-value (,” parameter-name=parameter-value)*]“)”


PARA QUEM NÃO CONHECE SOBRE A NOTAÇÃO E-BNF
É uma linguagem para codificar expressões e regras de gramáticas e assim, definir alguma linguagem, como as linguagens de programação Java, Python e outras.
Essa notação permitir definir de forma exata essas linguagens usadas no campo da ciência da computação, auxiliando na construção de compiladores, interpretadores, etc.
Outras linguagens como Português, Inglês, Alemão, Russo e outras não podem ser definidas por meio da notação E-BNF, pois são linguagens que não são exatas e possuem muitas regras que fogem da definição do E-BNF e também, são linguagens dinâmicas e vivas que mudam com o tempo.

O uso de colchetes “[” e “]” indicam que expressão contida é de uso opcional, ou seja, o número de ocorrências é 0 (zero) ou 1 (uma). O uso de parênteses “(” e “)” indicam que a expressão contida é de uso obrigatório e o número de ocorrências vai ser sempre 1 (uma). O asterisco “*” indica que a expressão próxima (lado esquerdo do asterisco) é de 0 (zero) ou N ocorrências, onde N pode ser qualquer valor.

Exemplo: Se temos (expressaoA)* indica que a expressão “expressaoA” pode ter 1 (uma) ou N ocorrências, pois o parênteses indica que a expressão (“expressaoA”) é obrigatória e deve ter uma ocorrência, ou 1 (uma) ou N ocorrência quando o asterisco está presente.




ACESSANDO VARIÁVEIS

- LER PORTA HTTP

Vamos começar mostrando como saber se o servidor JBoss AS 7 está rodando no modo “DOMAIN” ou “STANDALONE”. Para isso, na linha de comandos digite:

: read-attribute(name=launch-type)

Veja o resultado na figura a seguir:








Veja que o comando é executado na raiz (/) do diretório de configurações do JBoss AS 7.
Por isso, o comando executado não possuía nenhum endereço (/node-type=node-name) e já começava logo com os dois pontos (:).
 
DICA
Use a tecla TAB para o console completar o comando ou dar sugestões de opções possíveis. Com isso, podemos validar os nossos comandos antes de serem executados (ao clicar ENTER).
Em muitos casos aonde não temos exemplos, basta pressionar TAB para aparecer as sugestões validas de execução.

Agora vamos obter o número da porta usado pelo serviço http. Antes de executar o comando propriamente dito, vamos entrar nesse diretório para poder ver o caminho (desde a raiz) até chegar no diretório com essa configuração (valor da porta de vários serviços do JBoss AS 7). Execute os seguintes comandos:

cd socket-binding-group=standard-sockets

cd socket-binding=http

:read-attribute(name=port)

Veja na figura a seguir o resultado:








Note que o acesso do diretório se dar sempre em pares, isto é DiretórioPai=DiretórioFilho, seguindo a estrutura node-type=node-name.

Ou podemos entrar de diretório em diretório (um por vez), conforme comandos a seguir:

cd socket-binding-group

cd standard-sockets

cd socket-binding

cd http

:read-attribute(name=port)

Ou podemos executar tudo em um único comando:

/socket-binding-group=standard-sockets/socket-binding=http:read-attribute(name=port)

A operação usada (read-attribute) nesse exemplo está usando apenas um parâmetro que é o nome do atributo que queremos ler, no caso o nome é “port” que é o valor da porta http que queremos saber.

- LER CONFIGURAÇÕES DO INFINISPAN

// Lê só no primeiro nível.
/subsystem=infinispan:read-resource

// Lê de modo recursivo.
/subsystem=infinispan:read-resource(recursive=true)

// Lê os container-cache do infinispan.
/subsystem=infinispan:read-children-names(child-type=cache-container)


- IDENTIFICAR AS OPERAÇÕES POSSÍVEIS NO DIRETÓRIO ATUAL

// Dependendo do diretório atual, aparecerá mais ou menos operações que podem ser realizadas naquele diretório.
:read-operation-names

// Obtêm a descrição da operação escolhida.
// Nesse caso, estamos querendo saber como
// executar o comando shutdown no diretório raiz (/).
:read-operation-description(name=shutdown)


CONCLUSÃO

Nesse artigo mostramos como executar os comandos no console para poder administrar o servidor de aplicações JBoss AS 7. Com isso, podemos fazer diversas operações usando apenas o console.
A maneira de executar esse comando também é análoga a usada pela API Management para executar operações no JBoss AS 7.


REFERÊNCIAS