2

EAR ファイルにパッケージ化され、WildFly 9.0.2 Final にデプロイされたアプリケーションがあります。WildFly によって定義されたいくつかのシステム プロパティを読み取る必要があります。

問題は、EAR のクラスが WildFly システム プロパティを読み取れないことです。たとえば、次のコードは NullPointerException を取得します。

String DEPLOY_DIR  = System.getProperty("jboss.server.base.dir") + File.separator + "deployments"
File deployDir = new File(DEPLOY_DIR);

そして、これはエラーです:

java.lang.NullPointerException
            at java.io.File.<init>(File.java:277)

このエラーは、次が null を返すために発生します。

System.getProperty("jboss.server.base.dir")

WildFly が起動すると、関連するシステム プロパティがログに正しく表示されることに注意してください。

jboss.server.base.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone
jboss.server.config.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\configuration
jboss.server.data.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\data
jboss.server.deploy.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\data\content
jboss.server.log.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\log

私の質問 - EAR がシステム プロパティを読み取れない理由はありますか?

4

1 に答える 1

1

まず、大規模なシステムでは、これらの問題を診断するのは困難です。

JVM では、システム プロパティが共有され、常に同じ値が表示されるはずです。Wildfly9 のドキュメントでは、プロパティ置換のリスクについて警告しながら確認しています。

システム プロパティなどは、ファイルを含むデプロイメントではなく、アプリケーション サーバー自体のセキュリティ コンテキストで解決されます。

したがって、答えは「いいえ」です。EARはすべてのシステム プロパティを読み取ることができます。これは、SecurityException を受け取っていないためです (セキュリティ コンテキスト内で実行していて、ブロックされているという事実は除外されます)。

とにかく、次のような状況を確認する必要がある場合があります。

  1. あなたのコードは、値を削除する他のコードの後に​​実行されています。環境変数 $JBOSS_HOME を使用して、これらの問題を回避できます。
  2. DEPLOY_DIR は静的定数です (この場合、Wildfly が jboss.server.base.dir を設定する前に評価できます)。この問題は、standalone.sh によって直接作成される「jboss.home.dir」キーを使用して回避できます。
  3. コードは static { ... } 初期化ブロック内で実行されています。この場合、その中で「新しいファイル」を使用することは悪い習慣ですが、そうでない場合は、ケース 2 として回避できます。
于 2016-01-14T17:00:10.813 に答える