open cursor 자원해제 관련ㅜ 0 6 2,038

by 다말이야 [2015.07.10 09:44:46]


안녕하세요

시스템 인수인계를 받아 관리도중 Open cursor 문제가 발생되어 질문드립니다.

 

해당 프로그램은 외부 프레임웍을 사용하여

DB접근합니다.. 

하지만 이 외부 프레임웍 클래스에는 close 란 클래스가 없네요 ;;

그래서 계속 DB에 open cursor 가 쌓여 apache를 restart 해줘야 하는 상황입니다.

 

프레임워크에 close가 명시되어 있지 않는 상황에서 close를 시키는 방법이 없을런지요 ㅜ 

고수님들 부탁드립니다 ㅜㅜ 

 

아래 소스 추가 합니다 ㅜ 

 

 

    protected void doFindList(aaaGenericDao dao)
    {
        aaaParameter param = new aaaParameter();
        String paramVal0 = JspUtil.getParameter(ctx,"ST_LANG","");
        String paramVal3 = JspUtil.getParameter(ctx,"IP_S_ACTN_MCLS_CD","");
        String paramVal4 = JspUtil.getParameter(ctx,"IP_S_ACTN_GRP_NM","");

        param.setWhereClauseParameter(0, paramVal0);
        param.setWhereClauseParameter(1, paramVal0);
        param.setWhereClauseParameter(2, paramVal3);
        param.setWhereClauseParameter(3, paramVal4);
        param.setWhereClauseParameter(4, paramVal4);
        param.setWhereClauseParameter(5, paramVal4);

        if (logger.isDebugEnabled()) logger.logDebug("==> LSTSEL Start: " + this.getClass().getName());
        aaaRowSet rowset = dao.find("A01060101.LSTSEL", param);
        if (logger.isDebugEnabled()) logger.logDebug("==> LSTSEL end: " + this.getClass().getName());
        ctx.put("DS_ACTN_MCLS", rowset);    /

        if( rowset.count() < 1 ){
            JspUtil.setGauceMessage(ctx,"조회결과가없습니다.");
        }
    }

by 아발란체 [2015.07.10 11:19:24]

프레임워크를 통해 자원 할당은 있는데, 반납(close)에 대한 내용이 없으면 정상적인 프레임워크가 아닌 것 같습니다.

아무튼 각설하고 메소드를 전부 보시고 그래도 없다면,

지금 구조에서 해결 방법은

근본적으로 Connection, Statement(or PrepareStatement), ResultSet 관련 인스턴스를 쓰고 반납 하지 못하여 관련 DB 자원 풀 오버 되는 것이기 때문에, 당연하게도? 해당 인스턴스를 직접 닫아주는 처리를 해주시면 될 것 같습니다.


by 다말이야 [2015.07.10 11:27:13]

프레임워크를 디코더로 까본결과 close가 없네요 ㅜ

직접 닫아준다는 것이 apahce restart & session kill 외

자바에서 처리하는 방법는 진정 없는건가요?! ㅜㅜ


by 아발란체 [2015.07.10 12:18:40]

ㅡ ㅁ ㅡ); 디컴파일은 굳이 안하셔도, 이클립스로 개발하시죠? 해당 프레임워크 라이브러리 API 트리를 볼 수 있습니다. 또한 해당 API에 대해 Ctrl + 스페이스 키를 누르면 해당 API 접근 할 수 있는 모든 메소드 및 변수를 확인 할 수 있습니다.

아무튼 찾기 힘들다면, 프레임워크를 가져다 쓰는 부분들을 보면 결국 쓰기 위해 메모리 할당하는 부분(생성자)에 있는 인스턴스를 찾아서 직접 닫아주시면 됩니다.


by 다말이야 [2015.07.10 14:25:07]

란체님 답변 감사드리며 한가지 더 질문드립니다 ㅜ 

ctr + 스페이스를 눌러 매소드 및 변수를 보면 get이나 set으로 시작되는 것들 밖에 없네요 ㅜ

클로즈, 클리어 등등 닫아줄것 같은 변수가 없는것 같은데..ㅜㅜ

이런 난감한 경우는 어떻게 해야 할까요?! ㅜ

 


by 아발란체 [2015.07.10 15:32:20]

음.. ㅡ,.ㅡ;;; 그럼 프레임워크에서 제공하는 것들이 죄다 그렇다면 프레임워크를 통해 이용하는 부분 보면 DB쪽 연계 하는 부분이 있습니다. 프레임워크일 뿐이지 결국 DB 접속하는 것은 원래 자바 JDBC API만을 이용하기 때문에 연계하는 부분... 후킹(가로채는) 수준도 아니고, 연계하는 부분만 찾아 보시면 JDBC API 접점이 분명 있습니다. 그것을 확인하시고, 닫는 처리해주시면 됩니다. 음.. 주변 자바 경험을 가지신 분이 계시면 쉽게 찾을 수 있는 부분 같습니다. 도움을 요청하시고, 왜 못찾은 부분인지 이해하시면 좋은 경험이 되실 것 같습니다.

 


by 다말이야 [2015.07.10 16:58:19]

답변감사합니다.

꼭찾아서 실력 쌓을게요 ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입