- PR -

コネクションが閉じられる・・・?

投稿者投稿内容
ノヴァ
会議室デビュー日: 2006/03/31
投稿数: 14
投稿日時: 2006-04-12 11:39
まず、親クラス内にて、
コード:
public class ActionBase extends Action implements Serializable {

    public DaoUtil daoUtil = null;
    public Connection con = null;

    public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response)
        throws Exception {
        
        if(daoUtil == null){
            daoUtil = new DaoUtil();
        }

        ActionForward actionForward = null;     
        try {

        	actionForward = TESTexecute(mapping,form,request,response);

        } catch (Exception x) {
            x.printStackTrace();
        }    	
        return actionForward;

    }

    public ActionForward TESTexecute(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)
            throws Exception {
        
        ActionForward actionForward = new ActionForward();
        
        return actionForward;
    }
}


となっていて、子クラスはこの親クラス(ActionBase)を継承します。

子クラスは、
コード:
public class NewDposAppAction extends ActionBase {

	public ActionForward TESTexecute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		try {

	             con = daoUtil.getConnection();
	             con.setAutoCommit(false);

                          <途中省略>

                  }catch(Exception e){
                      throw e;
                  }finally{
                      if(!con.isClosed()){
                          con.close();
                      }
                  }
        }
}


という形で使用しています。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-04-12 11:53
やはりそうですか。con変数をインスタンス変数でなくローカル変数にしてください。
それで問題が解決したら、以下のURLをきちんと読んでみてください。ちょっと古い文章ですが
十分役に立つと思います。

http://www.jajakarta.org/struts/struts1.0/ja/target/documentation/userGuide/building_controller.html
ノヴァ
会議室デビュー日: 2006/03/31
投稿数: 14
投稿日時: 2006-04-12 19:27
ukさん、返信ありがとうございます。
返事が遅くなってしまい、申し訳ありませんでした。

引用:

con変数をインスタンス変数でなくローカル変数にしてください。


親クラスの方でcon変数をローカル変数にして、TESTexecuteメソッドの引数に渡すことによって、この問題は解決されました。
コード:
public class ActionBase extends Action implements Serializable {

    public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response)
        throws Exception {
        
        daoUtil = new DaoUtil();
        Connection con = daoUtil.getConnection();

        ActionForward actionForward = null;     
        try {

        	actionForward = TESTexecute(mapping,form,request,response, con);

        } catch (Exception x) {
            x.printStackTrace();
        }    	
        return actionForward;

    }

    public ActionForward TESTexecute(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response,
            Connection con)
            throws Exception {
        
        ActionForward actionForward = new ActionForward();
        
        return actionForward;
    }
}



各アクションが呼ばれるときに、毎回Connectionを定義してやればよいのだとわかりました。

本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)