我想使用 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
我快速搜索并找到了这个: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/