Ejecución indirecta/remota de aplicaciones Java

Exception in thread “main” java.lang.InternalError: Can’t connect to window server – not enough permissions.

El error anterior, oculto en el log de Apache HTTP Server, generado al intentar ejecutar Apache FOP desde PHP para generar informes para un proyecto que estoy desarrollando con Cx Networks, me mantuvo varios minutos preocupado y buscando soluciones para el problema.

Al principio parecía un simple problema de permisos de archivo. Pero tras tomar las acciones comúnmente necesarias (el ya conocido modo diabólico), todo parecía ir de mal en peor. Y es que estaba por maldecir a Steve por hacerme perder el tiempo; ya que en los servidores de Cx Net (Linux) todo funcionaba bien, pero en mi Macbook sólo veía el error en cuestión.

Tras investigar un rato en la Internet (por estos días Google), encontré que el problema se generaba por la imposibilidad de la máquina virtual de Java de acceder a ciertos dispositivos de interfaz humana como el mouse, el display o el teclado. Al parecer esto ocurre cuando llamamos indirectamente a la aplicación Java. Por ejemplo con un usuario que no tiene acceso a una shell como www de Apache (o _www en Mac OS X). También podríamos enfrentarnos a esta situación cuando ejecutamos un proceso Java de manera remota a través de SSH.

La solución es más simple de lo esperado. Al ejecutar el proceso Java, debemos indicar que estamos en un ambiente headless (sin mouse, teclado o pantalla). Para lo anterior, utilizamos el siguiente argumento:

-Djava.awt.headless=true

Para más información sobre el modo headless, les invito a visitar el siguiente enlace:

http://java.sun.com/j2se/1.4.2/docs/guide/awt/AWTChanges.html#headless

Publicado en Español,Java,Linux,Mac,PHP 5,Programación | Comments off

Comments are closed.

Lo siento, el formulario de comentarios está cerrado en este momento.

Sitios de interés