2009-11-13 6 views
1

(데비안 레니에서 실행되는) Postgres 데이터베이스에 연결하는 새 Tomcat 5.5 서버에 기존 응용 프로그램을 설정하고 있습니다. 액세스 할 때 다음과 같은 근본 원인으로 일련의 스택 추적이 발생합니다.JSP 예외 - 클래스를 찾을 수 없습니다 (바람둥이)

java.lang.ClassNotFoundException: java.sql.SQLClientInfoException 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1363) 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1209) 
    java.lang.Class.forName(libgcj.so.90) 
    java.lang.Class.initializeClass(libgcj.so.90) 
    java.lang.Class.initializeClass(libgcj.so.90) 
    org.postgresql.Driver.makeConnection(Driver.java:382) 
    org.postgresql.Driver.connect(Driver.java:260) 
    java.sql.DriverManager.getConnection(libgcj.so.90) 
    jof.DBConnection.getConnection(DBConnection.java:81) 
    jof.BeanInterfaceBase.db(BeanInterfaceBase.java:263) 
    jof.BeanInterfaceBase.getStatement(BeanInterfaceBase.java:613) 
    jof.HelpInterface.findByNaturalId(HelpInterface.java:81) 
    jof.HelpInterface.findByNaturalId(HelpInterface.java:128) 
    org.apache.jsp.index_jsp.getHelp(index_jsp.java:162) 
    org.apache.jsp.index_jsp._jspService(index_jsp.java:369) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    java.lang.reflect.Method.invoke(libgcj.so.90) 
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) 
    java.security.AccessController.doPrivileged(libgcj.so.90) 
    javax.security.auth.Subject.doAsPrivileged(libgcj.so.90) 
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) 
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) 

설명이 누락 되었습니까?

답변

3
java.lang.ClassNotFoundException: java.sql.SQLClientInfoException 

무엇을 놓치고?

정확히 말하면, 언급 된 클래스는 런타임 클래스 경로에 없습니다. 런타임 클래스 경로에 독립형 클래스 파일 (*.class) 또는 JAR 파일 (*.jar)로 패키지되어 있어야합니다. 또는 실제 경로를 런타임 클래스 경로에 추가 할 수도 있습니다. 애플리케이션 서버의 Appserver/lib 폴더와 자바의 JRE/lib 같이

은 기본적으로 웹 애플리케이션의 Webapp/WEB-INF/libWebapp/WEB-INF/classes 폴더, 런타임 클래스 경로에 의해 보호됩니다.

제 3 자 웹 응용 프로그램 별 JAR 파일은 Webapp/WEB-INF/lib에 위치해야합니다. 모든 웹 애플리케이션 관련 클래스 (서블릿 등)는 Webapp/WEB-INF/classes에 위치해야합니다. 모든 응용 프로그램 관련 (또는 webapp-common) JAR 파일은 Appserver/lib에 있어야합니다. Java의 JRE/lib 폴더 은 그대로 두어야합니다 ().

희망이 도움이됩니다.

편집 : 실제 문제는 더욱 심각합니다. 실제로 이것은 Java 6 전용 클래스입니다. Tomcat이 Java 5에서 실행되고있는 것 같습니다. JAVA_HOME 환경 변수를 검토하십시오. 최소한 Java 6 JRE의 루트 설치 폴더를 가리켜 야합니다.

+0

감사합니다. 매우 도움이되었습니다. 런타임을 전환하면 실제로 문제가 해결되었습니다. – user83358

+0

반갑습니다. – BalusC

2

이것은 추측이지만 java.sql.SQLClientInfoException은 Java6에서 도입 된 클래스입니다. 어떤 Java 버전이 Tomcat 서버를 시작하는 데 사용됩니까? 어쩌면 자바 6에서 개발하고 있지만 자바 5를 실행중인 톰캣에 배포 할 수 있습니까?

관련 문제