SelectableDataSourceProxy
知らないクラスがあった。これは、便利そうなヨカーン。
org.seasar.extension.component.impl.SelectableDataSourceProxy
他のデータソースに委譲するデータソースのプロキシです。
このプロキシはWEBアプリケーション等でユーザごとに異なったデータソースを切り替えたい場合に使われることを想定しています。
データソースを利用するDAOはこのプロキシをデータソースとして使用します。
委譲先のデータソースはスレッドコンテキスに設定された名前を使ってS2コンテナから取得されます。
S2AOPのインターセプタを作成してスレッドコンテキストにユーザが使用する実際のデータソース名を設定します。
public Object invoke(MethodInvocation invocation) throws Throwable {
String currentName = proxy.getDataSourceName();
try {
String dataSourceName = ...
proxy.setDataSourceName(dataSourceName); //スレッドコンテキストにデータソース名を設定
return invocation.proceed();
} finally {
proxy.setDataSourceName(currentName);
}
}
DAOはスレッドコンテキストに設定された名前を持つデータソースを使ってデータベースにアクセスできます。
@author koichik