java - 在 wildfly 8 中使用 apache commons BasicDataSource

标签 java apache tomcat datasource wildfly-8

我想使用 BasicDataSource 的 apache 公共(public)库来创建连接池。使用 apache tomcat 8 服务器它工作正常,但是当我试图让它与 wildfly 8 一起工作时我得到以下异常:

java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.WrapperDataSource cannot be cast to org.apache.commons.dbcp2.BasicDataSource

我获取数据源的方法是在InitialContext 对象中执行lookup。此函数根据使用的服务器类型返回数据源类。在 tomcat 中,它返回一个 BasicDataSource,但在 WildFly 中,它返回一个 WrapperDataSource,这显然不能转换为 BasicDataSource。我尝试从 wildfly 管理更改 DataSource 类,但问题仍然存在,我不知所措。是否无法更改 lookup 返回的对象类型?有没有办法将 WrapperDataSource 变成 BasicDataSource??

最佳答案

我会先说我从未使用过它,我不确定为什么你想使用与 Wildfly 不同的连接池和数据源提供程序,但 Wildfly 确实提供了一个 您可以想象配置为使用 BasicDataSource 的属性。

我快速搜索并找到了这个:https://developer.jboss.org/thread/203514?tstart=0

对于 JBoss AS 7.1.1,这应该也适用于 Wildfly。

<datasource jta="false" jndi-name="java:jboss/datasources/MyDS" pool-name="MyDataSource" enabled="true" use-ccm="false">
    <connection-url>jdbc:mysql://localhost/xxx</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <datasource-class>org.apache.commons.dbcp.BasicDataSource</datasource-class>
    <driver>custom.mysql</driver>
    <security>
        <user-name>xxx</user-name>
        <password>xxx</password>
    </security>
</datasource>

也就是说,我尝试按照上面指定的方式配置数据源(驱动程序模块,在本例中为 mysql,必须了解这些 apache 公共(public) JAR 资源,我的第一次尝试导致了 ClassDefNotFound),然后在中引用它们像这样使用 WildFly 8.1.0 final 进行快速测试:

InitialContext initCtx = null;
DataSource ds = null;
initCtx = new InitialContext();
ds = (DataSource) initCtx.lookup("java:jboss/datasources/MyDS"); 
Connection conn = ds.getConnection();

这导致了一个“ds”对象,它确实是一个 BasicDataSource(没有类转换异常),但在下一行我得到了以下异常:

Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1062)
at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:308)
... 45 more

所以也许这可以帮助您更进一步。我会查看有关为不同的 jdbc 驱动程序配置模块以及一般如何配置数据源的 Wildfly 文档,也许您根本不需要使用公共(public)库: https://docs.jboss.org/author/display/WFLY8/DataSource+configuration https://sheemoul.wordpress.com/2014/06/17/configure-mysql-datasource-in-wildfly-8-0/

关于java - 在 wildfly 8 中使用 apache commons BasicDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243485/

相关文章:

java - 使用方法从文本文件获取输出时,未处理的异常类型IOException

java - 比较传输对象的值

php - 是否可以在 apache 的不同目录中使用多个版本的 php?

apache - 当 Apache 将 HttpS 请求重定向到 http 时,Chrome 抛出 ERR_CONNECTION_REFUSED

java - this.start() 不运行威胁在线服务器

tomcat - 使用 JNDI 连接的 Grails 3.1.1 部署

java - 抽象类和接口(interface)在一起?

java - JSP 无法正确评估数组索引

PHP后台进程

Maven - 更改部署的 Artifact 名称