martes, marzo 15, 2011

Forzar el HOST en JMX (RMI) para Alfresco ECM

En algunas ocasiones necesitamos forzar el HOST para las conexiones JMX vía RMI de Alfresco.

En la configuración (alfresco-shared.properties) encontramos dos propiedades que son las siguientes:

alfresco.rmi.services.port=50500
alfresco.rmi.services.host=localhost

Pero en realidad hacen referencia a la parte de "virtualización" de servidor de Alfresco y no de los servicios que este proporciona. Para ello hay que recurrir a una propiedad en la llamada a la JVM que es java.rmi.server.hostname

En efecto, si necesitamos forzar una IP determinada de "escucha" para conectar alguna consola tipo jconsole, VisualVM, etc. necesitaremos hacer uso de esta variable.

Lo mejor es ponerla en el script de arranque de Alfresco, por ejemplo en Linux, esta sería una forma:

[...]
export IP_ADDR="`hostname -i`"
export JAVA_OPTS="-Xms256m -Xmx524m -Xss128k -XX:PermSize=196m -XX:MaxPermSize=196m -server"
export JAVA_OPTS="${JAVA_OPTS} -Dalfresco.home=${ALF_HOME} -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=${IP_ADDR} -Djava.rmi.server.port=50500"
[...]


Ahora solo queda arrancar y probar que se está listando correctamente el puerto y desde la dirección IP adecuada con:

netstat -putan | grep java


Y el resultado sería algo así:

tcp        0      0 ::ffff:192.168.1.112:50500  :::*                        LISTEN      5560/java          
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      5560/java          
tcp        0      0 :::50501                    :::*                        LISTEN      5560/java          
tcp        0      0 :::50502                    :::*                        LISTEN      5560/java          
tcp        0      0 :::55142                    :::*                        LISTEN      5560/java          
tcp        0      0 :::50503                    :::*                        LISTEN      5560/java          
tcp        0      0 :::50504                    :::*                        LISTEN      5560/java          
tcp        0      0 :::8009                     :::*                        LISTEN      5560/java          
tcp        0      0 :::50505                    :::*                        LISTEN      5560/java          
tcp        0      0 :::50506                    :::*                        LISTEN      5560/java          
tcp        0      0 :::50507                    :::*                        LISTEN      5560/java          
tcp        0      0 :::139                      :::*                        LISTEN      5560/java          
tcp        0      0 :::50508                    :::*                        LISTEN      5560/java          
tcp        0      0 :::53453                    :::*                        LISTEN      5560/java          
tcp        0      0 :::8080                     :::*                        LISTEN      5560/java          
tcp        0      0 :::41715                    :::*                        LISTEN      5560/java          
tcp        0      0 :::38324                    :::*                        LISTEN      5560/java          
tcp        0      0 :::445                      :::*                        LISTEN      5560/java          
tcp        0      0 ::ffff:127.0.0.1:42540      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:127.0.0.1:42541      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:127.0.0.1:42542      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:127.0.0.1:42543      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:127.0.0.1:42544      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:127.0.0.1:42545      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:127.0.0.1:42546      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:127.0.0.1:42547      ::ffff:127.0.0.1:3306       ESTABLISHED 5560/java          
tcp        0      0 ::ffff:192.168.1.112:50508  ::ffff:192.168.1.103:53427  ESTABLISHED 5560/java          
tcp        0      0 ::ffff:192.168.1.112:50508  ::ffff:192.168.1.103:53428  ESTABLISHED 5560/java          
udp        0      0 :::137                      :::*                                    5560/java          
udp        0      0 :::7500                     :::*                                    5560/java          
udp        0      0 :::7500                     :::*                                    5560/java

2 comentarios:

Anónimo dijo...

Buenas,
Has probado que no te falle por una interfaz de red que no sea la de servidor? una sub-interfaz?

en un redhat con la última versión enterpriese obtengo:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[172.172.0.3].[/alfresco]] (main) Exception sending context initialized event to listener instance of class org.alfresco.repo.webdav.WebDAVSessionListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'avmRemoteService' defined in class path resource [alfresco/remote-services-context.xml]: Invocation of init method failed; nested exception is java.rmi.server.ExportException: internal error: ObjID already in use

Caused by: java.rmi.server.ExportException: internal error: ObjID already in use

No he conseguido forzarlo. Es muy interesante para aislar varios Alfresco en distintas instancias JBoss.

Fernando González dijo...

Generalmente este error de ObjID sale cuando no coinciden el nombre de HOSTNAME con lo configurado en /etc/hosts

Podrías hacer pruebas para que la subinterfaz esté asignada al nombre del HOSTNAME a ver que pasa. Es solo una idea.