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