[Seasar-user:2919] Re: コネクションプーリングの設定と動作
sato
sato
2005年 11月 24日 (木) 15:10:43 JST
NSQ@佐藤です。
>たにぐちです。
>
>ログだけ見ると、論理コネクションは co/ci ともに動作しており、特に問題
>はないように見えます (1回のSQL実行になぜ2回 co/ci するのかよくわかって
>いませんが…私の理解不足かも)
>
>で、2回目のときにまた物理コネクションが取得されてしまう…というところ
>に問題が集約されていますが、なんとなく ConnectionPoolのインスタンスが
>複数あるときのような挙動を示しています (diconから見るとそんなわけはな
>いのですが)。
>
>EditLogicやDaoといった自前のコンポーネントのdicon定義、 AutoRegisterで
>あればアノテーション使用の有無あたりも教えていただけませんか?
実際にDaoを呼び出しているのはServerControllerというクラスなので、そのク
ラスを業務に差し支えない部分のみで転記させていただきます。
EditLogicもEntryLogicもこのControllerをインスタンス化してからDAO経由で
データの取得および更新を行なっています
インスタンス化する度にコンテナのinitを呼び出しているのがマズイのでしょう
か・・・。
---[ServerController]-----------------------------------
public class ServerController{
private S2Container container;
private WatchingServerDao dao;
public ServerController() {
container = S2ContainerFactory.create("web/application/
dao/UsersDao.dicon");
container.init();
dao = (WatchingServerDao) container.getComponent
(WatchingServerDao.class);
}
public WatchingServer getServer(int code) {
Logger.info(getClass().getName() + "#getServer");
return dao.select(code);
}
public void entryServer(ServerForm sf) {
WatchingServer server = dao.select(sf.getServer_code());
if ( server == null) {
dao.insert(sf);
} else {
dao.update(sf);
}
}
}
---------------------------------------------------
---[WatchingServerDao]-----------------------------
public interface WatchingServerDao {
public Class BEAN = WatchingServer.class;
public static final String select_QUERY = "server_code = ?";
public WatchingServer select(int code);
public int insert(WatchingServer bean);
public int update(WatchingServer bean);
public int delete(WatchingServer bean);
}
---------------------------------------------------
※diconファイルは[Seasar-user:2918]でのひがさんに指摘頂いたので、修正し
ています。修正しましたが、動作は変わっていません。
---[Users.dicon]-----------------------------------
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components>
<include path="dao.dicon"/>
<component class="web.application.dao.UsersDao">
<aspect>dao.interceptor</aspect>
<aspect>j2ee.requiredTx</aspect>
</component>
<component class="web.application.dao.WatchingServerDao">
<aspect>dao.interceptor</aspect>
<aspect>j2ee.requiredTx</aspect>
</component>
<component class="web.application.dao.WatchingItemDao">
<aspect>dao.interceptor</aspect>
<aspect>j2ee.requiredTx</aspect>
</component>
</components>
---------------------------------------------------
>なかなかスパッと原因が見つけられず申し訳ないです
いえいえ。大変感謝しております。
Seasar-user メーリングリストの案内