[Seasar-user:10305] Re: [S2Dao] 複数データソース接続時に特定ConnectionをDIする方法

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2007年 9月 4日 (火) 21:39:01 JST


中村(taedium)です。

> 現在、S2DaoのFAQを参考にして複数データソースに接続しています。
> http://www.seasar.org/wiki/index.php?FAQ%2FS2DAO#w7da6e0e
> 
> コンテナから特定のデータソースへのConnectionを受け取りたいのですが、
> どのようにすれば実現可能でしょうか?

SeasarのAPIですがBindingアノテーションを使うのが
一番楽かなぁと思います。
FAQの例をベースにするとたとえばこんな感じです。

package hogehoge.dao.dao2.impl;
public abstract class EmpDaoImpl implements EmpDao {

  private DataSource dataSource;

  @Binding("jdbc2.dataSource")
  public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
  }

  public Emp selectById(Integer id) {
    Connection conn = dataSource.getConnection();
    //・・・
  }
}

リンク先のcustomizer.diconの定義は少し変更する必要があります。

<component name="dao2SupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
  <property name="interceptorName">"dao2.interceptor"</property>
  <initMethod name="addClassPattern">
    <arg>"hogehoge.dao.dao2"</arg>
    <arg>".*Dao(Impl)?"</arg>
  </initMethod>
</component>

> 例えばFAQのサンプルでいくと、jdbc1とjdbc2というデータソースがあって、
> jdbc1へのConnectionを参照したいのです。

あっ、jdbc2のConnectionをとる例になっちゃいました。
適当に読み替えてください。
-- 
Toshihiro Nakamura




Seasar-user メーリングリストの案内