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