전자정부표준프레임워크를 설치하고

템플릿 프로젝트를 임포트했다면 기본적으로 ibatis설정으로 되었을 것이다.

그리고 로그는 log4j에 의해서 로그가 남는다.


log4j2.xml 파일을 찾아

<logger name="java.sql.Connection" level="INFO" additivity="false">

<appender-ref ref="console" />

</logger>

에서 INFO를 DEBUG로 변경하면 로그를 볼 수 있다.


또한 java.sql 객체의 각 항목별로 적용하려면 각 항목별 아래 소스를 추가하면 된다.


<logger name="java.sql.Connection" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>

<logger name="java.sql.PreparedStatement" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>

<logger name="java.sql.Statement" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>

<logger name="java.sql.ResultSet" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>


로그 결과물은 다음과 같이 보여진다.



쿼리와 쿼리에 들어가는 파라미터

그리고 쿼리 결과까지

쿼리 결과를 보고 싶지 않다면 java.sql.ResultSet 부분을 지우면 된다.


그런데 문제가 있다.

쿼리는 preparestatement 상태의 쿼리를 보여준다. 즉

SELECT NAME FROM USER WHERE ID = ?

위와같이 파라미터로 들어가는 값은 ? 물음표 표시로 보여진다. 여기에 파리미터를 순서로 적용된 쿼리가 실제 실행되는 쿼리가 된다.


파라미터가 한두개면 각 쿼리에 적용해서 디버깅 하겠지만 파라미터가 많아지고 복잡해 진다면 파라미터를 넣어서 실행하기는 쉽지 않다.


그래서 실행되는 쿼리 자체의 문자열을 받아보고 디버깅을 하고 싶을 것이다.


이런 경우 

log4jdbc-remix 를 사용한다.


우선 pom.xml 에 추가

<dependency>  

<groupId>org.lazyluke</groupId>  

  <artifactId>log4jdbc-remix</artifactId>  

  <version>0.2.4</version>  

</dependency>  


<dependency>  

  <groupId>org.slf4j</groupId>  

  <artifactId>slf4j-log4j12</artifactId>  

  <version>1.6.1</version>  

</dependency>


context-datasource.xml에서 오라클인 경우

    <!-- Oracle -->

    <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

        <property name="driverClassName" value="${Globals.DriverClassName}"/>

        <property name="url" value="${Globals.Url}" />

        <property name="username" value="${Globals.UserName}"/>

        <property name="password" value="${Globals.Password}"/>

    </bean> 

    <bean id="dataSource-oracle" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">

    <constructor-arg ref="dataSourceSpied" />

    <property name="logFormatter">

    <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">

    <property name="loggingType" value="MULTI_LINE" />

    <property name="sqlPrefix" value="SQL:::" />

    </bean>

    </property>

    </bean>


기존의 datasorce 빈 생성 부분아래에

log4jdbc-remix로 연결하는 설정을 추가해 준다.

기존 빈은 참조 아이디로 사용되므로 알맞게 변경해 주면 된다..

추가된 빈은 dataSource-oracle로 아이디를 설정한다.


왜냐하면 윗부분에 dataSource를 alias로 설정하는 부분이 있으므로 상단부분을 수정하지 않을것이면

그대로 사용하는것이 편하다.




전자정부프레임워크 공통컴포넌트를 설치하는 중 아래와 같은 에러 화면이 떳다.

DB 테이블과 데이터를 입력하여야 하는데 이클립스에 DB에 대한 정보가 없다는 것이다.




전자정부프레임워크에는 탐색기영역에 기본으로 Data Source Explorer 탭이 있다.

없는 경우는 아래와 같이 설정하면 된다.



Database Connection 항목을 우클릭 하여 New를 클릭한다.






처음 해당 화면으로 오면 드라이버 리스트도 비어있고 아래 항목에 입력을 할 수가 없다

드라이버가 없기 때문이다.

드라이버스 콤보박스 옆의 추가 버튼을 클릭한다.



오라클드라이버를 선택하면 아래와 같은 에러 문구가 뜬다.

이클립스에 오라클 접속 드라이버가 없기 때문이다.

오라클은 상용프로그램이므로 드라이버를 이클립스가 제공할 수 없기 때문일 것이다.


JAR List 탭을 클릭하여 해당 드라이버 jAR파일을 설정하면 된다.

주의할것은 첫번째 화면에서 Oracle Thin Driver를 아무거나 클릭하고 이동하여야 한다.

제일 위에 있는 10버전을 클릭하고 이동한다.



우선 젤위에 OJDBC4.jar를 선택해서 삭제한다.

이후 ADD JAR버튼을 클릭하여 파일을 찾아 선택한다.



위와같이 이상없이 하나의 JAR파일이 선택되었을때 OK버튼이 활성화 된다.


이후 오라클 계정 정보를 입력하고 테스트 접속해보면 접속이 된다.






전자 정부 프레임 워크 학습중

통합예제 소스를 돌려보는데

엑셀다운로드에서 다음과 같이 페이지 없음이 뜬다.

/**

* excel로 변환될 페이지를 제공한다.

*/

@RequestMapping("/gds/excelDownload.do")

public ModelAndView excelDownload(@ModelAttribute("searchVO") SearchVO searchVO) throws Exception {


List<GoodsVO> goodsList = egovGoodsService.selectGoodsXml();


Map<String, Object> map = new HashMap<String, Object>();

map.put("goodsList", goodsList);


return new ModelAndView("goodsExcelView", map);

}


원인은 

dispatcher-servlet.xml 에 

BeanNameViewResolver 설정이 없어서 그렇다.


bean을 서블릿 뷰단으로 표시해주는 설정이다.


<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">

<property name="order" value="0" />

</bean>


dispatcher-servlet.xml 에  위소스를 추가하면 엑셀 다운로드가 가능하다.


참고로 위 return new ModelAndView("goodsExcelView", map); 에서

BeanNameViewResolver 설정이 없다면 goodsExcelView.jsp파일을 찾아서 뷰로 표시할려고 한다.

따라서 해당 jsp가 없기때문에 페이지 없음 표시가 나는것이다.




+ Recent posts