条件インクルード
目次
一つのアプリケーションで利用されるdiconファイルであっても,状況によって異なった設定が必要になることがあります.RDBMSの接続情報などがその典型です.Seasar2.4で導入されたSMART deployでは,IDE内で単体テストを行う場合はHOT deployを使用し,結合テストや運用時にはSMART deployを使用することになります.
このような場合に,diconファイルの記述を変更することなく,環境に応じた設定をするための機能が条件インクルードです.条件インクルードでは,環境ごとに必要な設定を記述したdiconファイルを選択的にインクルードすることができます.
条件インクルードは環境別のdiconファイルをインクルードするために,2つの方法を提供します.
- 暗黙的な条件インクルード
- <include>要素の
path 属性で指定されたdicon名に,環境名(環境を表す名前)をサフィックスとして持つdiconがあればそれをインクルードする機能です.
- 明示的な条件インクルード
- OGNL式によって指定した条件が真となる場合のみdiconをインクルードする機能です.
環境名とは実行環境を表現する名前で,env.txt というテキストファイルによって指定します.このenv.txt ファイルはクラスパス上に配置します.WebアプリケーションではWEB-INF/classes になります.
env.txt の内容は環境を表す任意の名称を記述します.以下に標準的な名称を示します.
ut
単体テスト環境を表します.
ct
結合テスト環境を表します.
it
統合テスト環境を表します.
product
運用環境を表します.env.txt ファイルが存在しない場合のデフォルトです.
暗黙的な条件インクルードとは,<include>要素のpath 属性で指定されたdicon名に,環境名をサフィックスとして持つdiconがあればそれをインクルードする機能です.
暗黙的な条件インクルードを使う場合,インクルードする側のdiconは通常通り記述します.
<?xml version="1.0" encoding="UTF-8"?<
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd"
>
<components>
<include path="foo.dicon"/>
</components>
インクルードされる側のdiconは,拡張子を除いたファイル名の最後にサフィックスを付加します.サフィックスは,アンダースコアと環境名をつなげたものです.次のようになります.
foo_ut.dicon
環境名がut の場合にインクルードされます.
foo_ct.dicon
環境名がct の場合にインクルードされます.
foo.dicon
環境名がut でもct でもない場合にインクルードされます.
より複雑な状況でインクルードするdiconを切り替えたい場合には,<include> 要素のcondition 属性でインクルードする条件をOGNL式で明示的に指定することができます.この場合には,指定された条件が満たされた場合のみ,指定されたdiconがインクルードされます.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd"
>
<components>
<include condition="#ENV == 'ut'" path="hotdeploy.dicon"/>
<include condition="#ENV != 'ut'" path="cooldeploy.dicon"/>
</components>
この例では,#ENV で参照することのできる環境名が'ut' (単体テスト)であればHOT deployのdiconを,それ以外であればCOOL deployのdiconをインクルードします.
<include> 要素のcondition 属性にはstatic メソッドの呼び出しを含む任意のOGNL式を記述することができます.OGNL式については「OGNLガイド」を参照してください.
|