コードがアプリケーションサーバーのJavaで実行されているかどうかを検出する最良の方法
-
06-07-2019 - |
質問
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!
私はそれが機能することを本当に決してしませんでした。あなたならどうしますか?
解決
サーバーが起動されていることを確認します
java -Djava.awt.headless=true
ほとんどのサーバーはデフォルトでそのように起動する必要があります。その後、次を確認できます。
boolean headless_check = GraphicsEnvironment.isHeadless();
利用可能なヘッドレスの詳細こちら:
他のヒント
これをLinuxのOpenJDKランタイム環境(IcedTea 2.4.3)(Gentooビルド1.7.0_45-b31)でテストしたところ、 unset DISPLAY
でもを作成することができましたisHeadless()
(および isHeadlessInstance()
)は true
を返します。
そのため、このメソッドは、AWTがシステムのグラフィック機能を無視するように強制されたかどうかだけでなく、プロセスがグラフィック機能にまったくアクセスできるかどうかを示します。
例:
コードはディスプレイカードのないボックスで実行されているので(おそらくあなたが知りたいことです)、何らかの理由でヘッドレスモードが強制。