[Seasar-user:4064] Re: Daoにそれぞれのデータソースを割り当てたい【解決】
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2006年 7月 13日 (木) 12:41:23 JST
関です。
JUNDUさん、ありがとうございます。
JUNDUさんの言うように FileSystemComponentAutoRegister の設定を追加する事で
期待する動作が行われました。これでまた一歩前進(^^
コンポーネントに InterceptorChain を追加した際に
addClassPattern で設定を投入する事で、実際のファイルにも
反映されているものと勘違いしていたことが原因でした。
以下に(パッケージ内の)クラス毎にデータソースを使い分ける方法を
まとめておきます。ただ、不幸にもS2 2.4からはdicon構成が
変わってしまうので使えないかも?
** 参考 ******************************************
1. j2ee の 作成
j2ee.dicon を3個に分ける
1-1. j2ee.dicon
以下の3個の設定を削除、共通部分を作成する
org.seasar.extension.dbcp.impl.XADataSourceImpl
org.seasar.extension.dbcp.impl.ConnectionPoolImpl
org.seasar.extension.dbcp.impl.DataSourceImpl
1-2. j2ee_hssql.dicon
1-3. j2ee_mysql.dicon
以下の3個の設定を記述、DataSourceを作成する
org.seasar.extension.dbcp.impl.XADataSourceImpl
org.seasar.extension.dbcp.impl.ConnectionPoolImpl
org.seasar.extension.dbcp.impl.DataSourceImpl
2. j2ee と Interceptor のマッピング
dao.dicon をコピーして2個作成する
2-1. dao_hssql.dicon
2-2. dao_mysql.dicon
それぞれが使用するDataSourceを含んだj2ee〜〜をインクルードし、
Interceptorを用意する。
3. Interceptor と InterceptorChain のマッピング
allaop.dicon を修正し daoInterceptorChain を2個にする
3-1. allaop.dicon
dao〜〜.dicon で作成したInterceptorを含む
InterceptorChain を2個作成する。
4. InterceptorChain とコンポーネントのマッピング と コンポーネントと クラスのマッピング
4-1. app.dicon
AspectAutoRegister で InterceptorChain をコンポーネントに適応
FileSystemComponentAutoRegister で実際のパッケージのクラスをコンポーネント化する
この流れで、クラスファイル毎にj2eeのDataSourceを適応する事が出来ました。
******************************************************
= 1-1. j2ee.dicon ============================================================
<components namespace="j2ee">
<component name="transactionManager"
class="org.seasar.extension.jta.TransactionManagerImpl"/>
<component name="requiredTx"
class="org.seasar.extension.tx.RequiredInterceptor"/>
<component name="requiresNewTx"
class="org.seasar.extension.tx.RequiresNewInterceptor"/>
<component name="mandatoryTx"
class="org.seasar.extension.tx.MandatoryInterceptor"/>
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
</components>
= 1-2. j2ee_hssql.dicon ============================================================
<components namespace="j2ee_hssql">
<include path="j2ee.dicon"/>
<!-- MSSQL -->
<component name="xaDataSourceHsSql"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"org.hsqldb.jdbcDriver"
</property>
<property name="URL">
"jdbc:hsqldb:hsql://localhost:9001"
</property>
<property name="user">"user"</property>
<property name="password">"pass"</property>
</component>
<component name="connectionPoolHsSql"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<property name="XADataSource">xaDataSourceHsSql</property>
<destroyMethod name="close"/>
</component>
<component name="dataSourceHsSql"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPoolHsSql</arg>
</component>
</components>
= 1-3. j2ee_mysql.dicon ============================================================
<components namespace="j2ee_mysql">
<include path="j2ee.dicon"/>
<!-- MYSQL -->
<component name="xaDataSourceMySql"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"com.mysql.jdbc.Driver"
</property>
<property name="URL">
"jdbc:mysql://localhost/database"
</property>
<property name="user">"user"</property>
<property name="password">"pass"</property>
</component>
<component name="connectionPoolMySql"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<property name="XADataSource">xaDataSourceMySql</property>
<destroyMethod name="close"/>
</component>
<component
name="dataSourceMySql"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPoolMySql</arg>
</component>
</components>
= 2-1. dao_hssql.dicon ============================================================
<components namespace="dao_hssql">
<include path="j2ee_hssql.dicon"/> <!-- HSSQL -->
<include path="j2ee.dicon"/>
<component
class="org.seasar.dao.impl.FieldAnnotationReaderFactory"/>
<component
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component name="interceptor"
class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
</components>
= 2-2. dao_mysql.dicon ============================================================
<components namespace="dao_mysql">
<include path="j2ee_mysql.dicon"/> <!-- MYSQL -->
<include path="j2ee.dicon"/>
<component
class="org.seasar.dao.impl.FieldAnnotationReaderFactory"/>
<component
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component name="interceptor"
class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
</components>
= 3-1. allaop.dicon ============================================================
<components>
<include path="aop.dicon"/>
<include path="dao_hssql.dicon"/> <!-- HSSQL -->
<include path="dao_mysql.dicon"/> <!-- MYSQL -->
<include path="j2ee.dicon"/>
<component
name="actionThrowsInterceptor"
class="examples.jsf.interceptor.ActionThrowsInterceptor"
/>
<component
name="actionInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain"
>
<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethod name="add"><arg>actionThrowsInterceptor</arg></initMethod>
</component>
<component
name="logicInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain"
>
<initMethod name="add"><arg>aop.traceThrowsInterceptor</arg></initMethod>
<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
</component>
<!-- HSSQL -->
<component
name="daoInterceptorChainHsSql"
class="org.seasar.framework.aop.interceptors.InterceptorChain"
>
<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethod name="add"><arg>dao_hssql.interceptor</arg></initMethod>
</component>
<!-- MYSQL -->
<component
name="daoInterceptorChainMySql"
class="org.seasar.framework.aop.interceptors.InterceptorChain"
>
<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethod name="add"><arg>dao_mysql.interceptor</arg></initMethod>
</component>
</components>
= 4-1. app.dicon ============================================================
<components>
<include path="jsf.dicon"/>
<include path="dao_hssql.dicon"/>
<include path="dao_mysql.dicon"/>
<include path="examples/jsf/dicon/allaop.dicon"/>
<include path="examples/jsf/dicon/allconverter.dicon"/>
<include path="examples/jsf/dicon/allvalidator.dicon"/>
<include path="examples/jsf/dicon/foreach.dicon"/>
<include path="examples/jsf/dicon/selectmanycheckbox.dicon"/>
<include path="examples/jsf/dicon/selectmanylistbox.dicon"/>
<include path="examples/jsf/dicon/selectonemenu.dicon"/>
<include path="examples/jsf/dicon/selectoneradio.dicon"/>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<property name="instanceDef">
@[E-MAIL ADDRESS DELETED]
</property>
<initMethod name="addClassPattern">
<arg>"examples.jsf.action.impl"</arg>
<arg>".*ActionImpl"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister"
>
<property name="interceptor">actionInterceptorChain</property>
<initMethod name="addClassPattern">
<arg>"examples.jsf.action.impl"</arg>
<arg>".*ActionImpl"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<property name="instanceDef">
@[E-MAIL ADDRESS DELETED]
</property>
<initMethod name="addClassPattern">
<arg>"examples.jsf.dto"</arg>
<arg>".*Dto"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<initMethod name="addClassPattern">
<arg>"examples.jsf.logic.impl"</arg>
<arg>".*LogicImpl"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister"
>
<property name="interceptor">logicInterceptorChain</property>
<initMethod name="addClassPattern">
<arg>"examples.jsf.logic.impl"</arg>
<arg>".*LogicImpl"</arg>
</initMethod>
</component>
<!-- HSSQL -->
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<initMethod name="addClassPattern">
<arg>"examples.jsf.daohssql"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<!-- MYSQL -->
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<initMethod name="addClassPattern">
<arg>"examples.jsf.daomysql"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<!-- HSSQL -->
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister"
>
<property name="interceptor">daoInterceptorChainHsSql</property>
<initMethod name="addClassPattern">
<arg>"examples.jsf.daohssql"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<!-- MYSQL -->
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister"
>
<property name="interceptor">daoInterceptorChainMySql</property>
<initMethod name="addClassPattern">
<arg>"examples.jsf.daomysql"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
</components>
** 参考 ココマデ ******************************************
Seasar-user メーリングリストの案内