java.lang.ClassCastException: org.apache.commons.dbcp.BasicDataSource 无法转换为 org.apache.commons.dbcp.BasicDataSource
java.lang.ClassCastException: org.apache.commons.dbcp.BasicDataSource cannot be cast to org.apache.commons.dbcp.BasicDataSource
我在尝试检索在 Tomcat 全局资源下配置的数据源时遇到了这个奇怪的异常。
java.lang.ClassCastException: org.apache.commons.dbcp.BasicDataSource cannot be cast to org.apache.commons.dbcp.BasicDataSource
org.apache.jsp.Monitor_jsp._jspService(Monitor_jsp.java:53)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
这就是我的 Monitor.jsp 的样子
<%@ page import="org.apache.commons.dbcp.BasicDataSource" %>
<%@ page import="com.dixons.myapp.db.DataSourceHelper" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Monitor page</title>
</head>
<body>
<%
BasicDataSource ds = (BasicDataSource) DataSourceHelper.getDbDataSource();
out.println(ds.getNumActive() + " " + ds.getNumIdle());
%>
</body>
</html>
我知道 ClassCastException 是什么。但是我不明白为什么 Java 认为这两个 类 是不同的,即使它们同名并且在同一个包中?
我的应用程序与对象 Cast to javax.sql.DataSource 配合得很好。但我想将其转换为此监控页面的 org.apache.commons.dbcp.BasicDataSource,以便我可以密切关注我的数据库资源。
这是因为同一个 class 被两个不同的 class 加载器加载。
一个可以是 WebappClassLoader
加载程序,另一个是 sun.misc.Launcher$AppClassLoader
。
可以找到更多详细信息 here
我在尝试检索在 Tomcat 全局资源下配置的数据源时遇到了这个奇怪的异常。
java.lang.ClassCastException: org.apache.commons.dbcp.BasicDataSource cannot be cast to org.apache.commons.dbcp.BasicDataSource
org.apache.jsp.Monitor_jsp._jspService(Monitor_jsp.java:53)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
这就是我的 Monitor.jsp 的样子
<%@ page import="org.apache.commons.dbcp.BasicDataSource" %>
<%@ page import="com.dixons.myapp.db.DataSourceHelper" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Monitor page</title>
</head>
<body>
<%
BasicDataSource ds = (BasicDataSource) DataSourceHelper.getDbDataSource();
out.println(ds.getNumActive() + " " + ds.getNumIdle());
%>
</body>
</html>
我知道 ClassCastException 是什么。但是我不明白为什么 Java 认为这两个 类 是不同的,即使它们同名并且在同一个包中?
我的应用程序与对象 Cast to javax.sql.DataSource 配合得很好。但我想将其转换为此监控页面的 org.apache.commons.dbcp.BasicDataSource,以便我可以密切关注我的数据库资源。
这是因为同一个 class 被两个不同的 class 加载器加载。
一个可以是 WebappClassLoader
加载程序,另一个是 sun.misc.Launcher$AppClassLoader
。
可以找到更多详细信息 here