normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Micrsoft Azure の Web Apps で WildFly を稼働させる

随分と長い間 JDK 7 縛りにあって半泣きになっていた Web Apps だが、ARM から設定すると Azure Web Apps で JDK 8 と Tomcat 8 が使えるようになっていた で記載されている通り、Web Apps で JDK 8 と Tomcat 8 が使えるようになった。更に、直近では以下のように管理ポータルからも JDK 8 と Tomcat 8 が利用可能となっている。
f:id:waritohutsu:20150809111510p:plain

以前に Web Apps で JDK8 の利用を試みた際は、Tomcat 起動時に JDK8 がネットワークインターフェースの一覧を取得する Win32 API をたたいておりエラーが発生して利用できなかった。Tomcat8/JDK8 が利用できるため、どうやら JDK 8 向けの対応が完了したらしい*1
ここで気になったのが 2015年8月時点での Web Apps では WildFly が利用できるのではないかという点だ。なぜなら、JDK7&WildFly on Web Apps の利用時もネットワークインターフェース一覧を取得する Win32 API を叩く際のエラーが発生していたためだ。
確認した結果、以下の様に WildFly on Web Apps の稼働が確認でき、Web Apps 上で JavaEE7 を利用した Java アプリを存分に稼働できることが分かった。今回はこちらの設定方法を紹介する。
f:id:waritohutsu:20150809111525p:plain

設定手順

Web Apps には WildFly のパッケージは同梱されていないので、WildFly のダウンロードサイトから取得する必要がある。Web Apps では curl コマンドが仕込まれているので、Kudu のコンソールにて以下を実行して WildFly のパッケージを取得し、パッケージの中身を展開する。ファイル名のバージョンは適宜変更すること。

D:\home>cd site\wwwroot

D:\home\site\wwwroot>curl -O http://download.jboss.org/wildfly/9.0.1.Final/wildfly-9.0.1.Final.zip

D:\home\site\wwwroot>unzip wildfly-9.0.1.Final.zip

次に D:\home\site\wwwroot\web.config を作成して以下を記載する。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" 
                 modules="httpPlatformHandler" resourceType="Unspecified" />
        </handlers>
        <httpPlatform processPath="D:\home\site\wwwroot\wildfly-9.0.1.Final\bin\standalone.bat" arguments="-Djboss.http.port=%HTTP_PLATFORM_PORT%" startupTimeLimit="60">
            <environmentVariables>
                <environmentVariable name="JAVA_OPTS" value="-Djava.net.preferIPv4Stack=true" />
            </environmentVariables>
        </httpPlatform>
    </system.webServer>
</configuration>

WildFly が利用する HTTP ポートを HTTP_PLATFORM_PORT 環境変数にて設定し、httpPlatformHandler のプロセス起動待ち時間を60秒に設定している点に注意してほしい。WildFlyEJB コンテナを持つ JavaEE サーバであるため、Tomcat や Jetty に比べるとプロセスの起動に時間がかかる。そのため、startupTimeLimit デフォルトの 10秒では WildFly のプロセス起動に失敗する場合がある。

注意点

  • 2015年8月時点ではデフォルトの %JAVA_HOME% が JDK7 になっているので、JDK8 を利用する場合は管理ポータルで JDK8 を有効化する等、設定を見直すこと
  • WildFly 自体は利用できるが、HttpPlatformHandler は単一ポートの HTTP トラフィックしか流してくれないので JMX や管理ポータルに疎通できない

*1:念のため Kudu 経由で ipconfig をしたら相変わらず Access is denied とでたので、JDK 向けに特殊な処理をしているらしい