1

よく知られているNoClassDefFoundError:com / mysql / jdbc / StringUtilsを取得していますが、私の場合は少し異なります。MySQLをまったく使用していません。

JDK1.6を使用してPostgreSQL9.1データベースを使用しています。私のコンピューターではすべてが完全に機能します(PostgreSQLドライバーがロードされている、クラスパスの問題がないなど)が、プロジェクトを大学のサーバーにアップロードする必要があり、次のエラーが発生します。

java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.StringUtils

完全なスタックトレースは次のとおりです。

com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:286)
java.sql.DriverManager.getConnection(DriverManager.java:582)
java.sql.DriverManager.getConnection(DriverManager.java:185)
elections.ConnectionManager.getConnection(ConnectionManager.java:29)
elections.daos.LoginDAO.login(LoginDAO.java:23) 
elections.controllers.LoginController.doPost(LoginController.java:46) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274) 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271) 
java.security.AccessController.doPrivileged(Native Method) 
javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306) 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:166)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:299) 
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:57) 
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:193) 
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189) 
java.security.AccessController.doPrivileged(Native Method) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:208) 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:197) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) 
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770) 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
java.lang.Thread.run(Thread.java:662)

これが接続を提供する私のクラスです(これは私の最初のJDBCプロジェクトです。以下のコードはスレッドセーフではないことを知っています。接続プールを使用して書き直しますが、最初に機能させる必要があります...)

static Connection conn;

public static Connection getConnection() throws Exception {
    try {

        String url = "jdbc:postgresql://host/database";
        String username = "username";
        String pwd = "password";

        Class.forName("org.postgresql.Driver");

        try {
            conn = DriverManager.getConnection(url, username, pwd);
        } catch (SQLException e) {
            e.printStackTrace();
            throw e;
        }
    } catch (ClassNotFoundException e) {
        throw e;
    }
    return conn;
}

私はインターネットで大規模な検索を行いましたが、このような問題を抱えているのは世界で私だけのようです...他の誰もがMySQLでのみこの問題を抱えています。

MySQLドライバー(不足しているcom.mysql.jdbc.StringUtilsクラスを含む)をWEB-INF / libフォルダーに入れようとしましたが、これは役に立ちませんでした。

私が見つけた唯一の有用な情報は、おそらくエラーがどこかに隠されていることです(つまり、com.mysql.jdbc.StringUtilsが依存するクラスをロードできませんでした)が、どこを検索すればよいかわかりません。

PostgreSQLのみを使用しているのに、MySQLクラスが検索される理由がよくわかりません。

どんな種類の助けもいただければ幸いです!:)

4

3 に答える 3

1

わかりました、Tomcat Security Manager の権限の問題であることが判明しました。管理者が正確な理由を調べ次第、ここに投稿し、最良の回答を受け入れます.

于 2013-01-21T13:21:16.413 に答える
1

JDBC 4.0 自動検出は、JDBC ドライバーを自動的にスキャンしてロードできます。プログラムで使用されていない場合でも、DriverManager は MySQL JDBC ドライバーもスキャンしてロードすると思います。

その場合、サーバーには一般的なデータベース ベンダー用の多くの jdbc ドライバーが保持されていると推測できます。ローカルで mysql をテストして、MySQL ドライバーが機能しない理由を見つけてから、サーバー管理者に mysql のドライバーまたは設定を更新するように指示できます。

http://www.techfaq360.com/tutorial/jdbc/jdbc3_jdbc4.jsp

于 2013-01-21T03:01:01.870 に答える
0

通常、JDBC ドライバーは Tomcat SHARED ライブラリに配置されます。したがって、デプロイする tomcat には、プロジェクトを台無しにするいくつかのライブラリがここにある可能性があります。

プロジェクトの WEB-INF/lib に不足しているライブラリを追加しても問題を解決できません。これは、問題の原因となっているコードが別のクラス ローダーから不足しているクラスを使用しようとしている場合、アプリから提供しようとしているものを認識できない可能性があるためです。 "範囲"。

したがって、サーバーの共有ライブラリにアクセスできないと仮定すると、sys. 管理者。

于 2013-01-21T10:55:56.947 に答える