Seasar DI Container with AOP

条件インクルード

目次

条件インクルードとは

一つのアプリケーションで利用される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ガイド」を参照してください.