Configuração de Portas no JBoss AS 5 (Binding Service)

Serviço de Gerenciamento de Portas

O JBoss AS gerencia o mapeamento de portas utilizadas pelos diversos serviços do servidor através do mecanismo conhecido por Ports Bind.
Esse serviço é configurado no arquivo localizado em

JBOSS_HOME/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml

E possui o seguinte esquema:

  •  definição do bean ServiceBindingManagementObject que possui o conjunto de portas prédefinido no JBossAS.
 <bean name="ServiceBindingManagementObject"
       class="org.jboss.services.binding.managed.ServiceBindingManagementObject">
  <constructor>
   <parameter>${jboss.service.binding.set:ports-default}</parameter>
   <parameter>
    <set>
     <inject bean="PortsDefaultBindings"/>
     <inject bean="Ports01Bindings"/>
     <inject bean="Ports02Bindings"/>
     <inject bean="Ports03Bindings"/>
    </set>
   </parameter>
   <parameter><inject bean="StandardBindings"/></parameter>
  </constructor>
 </bean>
  • definição do conjunto de portas definidos no bean anterior
 <bean name="PortsDefaultBindings" class="org.jboss.services.binding.impl.ServiceBindingSet">
  <constructor>
   <parameter>ports-default</parameter>
   <parameter>${jboss.bind.address}</parameter>
   <parameter>0</parameter>
   <parameter><null/></parameter>
  </constructor>
 </bean>

Observe que, por padrão, o JBossAS fornece quatro conjunto de portas: PortsDefaultBindings, Ports01Bindings, Ports02Bindings e Ports03Bindings‘.

O que diferencia cada conjunto é o incremento aplicado a cada porta aberta pelos diversos serviços do JBoss. Por exemplo, o Ports01Bindings (ports-01) adiciona 100 ao valor da porta usada pelo conector http do JBoss Web, que por padrão é 8080, mas neste caso (usando o conjunto ports-01) passará a ser 8180.

Caso haja a necessidade de subir mais que quatro instâncias em um mesmo servidor utilizando o mecanismo de Ports Bind, será necessário definir novos conjuntos de portas (ex. Ports04Bindings, Ports05Bindings etc). Porém, é mais conveniente definir um conjunto de portas dinâmico. Dessa forma seu valor de incremento (padrão 100) pode ser parametrizado durante o statup do JBoss. Para isso precisamos fazer duas alterações no arquivo bindings-jboss-beans.xml.

  •  injetar um novo bean que define o conjuto de portas dinâmico/genérico.

Chamaremos esse novo bean de PortsDynaBindings.

<bean name="ServiceBindingManagementObject"
      class="org.jboss.services.binding.managed.ServiceBindingManagementObject">
 <constructor>
  <parameter>${jboss.service.binding.set:ports-default}</parameter>
  <parameter>
   <set>
    <inject bean="PortsDefaultBindings"/>
    <inject bean="Ports01Bindings"/>
    <inject bean="Ports02Bindings"/>
    <inject bean="Ports03Bindings"/>
 <inject bean="PortsDynaBindings"/>
   </set>
  </parameter>
  <parameter><inject bean="StandardBindings"/></parameter>
 </constructor>
</bean>
  •  definir o bean PortsDynaBindings.

Para isso basta copiar a definição do bloco PortsDefaultBindings as propriedades conforme destacado abaixo.

 <bean name="PortsDynaBindings" class="org.jboss.services.binding.impl.ServiceBindingSet">
  <constructor>
   <parameter>ports-dyna</parameter>
   <parameter>${jboss.bind.address}</parameter>
   <parameter>${jboss.bind.offset}</parameter>
   <parameter><null/></parameter>
  </constructor>
 </bean>

Agora para usar esse novo esquema basta informar no arquivo de parâmetros da JVM da instância (run.conf) ou no script de inicialização do JBoss o nome do novo conjunto de portas, bem como a propriedade jboss.bind.offset. Veja como fica no arquivo run.conf:

JAVA_OPTS=$JAVA_OPTS -Djboss.service.binding.set=ports-dyna
JAVA_OPTS=$JAVA_OPTS -Djboss.bind.offset=400

Esses parâmetros podem ser informados direto na linha de comando que inicia o JBoss:

JBOSS_HOME/bin/run.sh -c default -b 0.0.0.0 -Djboss.service.binding.set=ports-dyna -Djboss.bind.offset=400

Dessa forma o JBoss fará o bind das portas incrementando o valor 400 ao valor padrão definido para cada serviço. Por exemplo, o JBoss Web estará acessível através da porta 8480.

Para subir novas intâncias basta alterar o valor do parâmetro jboss.bind.offset

Java Magazine #102: A revolução do JBoss AS 7

Saiu na edição #102 da Java Magazine um excelente artigo sobre as novidades do JBoss AS 7 – A Revolução do JBoss AS 7. Nesta primeira parte do artigo tentamos mostrar as principais novidades da nova versão do JBoss AS. Tópicos como a nova estrutura de diretórios, instalação, novos modos de operação (standalone e domain), novo kernel (100% modular), novos consoles de gerência e configuração foram destaques dessa primeira parte do artigo.

Java Magazine #102 - A Revolução do JBoss AS 7

Adquira seu exemplar e confira em detalhes essas novidades.

;-)

JBoss In Bossa 2011: eu participei!

Acontenceu no último Sábado (08/10/2011) aqui em Brasília mais uma edição do maior evento da comunidade JBoss no Brasil (JBUG Brasil) – JBoss In Bossa 2011.

JBoss In Bossa

Em sua segunda edição o evento ofereceu um excelente grade de palestras abordando vários projetos mantidos pela comunidades JBoss.ORG. Grandes nomes da comunidade Java marcaram presença no evento apresentando as últimas novidades dos mais importantes projetos que compõe a JBoss Project Matrix.

O evento possui carater estritamente técnico e suas palestres priorizam a demonstração prática das últimas novidades dos projetos e ferramentas abordadas. Nessa edição contamos com incríveis Demos apresentadas com muita propriedade pelos palestrantes.

Nesta edição também tive a oportunidade de participar do evento como palestrante apresentando as novidades da solução de gerenciamento e monitoramento  RHQ com a palestra “RHQ 4 Gerenciamento efetivo de servidores JBoss“.

Nesta apresentação demonstramos, além das principais características da ferramenta, duas funcionalidades que foram bastante comentadas no evento. A primeira foi a capacidade do RHQ de notifcar alertas disparados pela ferramenta usando uma conta no Twitter.

@JBossInBossaRHQ

A outra demo mostrou o RHQ realizando uma chamada SIP para um Softphone notificando sobre um alerta disparado devido a uma condição específica configurada no subsistema de alertas do RHQ. Essa demo fez uso da solução de comunicação Mobicents que se trata de um projeto 100% Open Source  e executa sobre a plataforma Java.

Mobicents

O RHQ é uma incrível solução de gerenciamento e monitoramento para servidores de aplicação JBoss. Essas e outras funcionalidades só são possíveis devido à sua arquitetura extensível que permite criar Plugins para agregar a ferramenta com as mais diversas capacidades de gerenciamento e monitoramento de software e sistemas. Ainda quero escrever mais sobre o RHQ aqui no Blog. Aguarde novos posts…

Em suma foi um grande evento da comunidade Java/JBoss em Brasília. Uma ótima oportunidade para conhecer e interagir com grandes nomes do Java e da comunidade JBoss no Brasil. Para quem não pôde comparecer os slides das palestras estão disponíveis no site oficial do JBossInBossa. Acompanhe também a repercussão do evento no twitter através da hash tag #JBossInBossa.

Aguardemos a próxima edição do evento!

Até a próxima ;-)

Configurando JBoss AS 5: principais arquivos de conf.

Se você  está acostumado com a configuração do JBoss AS 4.x (baseado no Microkernel JMX do JBoss) e começou a trabalhar com a versão 5 deve estar, como eu no início, um pouco perdido para encontrar as principais configurações espalhadas pelos novos descritores de serviços (arquivos *-service/bean.xml) na nova estrutura do JBoss AS. Na nova versão boa parte dos arquivos de conf. foram alterados por conta da nova implementação do kernel do JBoss – agora chamado JBoss Microcontainer ou simplesmente JBossMC.

Neste post pretendo mostrar a localização e alguns trechos de configuração para alguns ajustes que considero importantes e que creio fazer parte do dia a dia de um Admin. de JBoss AS. Portanto meu objetivo neste post está longe de percorrer todas as mudanças e configurações da dessa versão do JBossAS!

1) Para começar mostro onde se encontra a configuração do serviço responsável pelo controle transacional do servidor – TransactionManager.

Descritor do serviço: $JBOSS_HOME/server/default/transaction-jboss-beans.xml

Uma propriedade que geralmente precisamos ajustar é o timeout da transação (lembrando que isso altera o timet global do AS)

Trecho de conf:

<property name="transactionTimeout">600</property> <!-- alterado para 10 min (600s). -->
<property name="objectStoreDir">${jboss.server.data.dir}/tx-object-store</property>
<property name="mbeanServer"><inject bean="JMXKernel" property="mbeanServer"/></property>

2) Agora o mecanismo responsável por “monitorar” o diretório de deploy e fazer o Hot Deployment é o HDScanner.

Descritor do serviço: $JBOSS_HOME/server/default/deploy/hdscanner-jboss-beans.xml

Trecho de conf:

<!-- Hotdeployment of applications -->
 <property name="deployer"><inject bean="ProfileServiceDeployer"/></property>
 <property name="profileService"><inject bean="ProfileService"/></property>
 <property name="scanPeriod">5000</property> <!-- intervalo do scanner -->
 <property name="scanThreadName">HDScanner</property>
 </bean>
...

Para desabilitar o HDScanner basta renomear o descritor hdscanner-jboss-beans.xml para extensão .rej (ou remover o arquivo).

3) Outro importante serviço é o ServiceBindManager. Ele é responsável por configurar as portas de cada connector/invoker de acesso aos serviços/containers internos do JBoss.

Por exemplo o conector HTTP do JBossWEB atende por padrão na porta 8080, quando se deseja subir mais de uma instância num mesmo Host (JBoss em MultiHomed), temos duas alteranativas: (a) definir um endereço  IP para cada instância (run.sh -c default -b x.x.x.x) ou (b) usar o ServiceBindManager para trocar as portas automaticamente durante o startup do AS.

Para informar ao JBoss como ele irá atribuir as portas aos conectores basta informarmos um propriedade à JVM na linha de comanda que inicia o servidor:

./run.sh -c default -Djboss.service.binding.set=ports-01

Em destaque o parâmetro que informa aos ServiceBindManager quel o conjunto de portas será atribuído aos conectores de cada serviço. Neste exemplo (ports-01) irá atribuir a porta 8180 ao conector HTTP por exemplo.

Descritor do serviço: $JBOSS_HOME/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml

Trecho de conf:

<!-- Provides management tools with a ProfileService ManagementView
     interface to the SBM and its components -->
<constructor>
<!-- The name of the set of bindings to use for this server -->
<parameter>${jboss.service.binding.set:ports-default}</parameter>
<!--  The binding sets -->
<parameter>
<set>
   <inject bean="PortsDefaultBindings"/>
   <inject bean="Ports01Bindings"/>
   <inject bean="Ports02Bindings"/>
   <inject bean="Ports03Bindings"/>
</set>
</parameter>

<!-- Base binding metadata that is used to create bindings for each set -->
<parameter><inject bean="StandardBindings"/></parameter>
</constructor>
</bean>

Como podemos ver, o JBoss fornece 4 conjuntos de portas prontos para uso. Os parâmetros que devem ser informados na propriedade da linha de comando são os seguintes:

  • ports-default
  • ports-01
  • ports-02
  • ports-03

Basicamente o ServiceBindManager adiciona 100 ao número padrão de cada porta, ou seja, para a porta HTTP padrão (8080) quando usamos o conjunto ports-01 ela passará a ser 8180.

4) O serviço de LOG do JBoss continua sendo o Log4j. Nesse serviço geralmente temos a necesside alterar somente o nível (DEBUG,INFO,WARN,ERROR,FATAL) de saída do LOG geral do AS conforme a necessidade do ambiente. Na versão 5 do JBoss podemos informar esse nível de log via uma outra propriedade do sistema passada via linha de comando:

./run.sh -c default -Djboss.server.log.threshold=DEBUG

Neste caso informamos que o nível de log do servidor será DEBUG (geralmente utilizado em ambiente de desenvolvimento).

Outros ajustes do Log4j continuam sendo feitas no descritor do serviço tais como a configuração de appenders e category.

Descritor do serviço: $JBOSS_HOME/server/default/conf/jboss-log4j.xml

Por enquanto ficamos com esses pontos da configuração do JBoss AS. Posteriormente falarei sobre a configuração de classloaders isolados em aplicações WEB.

Abaixo algumas referências ([1] e [2]) sobre as principais mudanças no AS 5 descritas no wiki oficial do JBoss.ORG.

Abraço!

________

Ref.
[1] http://community.jboss.org/wiki/JBossAS50xChangesFAQ
[2] http://community.jboss.org/wiki/JBossAS5FAQ

Erro java.lang.NoClassDefFoundError: sun.awt.X11GraphicsEnvironment

Depois de um longo tempo (tipo… quase 2 anos :-) ) sem postar nada no blog, resolvi voltar a postar…

Neste post desejo compartilhar um “workaround” que encontrei na NET (depois de uma googlada básica) quando me deparei com um problema esquisito em uma aplicação web “deployada” no JBoss AS. Uma das funcionalidades dessa app faz a geração online de uns relatórios em PDF usando o JasperReports. As vezes a aplicação não consegue gerar o relatório e lança a seguinte exception no log do AS: java.lang.NoClassDefFoundError: sun.awt.X11GraphicsEnvironment. Encontrei algumas explicações na net (refs. [1] e [2]) que dizem, aparentemente, ser uma pala relacionada às bibliotecas gráficas em ambientes Linux/Unix. Segundo o trecho abaixo copiado da ref. [1] as bibliotecas AWT da Sun dependem do sistema de janelas X do Linux.

Sem aprofundar muito na questão de como a JVM abstrai isso do SO… O lance é que em ambientes de produção geralmente o ambiente gráfico do S.O (X11) está ausente. A ref. [1] sugere executar uma versão do X Server sem display (Xvfb), ou seja, o Xvfb executa as operações gráficas em memória. Após rodar o Xvfb deve-se configurar a var. de ambiente $DISPLAY do S.O apontando para esse daemond. Além dessa opção do Xvfb, ele sugere setar a JVM property "-Djava.awt.headless=true" que supostamente resolve o problema. Como a 1º opção é um pouco mais complicada preferi configurar a JVM Property mesmo. Em princípio o problema foi sanado, pelo menos, até o momento.

Caso queira saber masi sobre como usar o Xvfb em ambientes sem o X instalado veja a ref. [3] que mostra um cenário em que foi utilizado um Selenium para realização de testes em um servidor sem ambiente gráfico instalado.

_________
Referências:
[1] http://www.jguru.com/faq/view.jsp?EID=222296
[2] http://www.theserverside.com/discussions/thread.tss?thread_id=16049
[3] http://www.jeveaux.com/blog/2008/xvfb-como-usar-o-selenium-sem-ter-um-x-server/

JBoss AS 5 é JEE 5 certified

Agora é oficial!

JBoss AS 5 é JEE 5 certified.

Confira a lista de App Servers certificados JEE no site da Sun:

http://java.sun.com/javaee/overview/compatibility.jsp

Truth Happens remix

Tive a oportunidade de ver esse vídeo pela primeira vez em um evento da RedHat aqui em BSB – JBoss Road Show.

Mostra de maneira bem interessante um pouco da saga do Linux e Open Source

É muito bom!

falow!

Saiu a release final do JBoss 5

Saiu a release final do Application Server Open Source mais utilizado no mundo JEE – JBoss 5 GA.
Esta nova versão do JBoss é totalmente compatível com a especificação JEE 5 e traz grandes inovações em seu kernel como resultado de 3 anos de trabalho em sua arquitetura.

O Release Notes dessa nova versão está disponível aqui
Destaco duas novas configurações disponíveis nessa nova versão, além da all, default e minimal, agora o JBoss fornece  a config. standard e a config. web .

A diferença da config. standard para as outras é que esta traz o comportamento call-by-valuedeployment isolation habilitados por padrão, e também dá suporte a comunicação remota via RMI/IIOP e JUDDI.

Já a configuração web trata-se de um configuração leve de caráter experimental criada com base no projeto JBoss Web que segue o desenvolvimento do JavaEE 6 web profile. Exceto para o container servlet/jsp esta nova configuração fornece suporte às APIs JTA/JCA e JPA.Ela também limita-se ao acesso via HTTP. Vale ressaltar ainda que esta configuração WEB ainda não é JavaEE certified e poderá ser modificada em versões posteriores.

Faça o download e confira!

Enpcriptando o tráfego entre Apache HTTP e JBoss/Tomcat

Em um ambiente com Apache HTTP Server como front-end de requisições HTTP e JBoss/Tomcat como back-end AS geralmente se usa o mod_jk (protocolo AJP) ou mod_proxy (protocolo HTTP) como mediador da comunicação entre esses dois servidores.
No protocolo AJP os dados são enviados em formato binário do apache para o AS, já o HTTP os dados são enviados em texto claro.

Sempre alguém pergunta se é possível encriptar o tráfego entre o Apache e o JBoss/Tomcat quando este está atrás do Apache HTTP. De acordo com a ref. [1] isso parece ser possível usando mod_proxy no Apache.

Aproveitando o assunto tem uma forma mais fácil (uma alternativa ao mod_jk) de se implementar o load-balance com Apache – JBoss/Tomcat. A partir da versão 2.2.x do Apache HTTP Server a distro padrão vem com o módulo mod_proxy_balancer que permite uma configuração mais simples para load-balancing e também suporta o comunicação pelo protocolo AJP.

No wiki do JBoss existe um roteiro simples e completo para a implementação, configuração e ajuste fino do load-balancing com Apache e JBoss: OptimalMod_jk1.2Configuration

obs: caso queira usar mod_jk use a versão 1.2 A versão mais nova (2.0) foi descontinuada e não é indicada para uso em produção.

A documentação do balancer na Apache não possui muitos exemplos. Depois eu posto um breve howto aqui no blog…

falou!

[1] http://wiki.jboss.org/wiki/EncryptHttpd_TC

Enem 2008 rodando em JBoss

Enem 2008

Esta semana tive a oportunidade de retornar ao INEP/MEC visitar alguns colegas e acompanhar um pouco do trabalho da equipe envolvida no projeto Enem 2008 desenvolvido em JBoss SEAM e implantado no JBoss AS.

Pude perceber a animação da equipe e também o trabalho árduo para que tudo estivesse pronto no momento do pronunciamento do Ministro da Educação sobre os resultados do Enem 2008. O Projeto foi um sucesso e pode ser considerando um grande Case JBoss no Brasil.

Nessa etapa do Enem foram utilizados 38 instância de JBoss com picos de 80k acessos na aplicação. No momento em que o resultado do Enem  foi anunciado no JN o load do S.O em algumas máquina passou de 30, mas o JBoss agüentou firme a pressão…

Na época das inscrições do Enem 2008 pude sentir na pele o que é montar um ambiente com vários servidores de aplicação com balanceamento de carga e tudo mais. Não é fácil preparar, manter e monitorar um ambiente desses. Mas é gratificante ver o sistema no ar, funcionando e, o melhor, servido a sociedade.

A equipe toda está de parabéns: o pessoal do INEP, da SEA e da RedHat que atuaram juntos neste projeto.

JBoss é o bicho!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.