Melhor maneira de detectar se o código está sendo executado em um servidor de aplicativos Java

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Para um feijão J2EE estou reutilizando código que foi desenvolvido para uma aplicação java swing. JOptionPane.showMessageDialog () está infelizmente comumente usado. A maioria das ocorrências felizmente em seções de código que não são reutilizados pela aplicação J2EE, mas em alguns casos, reduzir os níveis do código tem instâncias de JOptionPane.showMessageDialog (). Obviamente, isso resulta em caixas de diálogo aparecendo no servidor, que é o que eu quero evitar.

Como um primeiro passo que eu gostaria de assegurar alguma forma que há caixas de diálogo nunca irá ocorrer no servidor.

Alguém sugeriu espreitar em algum evento ou pintar fila (não me lembro qual): Isso seria:

// 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!

Nunca realmente tem que trabalhar. O que você faria?

Foi útil?

Solução

Verifique se o servidor é iniciado com

java -Djava.awt.headless=true

A maioria dos servidores deve ser iniciado dessa maneira por padrão. Em seguida, você pode verificar:

boolean headless_check = GraphicsEnvironment.isHeadless();

Mais detalhes sobre decapitado disponível aqui :

Outras dicas

Eu só testei isso com OpenJDK Runtime Environment (IcedTea 2.4.3) (Gentoo construção 1.7.0_45-b31) no Linux, e eu acho que unset DISPLAY também foi suficiente para fazer isHeadless() (e isHeadlessInstance()) return true.

Assim, este método não apenas dizer-lhe se AWT foi forçado a ignorar as capacidades gráficas do sistema, mas sim se o seu processo tem acesso a recursos gráficos em tudo.

Exemplo:
O código está sendo executado em alguma caixa que não tem placa de vídeo ( isso é provavelmente o que você quer saber ), assim você sempre pode verificar a propriedade do sistema, se por algum motivo você quer saber se o modo sem cabeça foi forçada .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top