Applications Java serveur nécessitant un serveur X

Comment se passer d’un serveur X pour une application java qui en veut un alors qu’elle tourne sur un serveur qui n’est pas sensé en avoir : vous me suivez ?

Des applications java peuvent avoir besoin d’un serveur X pour faire du rendu de dessin. C’est le cas par exemple en cas d’utilisation de la bibliothèque de rendu de graphiques JChart ou avec JasperReport. On aura par exemple une stacktrace du genre :

java.lang.InternalError

Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.sun.awt.X11GraphicsEnvironment::initDisplay (native)

sun.awt.X11GraphicsEnvironment::<clinit> ( X11GraphicsEnvironment.java: 134 )

java.lang.Class::forName0 (native)

java.lang.Class::forName ( Class.java: 141 )

java.awt.GraphicsEnvironment::getLocalGraphicsEnvironment ( GraphicsEnvironment.java: 62 )

net.sf.jasperreports.engine.util.JRGraphEnvInitializer::initializeGraphEnv ( JRGraphEnvInitializer.java: 58 )

...

Cependant, sous les serveurs de production, on lance rarement un serveur X. Il faut donc utiliser soit :
– un serveur virtuel xvfb
– l’option -Djava.awt.headless=true [1] si on utilise Java 1.4 ou supérieur

PS : Cette astuce a été trouvée dans la doc de jCharts

[1] ou dans le code avec System.setProperty(“java.awt.headless”,”true”) ;

Leave a Reply

Your email address will not be published. Required fields are marked *