Configuração de Portas no JBoss AS 5 (Binding Service)
29, maio 2012 Deixe um comentário
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






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 