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

How to configure datasource in wildfly 10?

我开始介绍 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.0-801.jdbc4 复制 postgresql-9.0-801.jdbc4.jar

2.Created 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> 
  1. 修改 standalone.xml(wildfly-10.0.0.CR2\wildfly-10.0.0.CR2\standalone\configuration) 像这样(抱歉 - 我不知道如何复制 xml 它可以被其他用户看到(完整内容在这里可见: http://collabedit.com/psk4a)):

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

我不是 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>

我基于这个 Whosebug 线程:

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

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

module.xml 移动到 wildfly-10.0.0.CR2\wildfly-10.0.0.CR2\modules\org\postgres\main

后问题已解决

下面给出了驱动程序配置和数据源创建以及如何使其全局可见以便所有 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.standalone.xml 文件中配置。Final\standalone\configuration。 作为第一步,在 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.make 通过添加全局可见的已发布驱动程序 到部分

这里是:

<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 实例。

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

虽然这个主题有点老了,但我想强调的是,将数据源安装为模块的推荐方法是使用 CLI 'module add' 命令,该命令为模块创建完整路径和module.xml 配置文件。这样整个过程就少了error-prone.

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

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

参考:How to configure a Datasource in WildFly