[Java, Tomcat] java.lang.AbstractMethodError at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)

[Java, Tomcat] java.lang.AbstractMethodError at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)

마이바티스(또는 아이바티스) 사용 시 GetConnection 은 성공했는데 select 시도할 때 아래 오류가 발생하는 경우.

DEBUG : 2021-09-29 21:52:54 – jdbc.JdbcTransaction (JdbcTransaction.java:132:openConnection) – Opening JDBC Connection

29-Sep-2021 21:52:54.618 심각 [http-nio-8541-exec-14] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [] threw exception [javax.servlet.ServletException: java.lang.AbstractMethodError] with root cause

 java.lang.AbstractMethodError

        at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)

        at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:916)

        at org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:282)

        at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:362)

        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2346)

        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2329)

        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2062)

        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532)

        at org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:134)

        at org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:61)

        at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:279)

        at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:72)

        at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:59)

        at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)

        at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)

        at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:120)

        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)

        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)

        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:66)

해결책은 톰캣 폴더 하위 context.xml 파일에 아래 내용 추가


<Resource url=”DB주소”

    testOnBorrow=”true” 

    password=”패스워드”

    username=”유저네임”

    maxWait=”5000″ 

    minIdle=”2″ 

    maxActive=”4″

    driverClassName=”드라이버명” 

    type=”javax.sql.DataSource”

    auth=”Container”

    name=”jdbc/리소스명”

    validationQuery=”select 1″/>

예를 들어 아래와 같이 작성한다.

ex 1) oracle

<Resource url=”jdbc:oracle:thin:@아이피:포트:DB명”

    testOnBorrow=”true” 

    password=”패스워드”

    username=”유저네임”

    maxWait=”5000″ 

    minIdle=”2″ 

    maxActive=”4″

    driverClassName=”oracle.jdbc.OracleDriver” 

    type=”javax.sql.DataSource”

    auth=”Container”

    name=”jdbc/testdb”

    validationQuery=”select 1 from dual”/>

ex 2) mssql

<Resource url=”jdbc:jtds:sqlserver://아이피:포트/DB명”

    testOnBorrow=”true” 

    password=”패스워드”

    username=”유저네임”

    maxWait=”5000″ 

    minIdle=”2″ 

    maxActive=”4″

    driverClassName=”net.sourceforge.jtds.jdbc.Driver” 

    type=”javax.sql.DataSource”

    auth=”Container”

    name=”jdbc/testdb”

    validationQuery=”select 1″/>

참고사이트 : https://stackoverflow.com/questions/41231750/abstractmethoderror-with-jtds-jdbc-driver-on-tomcat-8/41232124