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