是否可以在 Wildfly 中将数据源部署描述符与驱动程序模块一起使用?
Posted
技术标签:
【中文标题】是否可以在 Wildfly 中将数据源部署描述符与驱动程序模块一起使用?【英文标题】:Is it possible to use a datasource deployment descriptor with a driver module in Wildfly? 【发布时间】:2016-06-05 14:06:01 【问题描述】:我无法通过使用“*-ds.xml”部署描述符和作为模块安装的数据库驱动程序来配置我的数据源。 数据源 *-ds.xml 文件仅在我将数据库驱动程序直接部署为 jar 时才有效。 我认为如果您选择将驱动程序作为模块安装,则必须直接在standalone.xml 中配置数据源。 我想要解决方案驱动模块+部署描述符。
【问题讨论】:
您是否已将您的数据库驱动模块导入您的应用程序? 导入是什么意思?我刚刚将 module.xml 和 jar 放在 modules/org/postgresql/main 文件夹中。到目前为止,我可以让模块+standalone.xml 或部署描述符+ jar 部署工作。但不是模块+部署描述符 【参考方案1】:为了让您的模块对您的应用程序可见,您需要将该模块导入您的应用程序。您的应用程序的 WEB-INF 中需要 jboss-deployment-structure.xml,如下所示:
<?xml version="1.0"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.postgresql" services="export">
<imports>
<include path="META-INF**"/>
<include path="org**"/>
<!-- assuming package of the driver is org.something -->
</imports>
</module>
</dependencies>
</deployment>
</jboss-deployment-structure>
之后,模块和驱动程序应该对您的应用以及您的 *-ds.xml 可见。
这是在 *-ds.xml 中表示您要使用模块中的驱动程序的方式:
<driver name="postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
(使用 postgresql 配置的示例,因为您似乎正在使用它)
编辑:使用以下作为 postgresql-ds.xml 进行测试:
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_1.xsd">
<datasource jndi-name="java:jboss/datasources/PostgeSQLDB " pool-name="PostgreSQLPool">
<connection-url>jdbc:postgresql://localhost:5432/example
</connection-url>
<driver>postgres</driver>
<pool>
<max-pool-size>30</max-pool-size>
</pool>
<security>
<user-name>postgresql</user-name>
<password>postgresql</password>
</security>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource
</xa-datasource-class>
</driver>
</drivers>
</datasources>
但是,Wildfly 10 提供了以下功能:
20:17:22,895 WARN [org.jboss.as.connector] (MSC service thread 1-2) WFLYJCA0091: -ds.xml file deployments are deprecated. Support
may be removed in a future version.
20:17:23,058 WARN [org.jboss.as.connector.deployer.dsdeployer] (MSC service thread 1-1) WFLYJCA0012: <drivers/> in standalone -ds
.xml deployments aren't supported: Ignoring my-spring-app.war
我还在 Wildfly 8.1 上进行了测试,其中消息相同。因此,似乎不支持在 -ds.xml 中部署数据源配置,您需要在standalone.xml 中创建它,并引用那里的模块。 This forum link 似乎证实了这一点。
链接还说您可以使用 .ear/.war 描述符定义数据源,无论如何这可能更适合您的用例。我使用位于here 和this answer says you can do the same with .ears 的.war 文件和web.xml 创建了一个示例。可以说它甚至比 -ds.xml 更好,因为它是一个标准。
【讨论】:
尽管日志消息说“已弃用”*-ds.xml 文件中的数据源 + 驱动程序的解决方案仅在 Wildfly 8.X 中有效。使用 jboss 7 它不起作用。 我无法让它与 xa-datasource-class 一起工作。如果我有时间,我会进一步调查 @LauraLiparulo 我的主要观点不是关于弃用的消息,而是下一个。它说不支持定义驱动程序所需的部分。但是您应该能够使用 .ear/war 描述符获得类似的功能。 使用 Wildfly 10.0.0.Final 我只收到 WFLYJCA0091 警告,驱动程序位于 Standalone.xml 中,数据源位于 *-ds.xml 中。现在我不会使用 web.xml 来解决这个问题,因为我的数据源有很多配置标签,它适用于 wildfly 8.2.1 和 wildfly 10.0.X。有一段时间我们应该在公司里被覆盖 :-) @Eis 谢谢你 是的,使用standalone.xml 中的驱动程序也应该可以正常工作。不支持的是 *-ds.xml 中的驱动程序。好的,很高兴能为您提供帮助:)【参考方案2】:感谢 eis,通过将 jboss-deployment-descriptor 放在 ear 存档的 META-INF 文件夹中,我得到了它的工作 :-)
无论如何,现在我必须将驱动程序直接放在standalone.xml文件中:
<driver name="postgresql-9_2-1002_jdbc4_jar" module="org.postgresql">
<driver-class>org.postgresql.Driver</driver-class>
</driver>
通过 jar 部署,我可以直接将其放入 *-ds.xml 文件中。我认为这是可能的。我不放弃。
【讨论】:
查看我的更新 - 不幸的是,这似乎不可能。但是有一个替代方案可能更适合您。以上是关于是否可以在 Wildfly 中将数据源部署描述符与驱动程序模块一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
在 WildFly 上重新部署后,CDI 无法在 @Requestscoped REST 服务中将 @Singleton 设置为 @Provider
如何在wildfly 8.2 Final中将lib添加到模块中?