Seasar2覚書
Eclipseプラグイン
Eclipseプラグイン
http://eclipse.seasar.org/updates/3.3/ から
http://eclipse.seasar.org/updates/3.2/ から
- DbLauncher
を導入
プロジェクトの作成はDoltengから
ドゥルテン
Webアプリケーションでなければ、「スタンドアロン」にして
ルートパッケージ下のファイルがHot Deployなどされるらしい
ルートパッケージはconvention.diconで設定されている。org.seasar.framework.convention.impl.NamingConventionImpl#addRootPackageName()で。
以下のファイルが自動でdeploy対象になる(SMART deploy)
命名規則 | コンポーネントのライフサイクル | 説明 |
---|---|---|
ルートパッケージ.action.*Action | request | SAStrutsのアクションクラス |
ルートパッケージ.form.*Form | request | SAStrutsのアクションフォーム |
ルートパッケージ.dao.*Dao | prototype | DAO |
ルートパッケージ.dto.*Dto | request | DTO |
ルートパッケージ.interceptor.*Interceptor | prototype | インターセプター |
ルートパッケージ.service.*Service | prototype | サービスクラス |
この設定はcreator.diconによって決定されているらしい
Kijimuna
Eclipse上でプロジェクトを右クリック→プロパティ→Kijimuna設定ページで[Seasar2プロジェクト]にチェック、[プロジェクト固有の設定を有効にする]にチェック→[自動インジェクションでnullが設定される場合]をIgnoreに設定
基本メソッド
普通はSingletonS2COntainerFactory, SingletonS2Container
S2ContainerFactory
- #setConfigPath("sample/my.dicon")
- デフォルトapp.diconから変更したいとき
- #init()
- コンテナの初期化 (singletonのコンポネントも初期化) webアプリの場合はS2ContainerServletが自動的に呼び出すので、明示的に呼び出す必要はない
- #destoroy()
- コンテナの廃棄
S2Container
- #getComponent({foo.class or "論理名"})
- 指定した[クラス/インターフェイス]の[継承クラス/実装クラス]をS2Containerから探してきて注入する(初期化)。候補が複数ある場合はTooManyRegistrationRuntimeException
S2Container container = S2ContainerFactory.create("hello.dicon"); Greeting greeting = (Greeting) container.getComponent(sample3.Greeting.class);
この場合、container設計元diconである"hello.dicon"からsample3.Greeting.classの[実装/継承]クラスを探してきて注入する。一意に定まらなければエラー。
diconファイル
- namespace
- initializeOnCreate
- 既定false コンテナ生成時にコンテナを初期化するかどうか
- name
- name="messageTarget"。注入に論理名を使用したいとき(クラスを指定したときそれを継承/実装する候補が複数あって一意に定まらないとき利用)。
- class(必須)
- class="test.helloworld.SeasarMessageTarget"
- instance
- autoBinding
- 自動インジェクション auto semiauto constructor property none
- externalBinding
- 外部バインディング false true
- 鄯.S2ContainerがDIするコンポネントを自動的に判別できないときに使う
messageTarget
- 鄱.セッターインジェクションで渡す引数を指定する
値
- 鄯.S2ContainerがDIするコンポネントを自動的に判別できないときに使う
- コンストラクタインジェクションで渡す引数を指定(複数の引数のときは順番に注意)
値 値
- コンストラクタインジェクションで渡す引数を指定(複数の引数のときは順番に注意)
- 初期化時に呼び出されるメソッド名 (メソッドインジェクション)
与数
- 初期化時に呼び出されるメソッド名 (メソッドインジェクション)
- 廃棄時に呼び出されるメソッド名。singletonのみ有効
- このコンポネントに適用するインターセプター名
loggingInterceptor - pointcut
- 指定した名前のメソッドにのみインターセプター適用(カンマ区切りで複数選択可)
- このコンポネントに適用するインターセプター名
diconファイルを複数に分割する
親からは子を参照できるが、子からは親を参照不可能
- path
- condition
- インクルード条件。OGNL式を記述し、trueならインクルードする
diconファイルのインクルード方法
1.
2. SimplePathResolverのaddRealPath()でリマップする
<component class="org.seasar.framework.container.factory.SimplePathResolver"> <initMethod name="addRealPath"> <arg>"from.dicon"</arg> <arg>"to.dicon"</arg> </initMethod> </component>
3. XIncludeを利用する (
<components xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="/foo.dicon"/> <xi:include href="/bar.dicon"/> </components>
環境によるdiconファイル切り替え
クラスパスルートにenv.txtを置き、以下の環境名のうちのどれかを記述
環境名 | 説明 | Doltengプロジェクトでは |
---|---|---|
ut | 単体テスト環境 | WARM deploy |
ct | 結合テスト | HOT deploy |
it | 統合テスト | COOL deploy |
product | 運用環境(既定) | COOL deploy |
diconファイル名をapp_ut.diconのように「_環境名」にすると自動でそれを利用するようになる。
また、diconファイル内で#ENVという変数で環境名を参照可能
Javaコード内ではorg.seasar.framework.env.Env#getValue()から現環境名を、
org.seasar.framework.env.Env.UTなどからutなどの環境名を取得可能。
org.seasar.framework.container.util.SmartDeployUtil.isHotdeployMode({コンテナ})でコンテナがHot deployモードかどうかを判定できる。