如何在 Wildfly 10 中配置数据源?

Posted

技术标签:

【中文标题】如何在 Wildfly 10 中配置数据源?【英文标题】:How to configure datasource in wildfly 10? 【发布时间】:2016-01-09 22:56:20 【问题描述】:

我开始介绍 Wildfly 学习。 我已经下载了服务器的分发版。 现在我正在尝试配置数据源,但我看到以下错误:

Unexpected HTTP response: 500

Request

    "address" => [
        ("subsystem" => "datasources"),
        ("data-source" => "PostgreDataSource")
    ],
    "operation" => "test-connection-in-pool"


Response

Internal Server Error

    "outcome" => "failed",
    "failure-description" => "WFLYJCA0040: failed to invoke operation: WFLYJCA0042: failed to match pool. Check JndiName: java:jboss/datasources/PostgreDataSource",
    "rolled-back" => true

我的步骤: 1.创建文件夹wildfly-10.0.0.CR2\wildfly-10.0.0.CR2\modules\org\postgres\main并从\.m2\repository\postgresql\postgresql\9.0-801.jdbc4那里复制postgresql-9.0-801.jdbc4.jar

2.创建的module.xml(在wildfly-10.0.0.CR2\wildfly-10.0.0.CR2\modules内):

内容如下:

<module xmlns="urn:jboss:module:1.0" name="org.postgres"> 
  <resources> 
    <resource-root path="postgresql-9.0-801.jdbc4.jar"/> 
  </resources> 
   <dependencies> 
     <module name="javax.api"/> 
     <module name="javax.transaction.api"/> 
   </dependencies> 
</module> 
    像这样修改了standalone.xml(wildfly-10.0.0.CR2\wildfly-10.0.0.CR2\standalone\configuration)(对不起-我不知道如何复制xml以使其对其他用户可见(此处显示完整内容:http://collabedit.com/psk4a)):

请帮助理解我做错了什么?

【问题讨论】:

【参考方案1】:

我不是 100% 肯定的,但如果我在网络上看到一些链接,这可能是由默认池设置引起的。您可以尝试向数据源添加特定的池配置设置:

<datasource jndi-name="blabla"... >
  <pool>  
    <min-pool-size>1</min-pool-size>  
    <max-pool-size>20</max-pool-size>  
    <prefill>true</prefill>            
  </pool>  
</datasource>

我基于这个 *** 线程:WildFly jdbc connection with Oracle

答案链接到这个相关的 JBoss 论坛主题:https://developer.jboss.org/thread/257721

顺便提一下,Wildfly 配置文档中提到了池设置。这是 Wildfly 9,但我无法想象 Wildfly 10 发生了很大变化:https://docs.jboss.org/author/display/WFLY9/DataSource+configuration

【讨论】:

【参考方案2】:

module.xml 移动到wildfly-10.0.0.CR2\wildfly-10.0.0.CR2\modules\org\postgres\main 后问题已解决

【讨论】:

【参考方案3】:

下面给出的是驱动程序配置和数据源创建以及如何使其全局可见,以便所有 J2EE 部署都可以在需要时访问特定模块。

1。 PostGreSQL 驱动配置

在 wildfly-8.2.0.Final\modules 目录下的模块中创建如下目录结构,并放置上述文件和驱动 jar。 目录:wildfly-8.2.0.Final\modules\org\postgresql\main

文件:module.xml

    <!--<?xml version="1.0" encoding="UTF-8"?>-->
    <module xmlns="urn:jboss:module:1.0" name="org.postgresql">
        <resources>
            <resource-root path="postgresql-9.4-1204.jdbc41.jar"/>
        </resources>
        <dependencies><module name="javax.api"/></dependencies>
    </module>

JAR:PostGreSQL 驱动程序:postgresql-9.4-1204.jdbc41.jar

注意:驱动程序版本可以是您的选择,请确保在 module.xml 文件中反映该版本名称。 请注意,module.xml 文件中提到的驱动名称="org.postgresql" 应与standalone.xml 文件中的数据源配置相匹配。

注意:PostGreSQL 驱动程序版本应与系统中的 java 版本兼容。 在此示例中,java 为 1.7,使用的 PostGreSQL 驱动程序为 postgresql-9.4-1204.jdbc41.jar。

2。配置数据源

数据源在 WildFly 8.2.0.Final\standalone\configuration 的standalone.xml 文件中配置。 作为第一步,在standalone.xml 文件中配置PostGreSQL 驱动程序引用,如下标记内

<driver name="postgresql" module="org.postgresql">
<datasource-class>org.postgresql.Driver</datasource-class>
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>

1。添加数据源详细信息:

请在标签内添加这个

<datasource jndi-name="java:/db1" pool-name="db1" enabled="true" use-java-context="true">
<connection-url>jdbc:postgresql://localhost:5432/dbname</connection-url>
<driver>postgresql</driver>
<security>
    <user-name>user_name</user-name>
    <password>password</password>
</security>
</datasource>

2.通过添加使已发布的驱动程序全局可见 到部分

这里是:

<global-modules>
            <module name="org.postgresql" slot="main"/>
</global-modules>

注意:全局模块是一组 JBoss 模块,它们将作为依赖项添加到每个 Java EE 部署的 JBoss 模块中。这种依赖关系允许 Java EE 部署查看全局模块导出的类。参考:https://docs.jboss.org/author/display/WFLY8/Subsystem+configuration

完成上述配置后,请启动您的 WildFly 实例。

【讨论】:

&lt;datasource-class&gt;org.postgresql.Driver&lt;/datasource-class&gt; 可能会导致 ClassCastException - 如果是这种情况,请参阅:***.com/questions/36232968/…【参考方案4】:

我想说我只是通过使用 wildfly 管理控制台 (http://localhost:9990/console/) 解决了这个问题。不是那么简单的解决方案,但它有效。我只在创建数据源之后从外部目录指向了 JDBC 驱动程序 jar。没有手动xml,也没有修改wildfly的目录结构。 对于 java 8 + postgresql 9.5,我使用了 postgresql-42.1.1.jar。我之前遇到问题只是因为我选择了错误的驱动程序和数据库的名称错误。

【讨论】:

【参考方案5】:

虽然这个话题有点老了,但我想强调的是,将数据源安装为模块的推荐方法是使用 CLI 'module add' 命令创建模块和 module.xml 的完整路径配置文件。这使得整个过程不易出错。

module add --name=org.postgres --resources=[JDBC JAR FILE] --dependencies=javax.api,javax.transaction.api

另外,我看到这里提到了对数据源使用全局模块。这不是 JDBC 驱动程序的常见做法,因为全局模块旨在用于所有应用程序通用且不需要维护的共享库。如果数据库已升级并且您忘记更新模块配置中的 JDBC 驱动程序,您最终可能会得到不一致的数据源配置。

参考:How to configure a Datasource in WildFly

【讨论】:

以上是关于如何在 Wildfly 10 中配置数据源?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WildFly 中配置压缩日志?

JBoss 5.1.0 到 Wildfly

如何在 WildFly 中配置 EJB WebServices(入耳式)

Wildfly - 配置 ActiveMQ 以使用 Postgres 日志

Wildfly vs undertow 嵌入式表演

在 Wildfly 10 中配置 HTTP 标头