Java 在wildfly 8中使用apache commons BasicDataSource

Java 在wildfly 8中使用apache commons BasicDataSource,java,apache,tomcat,datasource,wildfly-8,Java,Apache,Tomcat,Datasource,Wildfly 8,我想使用apachecommons库来创建连接池。使用apache tomcat 8服务器时,它工作正常,但当我尝试使用wildfly 8时,出现以下异常: Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1062) at

我想使用apachecommons库来创建连接池。使用apache tomcat 8服务器时,它工作正常,但当我尝试使用wildfly 8时,出现以下异常:

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
java.lang.ClassCastException:org.jboss.jca.adapters.jdbc.WrapperDataSource不能强制转换为org.apache.commons.dbcp2.BasicDataSource


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

首先,我要说的是,我从未使用过这个,我不知道你为什么要使用与Wildfly不同的连接池和数据源提供程序,但是Wildfly确实提供了一个属性,您可以将其配置为使用BasicDataSource

我快速搜索后发现:

对于JBossAS 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>
这导致了一个确实是BasicDataSource的“ds”对象(没有类强制转换异常),但在下一行中,我得到了以下异常:

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
也许这能帮你更进一步。我会查看Wildfly文档,了解如何为不同的jdbc驱动程序配置模块,以及如何配置数据源。一般来说,您可能根本不需要使用commons库:

我知道
属性,并尝试对其进行配置,但据我所知,它需要是与所使用的
jdbc驱动程序相同的
.jar
中的类。由于我们正在使用sql server数据库的
sqljdbc4.jar
,所以我不能使用apache commons库中的数据源类。它抛出一个异常,在
sqljdbc4.jar
中找不到
BasicDataSource
。我不知道mysql驱动程序是如何知道apache库的,但sqljdbc肯定不知道。我将进一步检查wildfly数据源提供程序的池,但我的第一次尝试失败。我认为它不需要在同一个jar中,但您可能需要将其添加到模块定义中。这与我在mysql测试中遇到的问题是一样的(mysql jar中也不包括它):看看模块描述符,特别是资源根:我在resources标记中添加了
.jar
,但它不起作用。我还尝试将包链接作为一个模块添加到依赖项中,但它仍然会引发异常<代码>