Лучший способ определить, работает ли код на сервере приложений java

Для J2EE bean Я использую код, который был разработан для приложения java swing. JOptionPane.showMessageDialog(), к сожалению, обычно используется. Большинство случаев, к счастью, относятся к разделам кода, которые не используются повторно J2EE-приложением, но в некоторых случаях более низкие уровни кода имеют экземпляры JOptionPane.showMessageDialog(). Очевидно, это приводит к появлению на сервере диалоговых окон, чего я хочу избежать.

В качестве первого шага я хотел бы как-то убедиться, что на сервере никогда не появятся диалоговые окна.

Кто-то предложил заглянуть в какую-то очередь или в очередь с краской (я не помню, какой из них): Это будет:

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

Я никогда не работал так. Что бы вы сделали?

Ответ 1

Убедитесь, что сервер запущен с помощью

java -Djava.awt.headless=true

Большинство серверов должны быть запущены по умолчанию. Затем вы можете проверить:

boolean headless_check = GraphicsEnvironment.isHeadless();

Подробнее о безголовом доступном здесь:

Ответ 2

Я только что протестировал это с помощью среды выполнения OpenJDK (IcedTea 2.4.3) (Gentoo build 1.7.0_45-b31) в Linux, и я обнаружил, что unset DISPLAY также было достаточно, чтобы сделать isHeadless()isHeadlessInstance()) return true.

Итак, этот метод не просто говорит вам, был ли AWT вынужден игнорировать возможности системной графики, а скорее, имеет ли ваш процесс доступ к графическим возможностям вообще.

Пример:
Код работает на каком-то поле, которое не имеет карты отображения (что, вероятно, то, что вы хотите знать), поэтому вы всегда можете проверить системное свойство, если по какой-то причине вы хотите узнать, был ли режим безглавых принудительным.