[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 メーリングリストの案内