Meilleure façon de détecter si le code est exécuté dans un serveur d'applications Java

StackOverflow https://stackoverflow.com/questions/1014620

  •  06-07-2019
  •  | 
  •  

Question

Pour un bean J2EE, je réutilise le code qui a été développé pour une application java swing. JOptionPane.showMessageDialog () est malheureusement couramment utilisé. La plupart des occurrences se trouvent heureusement dans les sections de code qui ne sont pas réutilisées par l'application J2EE, mais dans certains cas, les niveaux inférieurs du code ont des instances de JOptionPane.showMessageDialog (). Évidemment, cela entraîne l'apparition de boîtes de dialogue sur le serveur, ce que je veux éviter.

Dans un premier temps, j'aimerais vous assurer qu'aucune boîte de dialogue ne se produira sur le serveur.

Quelqu'un a suggéré de jeter un coup d'œil à un événement ou à une file d'attente de peinture (je ne me souviens plus lequel): Ce serait:

// old code: JOptionPane.showMessageDialog(msg);
if ( someEventQueue.size() == 0 ) // <== consider this pseudo-code
  Log.log(msg); // I am running on a server. Tell the log.
else
  JOptionPane.showMessageDialog(msg); // I have a user made of meat. Tell him!

Je n'ai jamais vraiment réussi à faire fonctionner cela. Qu'est-ce que tu ferais?

Était-ce utile?

La solution

Assurez-vous que le serveur est démarré avec

java -Djava.awt.headless=true

La plupart des serveurs devraient être démarrés de cette façon par défaut. Ensuite, vous pouvez vérifier:

boolean headless_check = GraphicsEnvironment.isHeadless();

Plus de détails sur les disponibles sans tête :

Autres conseils

Je viens de tester cela avec OpenJDK Runtime Environment (IcedTea 2.4.3) (Gentoo build 1.7.0_45-b31) sous Linux et je trouve que unset DISPLAY était également suffisant pour que isHeadless () (et estHeadlessInstance () ) renvoie true .

Ainsi, cette méthode ne vous indique pas seulement si AWT a été forcée d'ignorer les fonctionnalités graphiques du système, mais plutôt si votre processus a accès aux fonctionnalités graphiques.

Exemple:
Le code est exécuté sur une boîte sans carte d'affichage ( c'est probablement ce que vous voulez savoir ). Vous pouvez donc toujours vérifier la propriété système si, pour une raison quelconque, vous souhaitez savoir si le mode sans tête était forcé .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top