"Java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlConnectionPoolDataSource"의 두 판 사이의 차이

1번째 줄: 1번째 줄:
;<nowiki>Java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlConnectionPoolDataSource</nowiki>
;<nowiki>Java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlConnectionPoolDataSource</nowiki>
;서블릿 실행시 클래스 찾지 못하는 오류


==문제 상황==
==문제 상황==
다음 코드에서 런타임 오류가 발생한다.
*다음 코드에서 런타임 오류가 발생한다.
<source lang='java'>
<source lang='java'>
com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds = new com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource();
com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds = new com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource();
</source>
</source>
mysql-connector-java-5.1.24-bin.jar를 프로젝트 라이브러리로 추가했기 때문에 컴파일 오류는 없다.
*mysql-connector-java-5.1.24-bin.jar를 프로젝트 라이브러리로 추가했기 때문에 컴파일 오류는 없다.
*[[main함수]]<ref>public static void main(String[] args)</ref>를 만들어 Java application로 실행시켰을 때는 잘 실행된다.
 
==해결 방법==
*컴파일시에는 라이브러리를 인식하기 때문에 오류가 없으나, 서블릿 수행시에는 라이브러리를 못 찾는 경우이다.
:즉 이클립스는 라이브러리를 인식, 톰캣은 라이브러리 못찾음
*이클립스 Project Explorer의 프로젝트/WebContent/WEB-INF/lib 폴더에 라이브러리를 추가해주면 된다.<ref>여기서는 C:\Program Files (x86)\MySQL\Connector J 5.1.24에 있는 mysql-connector-java-5.1.24-bin.jar를 lib 폴더에 드래그하고 Copy 선택하여 해결하였다.</ref>


==오류 메시지==
==오류 메시지==
<source lang='text'>
<source lang='text'>
HTTP Status 500 - Servlet.init() for servlet shopping.Controller threw exception
HTTP Status 500 - Servlet.init() for servlet shopping.Controller threw exception
 
... (생략)
--------------------------------------------------------------------------------
 
type Exception report
 
message Servlet.init() for servlet shopping.Controller threw exception
 
description The server encountered an internal error that prevented it from fulfilling this request.
 
exception
 
javax.servlet.ServletException: Servlet.init() for servlet shopping.Controller threw exception
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  
root cause  


51번째 줄: 35번째 줄:
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
java.lang.Thread.run(Unknown Source)


root cause  
root cause  
71번째 줄: 54번째 줄:
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
... (생략)
</source>


==같이 보기==
*[[서블릿]]


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.39 logs.
==주석==
 
<references/>
 
--------------------------------------------------------------------------------
 
Apache Tomcat/7.0.39
</source>


[[분류: Java]]
[[분류: Java]]

2013년 5월 18일 (토) 15:25 판

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 }}