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