Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[iBATIS] 클래스패스 문제 (Eclipse) Computer & Program

다음과 같은 설정으로 iBATIS를 사용하려고 했다.

SqlMap의 전체 설정은 etc/ibatis/SqlMapConfig.xml에 있고, database의 접속 정보(URL, id, password 등)는 etc/ibatis/SqlMapConfig.properties에 있다. SqlMapConfig.xml 파일에서는 이 properties 파일과 SqlMap 설정 파일인 src/main/java/ibatis/dto/maps/User.xml 파일(실제 query문이 존재하는 파일)의 내용을 사용하도록 설정해 주어야 한다. 따라서 나는 다음과 SqlMapConfig.xml 파일을 생성했다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig    
  PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"    
  "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
  <!-- Database connection settings -->
  <properties resource="etc/ibatis/SqlMapConfig.properties" />
  <settings cacheModelsEnabled="true" enhancementEnabled="true"
    lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
    maxTransactions="5" useStatementNamespaces="false" />

  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="${driver}" />
      <property name="JDBC.ConnectionURL" value="${url}" />
      <property name="JDBC.Username" value="${username}" />
      <property name="JDBC.Password" value="${password}" />
    </dataSource>
  </transactionManager>

  <sqlMap resource="src/main/java/ibatis/dto/maps/User.xml" />
</sqlMapConfig>


헌데.. 이 녀석을 사용하면 자꾸 아래와 같은 에러만을 내뿜으며 파일을 못 찾으니 경로명을 제대로 넣어달라고 한다. 뭘 더 어케 넣어달라고.. 경로명 맞게 넣었자나.. TㅅT

Caused by: java.lang.RuntimeException: Error occurred.  Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/properties'.  Cause: java.lang.RuntimeException: Error loading properties.  Cause: java.io.IOException: Could not find resource etc/ibatis/SqlMapConfig.properties
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:84)
    at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:62)
    at ibatis.UserTest.<clinit>(UserTest.java:25)
    ... 22 more
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/properties'.  Cause: java.lang.RuntimeException: Error loading properties.  Cause: java.io.IOException: Could not find resource etc/ibatis/SqlMapConfig.properties
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:52)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:81)
    ... 24 more
Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/properties'.  Cause: java.lang.RuntimeException: Error loading properties.  Cause: java.io.IOException: Could not find resource etc/ibatis/SqlMapConfig.properties
    at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:113)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:74)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:92)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:62)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:50)
    ... 25 more
Caused by: java.lang.RuntimeException: Error loading properties.  Cause: java.io.IOException: Could not find resource etc/ibatis/SqlMapConfig.properties
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$2.process(SqlMapConfigParser.java:139)
    at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:111)
    ... 29 more



검색해 보니 파일을 꼭 클래스패스 내에 넣어야 한다고 한다. 홀~~ 모 이래.. 그냥 파일 읽을거면서 아무데나 있으면 어때.. TㅅT

뭐.. 달라면 달라는데로 줘야지.. 그래서 이클립스에서 프로젝트 클래스패스에 해당 경로가 포함되도록 수정하였다. 해당 파일을 클래스패스에 넣는 방법은 여러가지가 있다.

우선 해당 경로를 library에 추가하는 방법이다.
프로젝트를 마우스 오른쪽 클릭하여 "Properties"를 클릭(프로젝트를 선택하고 Alt+Enter를 하여도 동일)하면 다음과 같은 창이 열린다. 이 창의 좌측에서 "Java Build Path"를 선택하고 "Libraries" 탭을 선택한다. 오른쪽의 "Add Class Folder..."를 클릭하여 library로 추가할 경로를 선택하면 된다. 위와 같은 경우는 해당 파일(SqlMapConfig.properties)들이 "etc/ibatis"에 있기 때문에 "etc" 또는 "etc/ibatis"를 선택하면 된다.


library 경로를 추가하면 다음과 같이 해당 경로가 library로 추가된 것을 볼 수 있다.


그리고 클래스패스에 파일을 넣는 방법으로 library가 아닌 source folder로 추가하는 방법이 있다. 역시 프로젝트의 properties 창을 연다. 왼쪽 트리에서 "Java Build Path"를 선택하고, "Source" 탭을 선택한다. "Add Folder..." 버튼을 클릭하여 원하는 경로를 추가하면 된다.


어떤 방법을 선택해도 크게 문제는 없지만 소스가 없다면 library로 추가하는게 낫지 않을까 싶은데.. 나도 잘 몰러~~ @ㅅ@


그리고 마지막으로 SqlMapConfig.xml 파일을 다음처럼 수정하였다. "etc" 경로가 클래스패스에 포함되었으니 etc 경로를 기준으로 한 상대 경로로 적어준다. 그리고 함께 사용할 User.xml 파일의 경로도 클래스패스 기준으로 수정해 준다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig    
  PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"    
  "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
  <!-- Database connection settings -->
  <properties resource="ibatis/SqlMapConfig.properties" />
  <settings cacheModelsEnabled="true" enhancementEnabled="true"
    lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
    maxTransactions="5" useStatementNamespaces="false" />

  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="${driver}" />
      <property name="JDBC.ConnectionURL" value="${url}" />
      <property name="JDBC.Username" value="${username}" />
      <property name="JDBC.Password" value="${password}" />
    </dataSource>
  </transactionManager>

  <sqlMap resource="ibatis/dto/maps/User.xml" />
</sqlMapConfig>


덧글

  • 일월지애 2010/06/09 18:02 # 삭제 답글

    아 덕분에 해결 했네요 감사합니다.
    드레그해서 퍼갈게요. 저는 네이버 블로그 사용해서
  • Sigel 2010/06/10 13:55 #

    출처만 이쁘게 밝혀주세요. :)
  • 아우.... 2010/06/14 11:05 # 삭제 답글

    드레그로 퍼갈게요. 도움 많이 됬습니다.
  • Sigel 2010/06/14 20:32 #

    출처만 밝혀주세요.
댓글 입력 영역

Google AdSense (text/image)