Java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlConnectionPoolDataSource

Java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlConnectionPoolDataSource
서블릿 실행시 클래스 찾지 못하는 오류

1 문제 상황[ | ]

  • 다음 코드에서 런타임 오류가 발생한다.
com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds = new com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource();
  • mysql-connector-java-5.1.24-bin.jar를 프로젝트 라이브러리로 추가했기 때문에 컴파일 오류는 없다.
  • main함수[1]를 만들어 Java application로 실행시켰을 때는 잘 실행된다.

2 해결 방법[ | ]

  • 컴파일시에는 라이브러리를 인식하기 때문에 오류가 없으나, 서블릿 수행시에는 라이브러리를 못 찾는 경우이다.
즉 이클립스는 라이브러리를 인식, 톰캣은 라이브러리 못찾음
  • 이클립스 Project Explorer의 프로젝트/WebContent/WEB-INF/lib 폴더에 라이브러리를 추가해주면 된다.[2]

3 오류 메시지[ | ]

HTTP Status 500 - Servlet.init() for servlet shopping.Controller threw exception
... (생략)
root cause 

java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlConnectionPoolDataSource
	dao.MemberDAO.<init>(MemberDAO.java:17)
	shopping.Controller.init(Controller.java:23)
	javax.servlet.GenericServlet.init(GenericServlet.java:160)
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
	org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	java.lang.Thread.run(Unknown Source)

root cause 

java.lang.ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
	dao.MemberDAO.<init>(MemberDAO.java:17)
	shopping.Controller.init(Controller.java:23)
	javax.servlet.GenericServlet.init(GenericServlet.java:160)
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
	org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	java.lang.Thread.run(Unknown Source)
... (생략)

4 같이 보기[ | ]

5 주석[ | ]

  1. public static void main(String[] args)
  2. 여기서는 C:\Program Files (x86)\MySQL\Connector J 5.1.24에 있는 mysql-connector-java-5.1.24-bin.jar를 lib 폴더에 드래그하고 Copy 선택하여 해결하였다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}