Java servler日志中的NoClassDefFoundError

Java servler日志中的NoClassDefFoundError,java,oracle,jdbc,noclassdeffounderror,Java,Oracle,Jdbc,Noclassdeffounderror,我在应用程序中使用classes12.jar进行连接池。有一个屏幕,单击后会重定向到错误页面 当我检查服务器日志时,得到了如下所示的异常。错误来自我们的数据库连接管理器PAYTFDbBase.java 此类包含getConnection,返回连接对象并在读取参数的位置调用getConnDetails。下面列出了这两种方法 过去,这种情况就像是千载难逢,当它发生时,infra团队重启服务器,问题就消失了 但最近它发生得更频繁了 我已经检查了classes12.jar是否在WEB-INF\lib文件

我在应用程序中使用classes12.jar进行连接池。有一个屏幕,单击后会重定向到错误页面

当我检查服务器日志时,得到了如下所示的异常。错误来自我们的数据库连接管理器PAYTFDbBase.java

此类包含getConnection,返回连接对象并在读取参数的位置调用getConnDetails。下面列出了这两种方法

过去,这种情况就像是千载难逢,当它发生时,infra团队重启服务器,问题就消失了

但最近它发生得更频繁了

我已经检查了classes12.jar是否在WEB-INF\lib文件夹中

通过同一连接管理器的所有其他上传屏幕工作正常

 java.lang.NoClassDefFoundError:
    oracle/jdbc/pool/OracleConnectionCacheImpl  at
    com.arch.PAYTFDbBase.getConnDetails(PAYTFDbBase.java:787)
        at
    com.arch.PAYTFDbBase.getConnection(PAYTFDbBase.java:180)
        at
    com.reports.client.PAYLIQUIDUploadJavaBean.getRecords(PAYLIQUIDUploadJavaBean.java:72)
        at
    jsp_servlet._core.__payliquiduploadfiles._jspService(__payliquiduploadfiles.java:334)
        at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)    at
    weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
        at
    weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
        at
    weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
        at
    weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
        at
    weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)
        at
    weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
        at
    weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at
    weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at
    weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
        at
    weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
        at
    weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)  at
    weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
下面是用于获取连接对象的连接管理器类方法

protected Connection getConnection()
{
    if(con == null || con.isClosed())
    {
        con = getConnDetails();
        con.setAutoCommit(false);
    }
    return con;
    SQLException se;
    se;
    printIt((new StringBuilder("SQLException in getConnection() :")).append(se).toString());
    return con;
}
protected Connection getConnDetails()
{
    try
    {
        InitialContext ic = new InitialContext();
        DataSource ds = (DataSource)ic.lookup("jdbc/OracleCoreDS");
        con = ds.getConnection();
    }
    catch(Exception exception) { }
    if(con != null)
        break MISSING_BLOCK_LABEL_264;
    boolean data1;
    if(encriptFlag.equalsIgnoreCase("Y"))
        data1 = getEncrypData();
    else
        data1 = getPropData();
    try
    {
        cpds = new OracleConnectionPoolDataSource();
        cpds.setDriverType("thin");
        cpds.setNetworkProtocol("tcp");
        cpds.setServerName(mcName);
        cpds.setDatabaseName(sid);
        cpds.setPortNumber(Integer.parseInt(port));
        cpds.setUser(UserName);
        cpds.setPassword(pwd);
        ocacheimpl = new OracleConnectionCacheImpl(cpds);
        ocacheimpl.setMaxLimit(8);
        ocacheimpl.setMinLimit(1);
        ocacheimpl.setCacheScheme(1);
    }
    catch(SQLException sqlEx)
    {
        printIt((new StringBuilder("PAYTFDbBase  SQLException getConnDetails():")).append(sqlEx).toString());
    }
    catch(Exception ex)
    {
        printIt((new StringBuilder(":2:PAYTFDbBase  Exception getConnDetails():")).append(ex).toString());
    }
    return ocacheimpl.getConnection();
    Exception sqlex;
    sqlex;
    printIt((new StringBuilder("PAYTFDbBase Exception in connection():")).append(sqlex).toString());
    return con;
}

您确定您的classpath/libyes中有Oracle JDBC jar吗?我检查了。我可以在WEB-INF\lib文件夹中找到classes12.jar[此链接]可以帮助您确保jar文件未损坏。您可以尝试在第一次使用前调用Class.forNameoracle.jdbc.pool.OracleConnectionCacheImpl以确保类已加载。您是否尝试过重建和重新启动。当类文件被篡改时,有时会发生这种情况