Dicas, JBoss

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

Anúncios