Seasar2の設定ファイル(diconファイル)
Seasar2の設定ファイル(diconファイル)について学習(学習中)。
id:higayasuoさんの案内+各種ウェブ情報を読んでの私のメモです。
いろいろ動かしてみたわけではないので、間違いなどは後日別エントリで晒せればと思います。
SAStrutsに触ろう!な勢いだったのですが、この辺りはSAStrutsの学習とちょっと離れてきていることに徐々に気がついてきました(w
早くも"けものみち入り"(w
ともあれ、Seasar2の一部復習と勉強を兼ねて。
resources/s2container.dicon
Seasar2自身をカスタマイズする設定ファイルがs2container.diconです。
私の理解では、Seasar2のデプロイ方法を変更するためのdiconファイル。
デプロイ方法には"熱い"順に
- HOT deploy
- WARM deploy
- COOL deploy
の3種類があり、これらを総称してSMART deployと呼びます。
- HOT deploy
- コードを書いている時に利用する。アプリケーションサーバを起動したままでソースコードの修正が即座に反映される。
- WARM deploy
- 主にJUnitでのテストを想定。必要なコンポーネントだけがデプロイされ、修正を即座に認識しない。
- COOL deploy
- パフォーマンス重視で運用時に利用する。アプリケーションの起動時にすべてのデプロイを行う。
以下がファイルの内容
<?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="warmdeploy.dicon"/> <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/> <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/> </components>
- #ENVは、env.txtの内容を示している。
- warmdeploy.dicon、hotdeploy.dicon、cooldeploy.diconは s2-framework-xxx.jarの中に含まれているので存在を気にしなくて良い。
resources/convention.dicon
規約を定義しているのがconvention.diconです
私の理解では、上記SMART deployの規約を定義するためのdiconファイルで、アプリケーションのネーミング規約を定義するファイル
Seasar2では、以下のようなパッケージ構成を推奨している。
hogepkg/action
hogepkg/dto
hogepkg/logic
hogepkg/xxx
この場合はルートパッケージがhogepkgとなるため、convention.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> <component class="org.seasar.framework.convention.impl.NamingConventionImpl"> <initMethod name="addRootPackageName"> <arg>"hogepkg"</arg> </initMethod> </component> <component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/> </components>
複数のサブシステムに分割した場合などは、ルートパッケージが複数指定でき、
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <component class="org.seasar.framework.convention.impl.NamingConventionImpl"> <initMethod name="addRootPackageName"> <arg>"hogepkg.foopkg"</arg> </initMethod> <initMethod name="addRootPackageName"> <arg>"hogepkg.barpkg"</arg> </initMethod> </component> <component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/> </components>
のような書き方もOK。
ちなみにこのdiconファイルに登録されている『PersistenceConventionImpl』はS2JDBCで利用されるコンポーネント。
テーブルとエンティティ名、カラム名とフィールド名のマッピングに利用される。
resources/creator.dicon
ルートパッケージ.actionなどにおいたJavaの設定情報を自動的に作成するための設定ファイルがcreator.diconです
私の理解では、どの名前のサブパッケージをSMART deployの対象とするのか?を設定するための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="convention.dicon"/> <include path="customizer.dicon"/> <component class="org.seasar.framework.container.creator.ActionCreator"/> <component class="org.seasar.framework.container.creator.LogicCreator"/> <component class="org.seasar.framework.container.creator.DtoCreator"/> <component class="org.seasar.framework.container.creator.InterceptorCreator"/> </components>
org.seasar.framework.container.creator.XXXCreatorには上記の他に、
- org.seasar.framework.container.creator.DxoCreator
- org.seasar.framework.container.creator.DaoCreator
- org.seasar.framework.container.creator.HelperCreator
- org.seasar.framework.container.creator.InterceptorCreator
- org.seasar.framework.container.creator.ValidatorCreator
などがある。
resources/customizer.dicon
クリエータが作成した設定情報をカスタマイズするための設定ファイルがcustomizer.diconです
私の理解では、creator.diconで登録されるサブパッケージのコンポーネントの振る舞いをカスタマイズ(再定義)するためのdiconファイル
といった定義を行うdiconファイル。
XXActionやXXLogicに機能を追加したりする場合に出番が来る感じ。
SAStrutsの動作もここで定義されているので、実際に読んでみるのが学習の近道になりそう。
<?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="default-customizer.dicon"/> <component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addAspectCustomizer"> <arg>"aop.traceInterceptor"</arg> </initMethod> <initMethod name="addAspectCustomizer"> <arg>"actionMessagesThrowsInterceptor"</arg> </initMethod> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/> </arg> </initMethod> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.struts.customizer.ActionCustomizer"/> </arg> </initMethod> </component> <component name="logicCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addAspectCustomizer"> <arg>"aop.traceInterceptor"</arg> </initMethod> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/> </arg> </initMethod> </component> </components>
resources/jdbc.dicon
JDBCデータソースを定義するdiconファイルで、データベースアプリケーションには必須のdiconファイル
データソース毎に設定例が書かれているので、コメントを付けたり外したりして設定する。
私が良く使いそうなH2とOracleの部分だけ抜粋します。
<!-- for H2 --> <!-- <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "org.h2.Driver" </property> <property name="URL"> "jdbc:h2:file:" + @org.seasar.framework.util.ResourceUtil@getBuildDir(@examples.entity.JdbcManagerTest@class).getCanonicalPath() + "/data/demo;DB_CLOSE_ON_EXIT=FALSE" </property> <property name="user">"sa"</property> <property name="password"></property> </component> --> <!-- for Oracle --> <!-- <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "oracle.jdbc.driver.OracleDriver" </property> <property name="URL"> "jdbc:oracle:thin:@xxx:1521:xxx" </property> <property name="user">"xxx"</property> <property name="password">"xxx"</property> </component> -->
resources/s2jdbc.dicon
S2JDBCで使われるdiconファイル。 使用するデータソースに合わせてdialect(SQL文の方言)を調整するもの
<?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="jdbc.dicon"/> <include path="s2jdbc-internal.dicon"/> <component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl"> <property name="maxRows">0</property> <property name="fetchSize">0</property> <property name="queryTimeout">0</property> <property name="dialect">hsqlDialect</property> <!-- <property name="dialect">db2390Dialect</property> <property name="dialect">db2400Dialect</property> <property name="dialect">db2Dialect</property> <property name="dialect">derbyDialect</property> <property name="dialect">firebirdDialect</property> <property name="dialect">h2Dialect</property> <property name="dialect">hsqlDialect</property> <property name="dialect">interbaseDialect</property> <property name="dialect">maxdbDialect</property> <property name="dialect">mssql2005Dialect</property> <property name="dialect">mssqlDialect</property> <property name="dialect">mysqlDialect</property> <property name="dialect">oracleDialect</property> <property name="dialect">postgreDialect</property> <property name="dialect">standardDialect</property> <property name="dialect">sybaseDialect</property> --> </component> </components>