Java 在wildfly 8中使用apache commons BasicDataSource
我想使用apachecommons库来创建连接池。使用apache tomcat 8服务器时,它工作正常,但当我尝试使用wildfly 8时,出现以下异常: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
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
,但它不起作用。我还尝试将包链接作为一个模块添加到依赖项中,但它仍然会引发异常<代码>