[Seasar-user:3683] Re: コネクションプール
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2006年 5月 24日 (水) 01:01:11 JST
小林 (koichik) です.
Date: Sat, 20 May 2006 03:00:54 +0900
From: Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:3665] Re: コネクションプール
> > 複数のコネクションプールを設定してユーザの種類によって
> > 接続DBを変えたいのですが、可能でしょうか?
>
> DataSource の Proxy みたいなのを作るのはいかがでしょうか?
org.seasar.extension.component.impl.SelectableDataSourceProxy
というクラスをトランク (S2.4 系),ブランチ (S2.3 系) 両方の
SVN にコミットしました.
これを例えば datasource.dicon なんかに記述して,
<components>
<include path="datasource1.dicon"/>
<include path="datasource2.dicon"/>
<component
class="org.seasar.extension.component.impl.SelectableDataSourceProxy"
/>
</components>
datasource1.dicon および datasource2.dicon には別々の
名前の付いた DataSource を定義しておきます.
次のようなインターセプタを用意します.
public class SelectDataSourceInterceptor implements MethodInterceptor {
private SelectableDataSourceProxy proxy;
public void setDataSourceProxy(SelectableDataSourceProxy proxy) {
this.proxy = proxy;
}
public Object invoke(MethodInvocation invocation) throws Throwable {
String currentName = proxy.getDataSourceName();
try {
String dataSourceName = getDataSourceName();
proxy.setDataSourceName(dataSourceName);
return invocation.proceed();
} finally {
proxy.setDataSourceName(currentName);
}
public String getDataSourceName() {
//ユーザの種類に応じたデータソース名を返す.
}
}
getDataSourceName() メソッドが返すのは datasource1.dicon や
datasource2.dicon に定義されたデータソースの名前です.
このインターセプタをサービス層あるいはロジック層などに
適用することで,S2Dao などはユーザの種類に応じた
データソースを通して DB にアクセスすることができます.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
Seasar-user メーリングリストの案内