Strutsでコンフィグレーションファイルを分割するJavaTips 〜Apache/Jakarta編

» 2004年11月10日 10時00分 公開
[青木淳夫@IT]

 Strutsを用いたアプリケーションでは、開発規模が大きくなるに従い、設定ファイルであるstruts-config.xmlも肥大化してしまいます。そのため、可読性が下がったり、開発者間で競合が起こったりという問題が発生してしまいます。そこで本TIPSでは、web.xmlの記述方法を変更してstruts-configを分割する方法を紹介します。この解決策を用いることで、チームや機能ごとにstruts-configを管理することが可能になります。なお、ここでは2通りの分割方法を紹介します。

初期化パラメータの設定値をカンマで区切る方法

 1つ目の方法はアクションサーブレットの初期化パラメータの値をカンマで区切る方法です。

[web.xml]
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml,
/WEB-INF/struts-config2.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

 上記のweb.xmlの例では、WEB-INF配下のstruts-config.xmlとstruts-config2.xmlという設定ファイルを読み込んでいます。ActionFormとActionMappingのように設定ごとに分割したり、機能ごとに分割したりすることが可能ですが、分割したファイル間において名前が重複しないように注意する必要があります。なおStruts 1.1のサンプルである「struts-example.war」も、この方法を用いているので参考にするとよいでしょう。

モジュール化によるファイル分割を用いる方法

 もう1つの方法はモジュール化によって分割を行う方法です。

[web.xml]
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- デフォルトモジュール -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<!-- 登録モジュール -->
<init-param>
<param-name>config/reg</param-name>
<param-value>/WEB-INF/struts-config-reg.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

 上記のweb.xmlの例では、WEB-INF配下のstruts-config.xmlとstruts-config-reg.xmlという設定ファイルを読み込んでいます。

 サブアプリケーションに分割する「モジュール化」の概念は、Struts 1.1から組み込まれました。モジュール化では、プレフィックスを用いて名前空間を分割します。例えば、本稿では「reg」というプレフィックスを設定していますので、アクセスするURLは下記のようになります。

モジュール化によるURLの相違
種別 URL
デフォルトモジュール http://ホスト名/コンテキスト名/アクション名.do
登録モジュール http://ホスト名/コンテキスト名/モジュール名(reg)/アクション名.do

 このように、モジュール化を行うことで、設定ファイルや名前空間の競合を防ぐことが可能になるため、複数人数での並行開発が容易になります。しかし、その半面、モジュール間のアクセス方法など、モジュール化しない場合に比べ理解すべき内容が増えることにも注意する必要があります。

 どちらの方法を採用するかの指針としては、単純にファイルサイズが大きくなって管理が困難という場合には、カンマで区切る方法が簡単でよいでしょう。対して、チームごとにパッケージ名や機能名を保持し、大規模なシステムで並列に開発をするような場合には、モジュール化による分割が向いているといえるでしょう。

Profile

WINGSプロジェクト

青木淳夫


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。