読者です 読者をやめる 読者になる 読者になる

kagamihogeの日記

kagamihogeの日記です。

JBoss AS7のROOT.war

Java JBoss

7より前のJBossでいうところの↓をやるにはどうするか、をやってみた。

デフォルトでは、JBoss サーバーは JBOSS_DIST/jboss-as/server/PROFILE/deploy/ROOT.war をサーバー上のデフォルトアプリケーションとして設定します。 そのため、 http://localhost:8080/ にアクセスすると、アプリケーションのインデックスページが表示されます。

1.6. 設定に関する基本的な問題 - Red Hat Customer Portal より抜粋

環境

  • jdk1.7.0_09
  • JBoss AS 7.1.1.Final

やったこと

デプロイ先のディレクトリである%JBOSS_HOME%/standalone/deploymentsを見ても、デフォルトでは空になっている。さてどうしたものかとググると下記がひっかかる。

Did your war actually deployed? If your ROOT.war is a directory (exploded war mode), then you need to create an empty file name "ROOT.war.dodeploy" to tell JBossAS to deploy it. I think JBossAS will only auto deploy packaged single .war file only.

Where is ROOT.war in AS 7 | JBoss AS 7 | JBoss Community より抜粋

これによると、デプロイ先のディレクトリにROOT.warというディレクトリを作り、ROOT.war.dodeployという名前でマーカーファイルを置けば良いらしい。このマーカーファイルがあることで、JBossはROOT.warディレクトリをデプロイすべきものとして認識してくれるようだ。ちなみにマーカーファイルの詳細については、同ディレクトリのREADOME.txtに書いてある。

これで起動すると下記のエラーになる。

JBAS018038: Root contexts can not be deployed when the virtual host configuration has the welcome root enabled, disable it and redeploy

これは、JBoss AS 7のデフォルトのルートが有効になっているのでデプロイを失敗したことを示している。

The JBossAS7 root is served from the static $JBOSS_HOME/welcome-content directory (not a servlet app).

You can still add the ROOT.war into $JBOSS_HOME/standalone/deployments directory, but you must first disable the above first. Go in your "$JBOSS_HOME/standalone/configuration/standalone.xml", then find

これの解消方法は上記の通り。%JBOSS_HOME%/standalone/configuration/standalone.xmlにある、urn:jboss:domain:web:1.1の、enable-welcome-rootをtrueからfalseに変えてやる。↓な感じ。

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="false">
        <alias name="localhost"/>
        <alias name="example.com"/>
    </virtual-server>
</subsystem>

これで、%JBOSS_HOME%/standalone/deployments/ROOT.war/sample-hoge.jspとかのファイルをとりあえず置いて、http://localhost:8080/sample-hoge.jsp にアクセスすればページが見れる。てか、WEB-INFとか要らないんですね。

JSPが更新されない?

つぎに、JBossは起動したままでsample-hoge.jspを修正してみる……が、更新されない。JBossを再起動すると反映されるのだけど、一体これは何なんだろうか不便だなぁと感じたので調べてみた。

デフォルトの状態だと jsp ファイルは変更しても反映されません。
standalone の configuration\standalone.xml ファイルを以下のように編集すると反映されるようになります。(Admin Guide の Web subsystem Configuration を見てみてください)

LIST2: 動作確認用の JSPファイル(JBoss AS 7.1用) - i am BEST - livedoor Wiki(ウィキ) より抜粋

JBoss AS 7を試してみたよ。その1 - るいもの戯れ言も参考になった。

上記によると、%JBOSS_HOME%/standalone/configuration/standalone.xmlにある、urn:jboss:domain:web:1.1に、JSPを開発モードをONにする設定が必要です、とのこと。というわけで、standalone.xmlのurn:jboss:domain:web:1.1のあたりを下記のように書き換える。

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
    <configuration>
        <jsp-configuration development="true" />
    </configuration>
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="false">
        <alias name="localhost"/>
        <alias name="example.com"/>
    </virtual-server>
</subsystem>

これでJBossを再起動し、JSPに一回アクセスして、JSPを編集してもっかいアクセスしてみる……が、更新されない。

ぐぐってみると、JBoss AS 7.1.1 Final JSP Auto Deploy | JBoss AS 7 | JBoss Communityに行き着き、#AS7-4187 jsp configuration is ignored - JBoss Issue Trackerによると、「JSP, static-resources and container settings are ignored」とあり、7.1.1.FinalにはJSPの設定が無視されるバグがあるとのこと。

これのさしあたっての解消方法は、webモジュールのjarを変えてやればよい、とのこと。具体的な手順は下記のとおり。

1. Please make sure to add



in standalone.xml under

2. Go to jboss-as-7.1.1.Final/modules/org/jboss/as/web/main
Place the jboss-as-web-7.1.1.Final-RECOMPILE.jar in there. You can download from http://www.datafilehost.com/download-2cb9ff04.html

3. Open module.xml (jboss-as-7.1.1.Final/modules/org/jboss/as/web/main) and add the following line



4. You are done. Enjoy.

JBoss AS 7.1.1 Final JSP Auto Deploy | JBoss AS 7 | JBoss Community

1.はともかくとして、2.のURLからfix版のjarをDLしてくる。リンク先が怪しくてイヤな場合は、7.1.1.finalより後のjarをどっかから探すか無ければ自前でビルドすればよいでしょう。3.で、2.でDLしたjarを%JBOSS_HOME%\modules\org\jboss\as\web\mainに置いて、module.xmlを下記のように編集する。

    <resources>
        <!-- resource-root path="jboss-as-web-7.1.1.Final.jar"/ -->
        <resource-root path="jboss-as-web-7.1.1.Final-RECOMPILE.jar"/>
        <resource-root path="jasper-jdt-7.0.3.Final.jar"/>
        <resource-root path="jbossweb-7.0.13.Final.jar"/>
        
        <!-- Insert resources here -->
    </resources>

これでJBoss起動中にJSPしても変更が反映されるようになった。