【问题标题】:WFLYCTL0412: Required services that are not installed:WFLYCTL0412:未安装的必需服务:
【发布时间】:2017-01-09 21:58:29
【问题描述】:

我正在尝试在 Wildfly 10.0 中添加数据源,但是当我测试连接时会抛出以下错误消息:

Unexpected HTTP response: 500

Request
{
    "address" => [
        ("subsystem" => "datasources"),
        ("data-source" => "PostgreCrawlazo")
    ],
    "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:/crawlazo",
    "rolled-back" => true,
    "response-headers" => {"process-state" => "reload-required"}
}

来自服务器日志的错误:

2016-09-01 16:28:40,524 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("data-source" => "PostgreCrawlazo")
]) - failure description: {
    "WFLYCTL0412: Required services that are not installed:" => [
        "jboss.jdbc-driver.postgres",
        "jboss.jdbc-driver.postgres"
    ],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "jboss.driver-demander.java:/crawlazo is missing [jboss.jdbc-driver.postgres]",
        "org.wildfly.data-source.PostgreCrawlazo is missing [jboss.jdbc-driver.postgres]",
        "org.wildfly.data-source.PostgreCrawlazo is missing [jboss.jdbc-driver.postgres]"
    ]
}

我正在从standalone.xml 和module.xml 复制相同的配置文件

这是我如何在standalone.xml 中设置数据源的部分内容:

 <datasource jndi-name="java:/crawlazo" pool-name="PostgreCrawlazo" enabled="true">
                    <connection-url>jdbc:postgresql://x.x.x.x:5432/crawlazo</connection-url>
                    <driver>postgres</driver>
                    <pool>
                        <min-pool-size>1</min-pool-size>
                        <max-pool-size>40</max-pool-size>
                    </pool>
                    <security>
                        <user-name>someUser</user-name>
                        <password>somePasswd</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="postgres" module="org.postgres">
                        <driver-class>org.postgresql.Driver</driver-class>
                    </driver>
            </drivers>

和module.xml:

<module xmlns="urn:jboss:module:1.0" name="org.postgresql">
    <resources>
        <resource-root path="postgresql-9.2-1004.jdbc3.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

我在部署文件夹中有一个 postgresql-9.2-1004.jdbc3.jar。

为什么会出现这个错误?我可能忘记配置什么?

【问题讨论】:

  • 我在部署 .war 文件时遇到了同样的问题。当我将数据源更改为 PostgreSQL 时,总是会发生这种情况。你找到解决问题的方法了吗?

标签: wildfly


【解决方案1】:

驱动程序 jar 应该在模块文件夹中,而不是在部署文件夹中,正如您在编写时所暗示的那样:

<resources>
    <resource-root path="postgresql-9.2-1004.jdbc3.jar"/>
</resources>

【讨论】:

    【解决方案2】:

    我的工作是这样的:

    1 - 在 WildFly 安装目录中创建一个文件夹: \modules\org\postgres\main

    2 - 在上面的文件夹中创建一个“module.xml”,内容如下:

    <?xml version='1.0' encoding='UTF-8'?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
    
        <resources>
            <resource-root path="postgresql-9.4-1204-jdbc4.jar"/>
        </resources>
    
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
            <module name="javax.servlet.api" optional="true"/>
        </dependencies>
    </module>
    

    3 - 将驱动程序 JAR 文件复制到与步骤 1 相同的文件夹中

    4 - 在standalone.xml中添加数据源:

    <datasource jta="false" jndi-name="java:jboss/datasources/YourDS" pool-name="YourDS" enabled="true" use-ccm="false">
        <connection-url>jdbc:postgresql://localhost:5432/yourDB</connection-url>
        <driver>postgres</driver>
        <security>
            <user-name>user</user-name>
            <password>pass/password>
        </security>
        <validation>
            <validate-on-match>false</validate-on-match>
            <background-validation>false</background-validation>
        </validation>
        <statement>
            <share-prepared-statements>false</share-prepared-statements>
        </statement>
    </datasource>
    
    <drivers>
        <driver name="postgres" module="org.postgres">
            <driver-class>org.postgresql.Driver</driver-class>
        </driver>
    </drivers>
    

    【讨论】:

      【解决方案3】:

      这就是我使用 jboss-cli 创建 xa-datasources 的方式 控制台

      首先,我在 /opt/wildfly/modules/system/layers/base/org/postgresql/main 上添加了驱动程序。请注意,我为驱动程序模块创建了文件,但我还添加了 jar

      [root@localhost main]# ls -lrta
      total 776
      drwxr-xr-x. 3 root    root        18 abr  4 17:10 ..
      -rwxr-xr-x. 1 wildfly wildfly 790405 abr  4 17:14 postgresql-42.2.2.jar
      -rwxr-xr-x. 1 wildfly wildfly    278 abr 17 17:25 module.xml
      drwxr-xr-x. 2 root    root        53 abr 17 19:40 .
      [root@localhost main]# cat module.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <module xmlns="urn:jboss:module:1.1" name="org.postgresql" >
      <resources>
      <resource-root path="postgresql-42.2.2.jar"/>
      </resources>
      <dependencies>
      <module name="javax.api"/>
      <module name="javax.transaction.api"/>
      </dependencies>
      </module>
      

      接下来,我在控制台上创建了数据源

      jboss-cli.sh --connect --controller=192.168.119.116:9990 --commands='xa-data-source add --name=FrontEndDSXA --profile=full --driver-name="postgresql" --enabled="true" --use-ccm="true" --jndi-name="java:jboss/datasources/FrontEndDSXA" --user-name="user" --password="password" --validate-on-match=true --background-validation=false --prepared-statements-cache-size=50 --share-prepared-statements=true --min-pool-size=5 --max-pool-size=150 --pool-prefill=true --transaction-isolation=TRANSACTION_READ_COMMITTED --check-valid-connection-sql="select 1;" --xa-datasource-properties={ "DatabaseName"=>"frontend", "PortNumber"=>"5432", "ServerName"=>"192.168.119.114" }'
      

      接下来,将配置文件 full 添加到 domain.xml 上的 my-server-group

      <server-groups>
          <server-group name="my-server-group" profile="full">
              <jvm name="default">
                  <heap size="64m" max-size="512m"/>
              </jvm>
              <socket-binding-group ref="full-sockets"/>
          </server-group>
      </server-groups>
      

      最后,我重新加载了 Wildfly(在我的例子中,主机默认为 master

      /opt/wildfly/bin/jboss-cli.sh --connect --controller=192.168.119.116:9990 --commands="reload --host=master"
      

      现在,my-server-group 上的所有服务器都可以看到数据源了。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2019-06-01
        • 2022-11-19
        • 2017-12-01
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 2017-03-14
        • 2020-07-31
        • 1970-01-01
        相关资源
        最近更新 更多