[Seasar-user:21776] Re: 2つのDB接続方法について

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2013年 12月 26日 (木) 13:20:48 JST


中村(taedium)です。

検索用と更新用のJdbcManagerは、
次のURLで示されているような方法で
それぞれ別のServiceにするとわかりやすいかもしれません。

http://s2container.seasar.org/2.4/ja/s2jdbc_service.html#複数のデータソース

その上で、それぞれのJdbcManagerが利用するデータソースについては、
SelectableDataSourceProxyを使ってユーザーごとに切り替えるのがいいと思います。
SelectableDataSourceProxyについては以下のURLに記載があります。

http://s2container.seasar.org/2.4/ja/jdbc.html#DataSourceDynamicSwiching

> 1.useXXXメソッドで、「S2AbstractService.jdbcManager」 へ元DB、承認DBを設定しておりますが、
> 更新ユーザーと承認ユーザーの処理が同時に動いた場合、正しく動作するのでしょうか。

Serviceを共有していなければ(prototypeなら)、スレッドの競合に関する
問題は特にないと思います。


2013年12月25日 17:38  <pianyi @ mail.goo.ne.jp>:
> いつもお世話になっております。
> pianyiと申します。
>
> 現在下記のような処理の流れで、2つのDB接続を行おうWebシステムを考えております。
>
> 大まかなシステム全体の流れは下記になります。
> ・更新ユーザーと、承認ユーザーがいます。
> ・更新ユーザーは、元データベースから検索を行い、承認データベースへInsert(Update)を行います。
> ・承認ユーザーは、承認データベースから検索を行い、承認データベースへUpdateを行います。
> ・夜間バッチは、承認データベースから、元データベースへInsert(Update)を行います。
>
>
> これを実現するため、下記のようなabstractクラスを作成しました。
> 各サービスクラスは、abstractを継承して実装するようにルール化しています。
> 下記実装方法について疑問がありますので、よろしくお願いします。
>
> 1.useXXXメソッドで、「S2AbstractService.jdbcManager」 へ元DB、承認DBを設定しておりますが、
> 更新ユーザーと承認ユーザーの処理が同時に動いた場合、正しく動作するのでしょうか。
>
> 2.「S2AbstractService.jdbcManager」 に直接参照されないようにするため、
> 「protected JdbcManager jdbcManager;」を追加しましたが、他に良い方法がありましたら教えて頂けないでしょうか。
>
> 3.下記のような実装では無く、推奨なやり方があれば教えて下さい。
>   (S2Daoの場合はパッケージ名を元にインターセプターで切り分ける方法が見つかったのですが、
>    S2JDBCはインターセプターが使えないので、出来ないと思っています)
>
> 以上、ご教授願います。
>
> ---------------------- ここから ----------------------
> public abstract class AbstractJdbcService<T> extends S2AbstractService<T> {
>     /** 親クラスの変数を隠蔽する */
>     protected JdbcManager jdbcManager;
>     private JdbcManager updateJdbcManager;
>     private JdbcManager searchJdbcManager;
>     public void setUpdateJdbcManager(JdbcManager jdbcManager) {
>         this.updateJdbcManager = jdbcManager;
>     }
>     public void setSearchJdbcManager(JdbcManager jdbcManager) {
>         this.searchJdbcManager = jdbcManager;
>     }
>
>     public JdbcManager getUpdateJdbcManager() {
>         super.jdbcManager = this.updateJdbcManager;
>         return this.updateJdbcManager;
>     }
>     public JdbcManager getSearchJdbcManager() {
>         super.jdbcManager = this.searchJdbcManager;
>         return this.searchJdbcManager;
>     }
>
>     public void useUpdate(){
>         super.jdbcManager = this.updateJdbcManager;
>     }
>     public void useSearch(){
>         super.jdbcManager = this.searchJdbcManager;
>     }
> }
> ---------------------- ここまで ----------------------
>
>
> 環境:
> Seasar2 2.4.47
> sa-struts-1.0.4-sp9
> S2JDBC
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user



-- 
Toshihiro Nakamura


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