ClassCastException DataSource 无法转换为 javax.sql.ConnectionPoolDataSource

2023-12-08

我收到这个异常:

java.lang.ClassCastException: org.apache.tomcat.jdbc.pool.DataSource cannot be cast to javax.sql.ConnectionPoolDataSource

当我尝试运行我的 web 应用程序(在 Tomcat6 中)时,该应用程序使用与 Tomcat7 无缝协作的 tomcat jdbc 池

我已将这些 jar 包含在 tomcat 6 lib 文件夹中:

tomcat-jdbc.jar
tomcat-juli.jar

可能是什么问题呢?

Update:

protected static Connection getConnection() throws NamingException, SQLException {
    InitialContext cxt = new InitialContext();
    String jndiName = "java:/comp/env/jdbc/MyDBHrd";
    ConnectionPoolDataSource dataSource = (ConnectionPoolDataSource) cxt.lookup(jndiName); // ClassCastException here....
    PooledConnection pooledConnection = dataSource.getPooledConnection();
    Connection conn = pooledConnection.getConnection();
    return conn; // Obtain connection from pool
} 

配置:

<Resource name="jdbc/MyDBHrd"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          testWhileIdle="true"
          testOnBorrow="true"
          testOnReturn="false"
          validationQuery="SELECT 1"
          validationInterval="30000"
          timeBetweenEvictionRunsMillis="30000"
          maxActive="5000"
          minIdle="10"
          maxWait="10000"
          initialSize="20"
          removeAbandonedTimeout="120"
          removeAbandoned="true"
          logAbandoned="false"
          minEvictableIdleTimeMillis="30000"
          jmxEnabled="true"
          jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
            org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
          username="sa"
          password="password"
          driverClassName="net.sourceforge.jtds.jdbc.Driver"
          url="jdbc:jtds:sqlserver://192.168.114.130/MyDB"/>

当我更改“类型”时:

 type="javax.sql.ConnectionPoolDataSource"

我收到这个警告:

WARNING: javax.sql.ConnectionPoolDataSource is not a valid class name/type for this JNDI factory.

导致getConnection()返回 NULL。

Imports:

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.ConnectionPoolDataSource;
import javax.sql.PooledConnection;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

作为最终用户,您永远不必使用ConnectionPoolDataSource直接地。它旨在作为物理连接的工厂(PooledConnection). That PooledConnection保存在连接池中。当你做一个DataSource.getConnection,数据源将检查PooledConnection从池中,并返回使用获得的逻辑连接PooledConnection.getConnection()作为最终用户,并在逻辑上将物理连接返回到池中Connection关闭了。

所以构造是

User -- uses --> DataSource (with connectionpooling) -- uses --> ConnectionPoolDataSource

Or

ConnectionPoolDataSource --> creates PooledConnection --> DataSource --> returns Connection --> User

使用一个DataSource独立于事实,如果DataSource是否提供连接池(这对您来说应该是透明的)。

另请参阅我之前对另一个问题的回答:https://stackoverflow.com/a/12651163/466862

换句话说,您的代码应该更改为:

protected static Connection getConnection() throws NamingException, SQLException {
    InitialContext cxt = new InitialContext();
    String jndiName = "java:/comp/env/jdbc/MyDBHrd";
    DataSource dataSource = (DataSource) cxt.lookup(jndiName);
    Connection conn = dataSource.getConnection();
    return conn;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ClassCastException DataSource 无法转换为 javax.sql.ConnectionPoolDataSource 的相关文章

  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 如何在log4j的配置文件中为文件附加器提供环境变量路径

    我有一个log4j xml配置文件 和一个RollingFileAppender我需要提供用于存储日志的文件路径 问题是我的代码将作为可运行的 jar 部署在 Unix 机器上 所以如果我传递这样的参数 value logs message
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • JTextField 和 JTextArea

    JTextField 和 JTextArea 有什么不同 是否可以在一个班级中使用这两个班级 总之 JTextField 是单行文本字段 而 JTextArea 可以跨越多行 文档中清楚地解释了这些差异 文本区 http docs orac
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • Eclipse tomcat启动失败

    我在 Windows 7 x64 位 上运行 Eclipse Indigo 3 7 当我使用 Mongrel 一个用于运行 Tomcat 的 Eclipse 插件 启动 Tomcat 7 0 12 时 日食 我得到 May 24 2012
  • Tomcat虚拟主机

    我有一个托管在服务器上的应用程序 我希望所有小客户共享一个虚拟主机 并且我想为每个大客户设置一个专用的虚拟主机 应用程序完全相同 我可以将虚拟点指向相同的代码库目录吗 我使用Tomcat 7作为应用程序服务器 请指教 Thanks 如果他们
  • tomcat-maven-plugin 使用 Tomcat 7 - tomcat:deploy 有效,tomcat:undeploy 无效

    我有一个 tomcat deploy 的工作配置 但是当我取消部署 WAR 时 出现以下错误 这让我很困惑 INFO Scanning for projects WARNING WARNING Some problems were enco
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • Java:一个函数有多种返回类型...可以使用泛型吗?

    为了简单起见 我有一些程序 如下所示 public String fetchValueAsString String key public DateTime fetchValueAsDateTime String key 我想要类似的东西
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • 如何将库添加到 LIBGDX 项目的依赖项 gradle

    一切都在问题中 我已经尝试了在 SO 和其他网站中找到的所有答案 但没有运气 这就是我迄今为止尝试过的 adding compile fileTree dir lib include jar 到我的 build gradle adding
  • java中的预增量/后增量

    有人可以帮助我理解为什么 int i 1 int j 1 int k 1 int l 1 System out println i i System out println j j System out println k k System
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • Tomcat 7 - 在哪里设置“系统属性”?

    自从升级到 Tomcat 7 以来 我的 Web 应用程序出现了问题 我的会话将继续null在我登录并尝试执行任何操作 提交请求 后 我读到设置以下内容可能会有所帮助 org apache tomcat util http ServerCo
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 为什么我不能将 Collection 转换为 Collection>

    问题的关键是 为什么这会导致编译时错误 List
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反
  • @Embeddable 中的 @GenerateValue

    我已将实体的 id 分离到一个单独的 Embeddable 类中 该实体如下 Entity Table name users public class Users EmbeddedId private Users pk id private
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这

随机推荐

  • 如何从 Stack Exchange API 获取给定用户名的用户 ID?

    我想使用以下方法获取 Stack Overflow 上的用户活动 users ids timeline method 问题是这个方法只接受一个用户 ID 但我想传递一个用户名 所以任何人都可以写下他们的昵称并获取相关的统计数据 该 API
  • 如何用css画一条线并在其上显示文本或图像

    我正在尝试使用 CSS 画一条线并在线中间显示文本 图像 featured images color 666666 border 2px solid 333333 p class featured images Featured p 这就是
  • UIDatePicker 选择月份和年份

    我需要一个UIDatePicker仅用于选择月份和年份 我检查了课程参考文档 好像UIDatePicker is a UIView 我想象UIPickerView可能是一个子视图 如果我能抓住它 我可以隐藏该组件 但不是 那是不可能的 那么
  • 通过API调用删除FB相册

    我用谷歌搜索了一下 也在这里查看了一些相关的问题 但没有找到答案 有没有办法通过 Graph API 调用从 FB 删除相册 我正在做DELETE请求https graph facebook com ALBUM ID具有相应的访问令牌 但它
  • PostgreSQL 函数返回多个结果集

    是否可以从 Postgres 函数返回多个结果集 就像在 MSSQL 中一样 CREATE PROCEDURE test AS SELECT FROM first table SELECT FROM second table 从多个查询返回
  • 如何在 Azure 上部署 NextJs SSR React 应用程序

    我一直在尝试在 Azure 上部署使用 NextJS 构建的服务器端渲染的 React 应用程序 我设置了 Azure 管道并成功发布 但运行后 当我访问 azure 网站 URL 时 应用程序似乎没有加载 构建文件内容与客户端渲染的应用程
  • Python - 任何检查数字 0 或 False 的方法

    如果我将一个变量设置为 False 它会被读取为等于 0 有什么方法可以检查变量是否确实为 False 或者是否为数字 0 就像是 Spam False if Spam False and not Spam 0 do something 我
  • 无法启动 jupyter 笔记本:TypeError

    运行命令时jupyter notebook 我收到以下错误 Traceback most recent call last File usr local bin jupyter notebook line 6 in
  • R 中奇怪的 POSIXct 函数行为

    我正在 R 中使用 POSIXct 数据类型 在我的工作中 我合并了一个函数 该函数在向量中返回两个 POSIXct 日期 然而 我发现了一些意想不到的行为 我写了一些示例代码来说明我的问题 POSIXct returning issue
  • kerberized apache phoenix 的 node.js 和 npm jdbc 包问题

    我正在使用nodejs和npm jdbc包连接到hortonworks上的kerberized Apache phoenix 我能够使用nodejs和jdbc包连接到非kerberized phoenix 但面对下面的kerberos身份验
  • 在servlet中搜索代码到mysql?

    什么是在servlet中搜索代码到mysql 我需要简单的编码任何人都可以帮助我 我使用 Html 创建了一个注册页面 姓名 资格 国家 州 并在 mysql 中创建了一个注册表 然后我创建了servlet页面来获取从用户到数据库的值 该值
  • 使用 python -m pip install --upgrade pip 的 pip 升级问题

    最近 我一直在尝试使用以下命令升级我的 pip python m pip install upgrade pip 流程如下 Downloading pip 21 0 1 py3 none any whl 1 5 MB 1 5 MB 1 7
  • 如何让 Twitter-Bootstrap 导航显示活动链接?

    我不明白 Twitter Bootstrap 如何为导航提供活动链接 如果我有这样的常规导航 使用 ruby on Rails 链接 ul class nav li class active a href link Link a li li
  • 类型错误:“bytearray”对象无法解释为整数

    我想通过 HTTP 发送音频数据 但我不明白为什么会出现此异常 Exception happened during processing of request from 127 0 0 1 59976 Traceback most rece
  • 用于更新卡片上封面颜色的 Python Trello API

    Trello 增加了在单个卡片上放置 封面 的功能 这可以是纯色或图像 根据他们的 API 您应该能够通过 PUT 请求更新它 看here其中讨论了更新卡片 并包括 封面 该卡包含许多数据项 json 例如 desc 旧的描述 覆盖 亮度
  • 如何杀死runtime.exec?

    我在 jframe 中使用下面的代码 以便通过 java 程序执行 shell 脚本 但是当我实现其他方法来停止运行进程时 该方法首先被 th 阻止 我无法停止我的程序 所以我必须杀死新进程 问题是如何获取进程的pid以及如何将其放在后台
  • Silverlight tabchanged 事件 - tabcontrol

    我正在使用选项卡控件 并且我想处理 tabchanged 事件 我试图使用SelectionChanged没有运气的事件 它被触发太多次 加载选项卡控件或添加新选项卡后 我想仅当用户在选项卡之间导航时处理此事件 我找到了 WPF 的解决方案
  • VS2013 的开发者命令提示符在哪里?

    我需要从 Visual Studio 2013 中的开发人员命令提示符运行 web exe 文件 默认情况下 Visual Studio 2013 中未安装命令提示符 以前 我使用的是 Visual Studio 2012 它默认安装了开发
  • 迭代多个选择/文件夹项目

    我看了一眼MailItem并且没有看到任何表明我可以移动所选项目的信息 我有可以运行的代码 但是Set objItem GetCurrentItem 线路只接收一封邮件 我正在寻找ForEach通过文件夹 或者ForEach通过选择 我尝试
  • ClassCastException DataSource 无法转换为 javax.sql.ConnectionPoolDataSource

    我收到这个异常 java lang ClassCastException org apache tomcat jdbc pool DataSource cannot be cast to javax sql ConnectionPoolDa