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には上記の他に、

などがある。

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は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>