[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″/> |