Tag Archives: problema

Múltiples instancias del AS y el problema de los puertos

Uno de los problemas mas frecuentes al levantar varias instancias del AS en una misma máquina es la tediosa tarea de reconfigurar todos los puertos para que no se produzca un error de port binding. Dejando afuera la alternativa recomendada e ideal, que es la de asignar una dirección IP distinta a cada instancia, o la peor, que és cambiar manualmente todos los puertos en los archivos de configuración, aparece la opción de utilizar el servicio ServiceBindingManager ó también llamada te-reconfiguro-todos-los-puertos-en-un-solo-archivo.

Este servicio viene activado por default en los AS 5 o para activar manualmente en las versiones 4.X.

JBoss AS 4.X:
Viene desactivado por default, para activarlo hay que descomentar las lineas

!-- 
      | Binding service manager for port/host mapping. This is a sample
      | config that demonstrates a JBoss instances with a server name 'ports-01'
      | loading its bindings from an XML file using the ServicesStoreFactory
      | implementation returned by the XMLServicesStoreFactory.
      |
      | ServerName: The unique name assigned to a JBoss server instance for
      | lookup purposes. This allows a single ServicesStore to handle mulitiple
      | JBoss servers.
      |
      | StoreURL: The URL string passed to org.jboss.services.binding.ServicesStore
      | during initialization that specifies how to connect to the bindings store.
      | StoreFactory: The org.jboss.services.binding.ServicesStoreFactory interface
      | implementation to create to obtain the ServicesStore instance.

   <mbean code="org.jboss.services.binding.ServiceBindingManager"
     name="jboss.system:service=ServiceBindingManager">
     <attribute name="ServerName">ports-01</attribute>
     <attribute name="StoreURL">../docs/examples/binding-manager/sample-bindings.xml</attribute>
     <attribute name="StoreFactoryClassName">org.jboss.services.binding.XMLServicesStoreFactory</attribute>
   </mbean>
   -->

del archivo conf/jboss-service.xml. En el atributo “ServerName” se tiene que cambiar el contenido “ports-01” por la configuración deseada y en “StoreURL” el path del archivo que contiene las distintas configuraciones. Un ejemplo del archivo de configuración se encuentra en $JBOSS_HOME/docs/binding-manager/sample-bindings.xml, el cual viene con 4 ejemplo de configuraciones listas para usar.

JBoss AS 5.X:
En la serie 5.X viene activado por default y se configura desde el archivo server/nombre_de_instancia/conf/bootstrap/bindings.xml , esta nueva versión es todavia mucho más amigable y viene con 4 set de configuraciones listas para usar. La diferencia con respecto a las configuraciones que venian con el AS 4.X se basan en que no se configura ningún puerto, sino tan solo un parámetro donde se indica cuanto se tiene que sumar al puerto estandard.

Para establecer que configuración se quiere utilizar se debe especificar el parámetro,

<parameter>${jboss.service.binding.set:ports-default}</parameter>

donde ports-default es el nombre de una configuración, en el constructor del bean ServiceBindingManager dentro del archivo bindings.xml

Si bien todavia puede existir el problema de la asignación de puertos para JGroups en un ambiente clusterizado, las posibilidades de error son mínimas. En todo caso no se recomienda la utilización de estas configuraciones para ambientes de producción porque una futura actualización seguramente cambiaría la configuración asignada, con todos los problemas que eso acarrea.

Espero que sea útil

Post Original