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

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2013年 12月 25日 (水) 17:38:53 JST


いつもお世話になっております。
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 メーリングリストの案内