【问题标题】:Troubles in connecting to database on Wildfly using postgresql使用 postgresql 在 Wildfly 上连接数据库的问题
【发布时间】:2020-02-11 14:43:47
【问题描述】:

我在使用 postgresql 连接到 Wildfly 上的数据库时遇到问题,我在 Red Hat Core Studio 中编写。
我的standalone.xml 是:

<datasources>
         <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
         <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
              <driver>h2</driver>
              <security>
                   <user-name>sa</user-name>
                   <password>sa</password>
              </security>
          </datasource>
          <datasource jndi-name="java:jboss/datasources/tvTutorial" pool-name="tvTutorial" enabled="true" statistics-enabled="true">
               <connection-url>jdbc:postgresql//localhost:5432/tvTutorial</connection-url>
               <driver-class>org.postgresql.Driver</driver-class>
               <connection-property name="url">
                   jdbc:postgresql//localhost:5432/tvTutorial
               </connection-property>
               <driver>NewPestsList-1.0.war</driver>
               <security>
                   <user-name>user</user-name>
                   <password>password</password>
               </security>
           <validation>
               <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
                   <background-validation>true</background-validation>
                   <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
            </validation>
            </datasource>
            <drivers>
                <driver name="h2" module="com.h2database.h2">
                    <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                </driver>
            </drivers>
        </datasources>
    </subsystem>
...
    </deployment>
    </deployments>
</server>

我的 persistence.xml 是:

<!DOCTYPE xml>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="NewPestsList">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name='javax.persistence.jdbc.driver'
                value='org.postgresql.Driver' />
            <property name='javax.persistence.jdbc.url'
                value='jdbc:postgresql//localhost:5432/tvTutorial' />
            <property name='javax.persistence.jdbc.user'
                value='user' />
            <property name='javax.persistence.jdbc.password'
                value='password' />
            <property name='hibernate.dialect'
                value='org.hibernate.dialect.PostgreSQLDialect' />
            <property name='hibernate.connection.shutdown' value='true' />
            <property name='hibernate.show_sql' value='false' />
            <property name='hibernate.format_sql' value='false' />
            <property name="hibernate.case.use_query_cache"
                value="false" />
        </properties>
    </persistence-unit>
</persistence>

当我进入wildfly HAL管理时

console/configuration/subsystems/datasources&amp;drivers/JDBC Drivers/

我看到两个 JDBC 驱动程序:

"NewPestsList-1.0.war""NewPestsList-1.0.war_org.postgresql.Driver_42_2" 如图 two war files 我的日志是:

16:10:55,949 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) WFLYJCA0010: Unbound data source [java:jboss/datasources/tvTutorial]
16:10:55,949 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-1) WFLYJCA0019: Stopped Driver service with driver-name = NewPestsList-1.0.war_org.postgresql.Driver_42_2
16:10:55,950 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 76) WFLYUT0022: Unregistered web context: '/NewPestsList-1.0' from server 'default-server'
16:10:55,951 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-6) WFLYJCA0019: Stopped Driver service with driver-name = NewPestsList-1.0.war
16:10:55,995 INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 92) WFLYJPA0011: Stopping Persistence Unit (phase 2 of 2) Service 'NewPestsList-1.0.war#NewPestsList'
16:10:55,998 INFO  [org.hibernate.orm.beans] (ServerService Thread Pool -- 92) HHH10005004: Stopping BeanContainer : org.hibernate.resource.beans.container.internal.CdiBeanContainerExtendedAccessImpl@1145c435
16:10:55,999 INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 92) WFLYJPA0011: Stopping Persistence Unit (phase 1 of 2) Service 'NewPestsList-1.0.war#NewPestsList'
16:10:56,054 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-7) WFLYSRV0028: Stopped deployment NewPestsList-1.0.war (runtime-name: NewPestsList-1.0.war) in 105ms
16:10:56,054 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) WFLYCTL0013: Operation ("composite") failed - address: ([]) - failure description: "WFLYCTL0441: Operation has resulted in failed or missing services 
WFLYCTL0184:    New missing/unsatisfied dependencies:
      service jboss.jdbc-driver.NewPestsList-1_0_war (missing) dependents: [service jboss.driver-demander.java:jboss/datasources/tvTutorial, service org.wildfly.data-source.tvTutorial] 
WFLYCTL0448: 2 additional services are down due to their dependencies being missing or failed"
16:10:56,085 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) WFLYSRV0009: Undeployed "NewPestsList-1.0.war" (runtime-name: "NewPestsList-1.0.war")
16:10:56,085 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) WFLYCTL0183: Service status report
WFLYCTL0184:    New missing/unsatisfied dependencies:
      service jboss.jdbc-driver.NewPestsList-1_0_war (missing) dependents: [service jboss.driver-demander.java:jboss/datasources/tvTutorial, service org.wildfly.data-source.tvTutorial] 
WFLYCTL0448: 2 additional services are down due to their dependencies being missing or failed
16:11:01,096 INFO  [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) WFLYDS0004: Found NewPestsList-1.0.war in deployment directory. To trigger deployment create a file called NewPestsList-1.0.war.dodeploy
16:11:01,102 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0027: Starting deployment of "NewPestsList-1.0.war" (runtime-name: "NewPestsList-1.0.war")
16:11:02,321 INFO  [org.jboss.as.jpa] (MSC service thread 1-3) WFLYJPA0002: Read persistence.xml for NewPestsList
16:11:02,415 INFO  [org.jboss.weld.deployer] (MSC service thread 1-1) WFLYWELD0003: Processing weld deployment NewPestsList-1.0.war
16:11:02,430 INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 92) WFLYJPA0010: Starting Persistence Unit (phase 1 of 2) Service 'NewPestsList-1.0.war#NewPestsList'
16:11:02,431 INFO  [org.hibernate.jpa.internal.util.LogHelper] (ServerService Thread Pool -- 92) HHH000204: Processing PersistenceUnitInfo [
    name: NewPestsList
    ...]
16:11:02,720 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-8) WFLYJCA0005: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 42.2)
16:11:02,721 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-8) WFLYJCA0005: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 42.2)
16:11:02,721 WARN  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-8) WFLYJCA0003: Unable to instantiate driver class "org.postgresql.Driver": org.jboss.msc.service.DuplicateServiceException: Service jboss.jdbc-driver.NewPestsList-1_0_war_org_postgresql_Driver_42_2 is already registered
16:11:02,737 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-5) WFLYJCA0018: Started Driver service with driver-name = NewPestsList-1.0.war
16:11:02,737 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-7) WFLYJCA0018: Started Driver service with driver-name = NewPestsList-1.0.war_org.postgresql.Driver_42_2
16:11:02,739 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-3) WFLYJCA0001: Bound data source [java:jboss/datasources/tvTutorial]
16:11:02,747 INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 92) WFLYJPA0010: Starting Persistence Unit (phase 2 of 2) Service 'NewPestsList-1.0.war#NewPestsList'
16:11:02,748 INFO  [org.hibernate.dialect.Dialect] (ServerService Thread Pool -- 92) HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
16:11:02,755 INFO  [org.hibernate.type.BasicTypeRegistry] (ServerService Thread Pool -- 92) HHH000270: Type registration [java.util.UUID] overrides previous : org.hibernate.type.UUIDBinaryType@74330d99
16:11:02,757 INFO  [org.hibernate.envers.boot.internal.EnversServiceImpl] (ServerService Thread Pool -- 92) Envers integration enabled? : true
16:11:02,970 WARN  [org.jboss.weld.Bootstrap] (MSC service thread 1-2) WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class com.sun.faces.flow.FlowDiscoveryCDIHelper is deprecated from CDI 1.1!
16:11:02,970 INFO  [io.smallrye.metrics] (MSC service thread 1-2) MicroProfile: Metrics activated
16:11:03,146 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (ServerService Thread Pool -- 92) Initializing Mojarra 2.3.9.SP02 for context '/NewPestsList-1.0'
16:11:04,491 INFO  [org.primefaces.webapp.PostConstructApplicationEventListener] (ServerService Thread Pool -- 92) Running on PrimeFaces 7.0
16:11:04,502 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 92) WFLYUT0021: Registered web context: '/NewPestsList-1.0' for server 'default-server'
16:11:04,546 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) WFLYSRV0010: Deployed "NewPestsList-1.0.war" (runtime-name : "NewPestsList-1.0.war")
16:11:04,546 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) WFLYCTL0183: Service status report
WFLYCTL0185:    Newly corrected services:
      service jboss.data-source.reference-factory.tvTutorial (new available)
      service jboss.jdbc-driver.NewPestsList-1_0_war (new available)
      service org.wildfly.data-source.tvTutorial (new available)

我感觉这与此有关,但由于我是编程新手,我不确定是否应该添加更多数据,请告诉我。

编辑:我在 stdunbar 和 Will T 的帮助下更新了我的程序。 仍然需要学习如何重新安装 Wildfly。 现在我收到这些警告和错误:

WARN  [org.jboss.as.domain.management.security] (MSC service thread 1-1) WFLYDM0111: Keystore C:\Users\david\wildfly-17.0.0.Final\standalone\configuration\application.keystore not found, it will be auto generated on first use with a self signed certificate for host localhost
WARN  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-5) WFLYJCA0003: Unable to instantiate driver class "org.postgresql.Driver": org.jboss.msc.service.DuplicateServiceException: Service jboss.jdbc-driver.NewPestsList-1_0_war_org_postgresql_Driver_42_2 is already registered
ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "NewPestsList-1.0.war")]) - failure description: {
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.jdbc.tvTutorial"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "jboss.persistenceunit.\"NewPestsList-1.0.war#tvTutorialPU\".__FIRST_PHASE__ is missing [jboss.naming.context.java.jdbc.tvTutorial]",
        "jboss.persistenceunit.\"NewPestsList-1.0.war#tvTutorialPU\" is missing [jboss.naming.context.java.jdbc.tvTutorial]"

编辑#2:

我写了正确的地址后它工作 &lt;jta-data-source&gt;jdbc/tvTutorial&lt;/jta-data-source&gt; 谢谢两位

【问题讨论】:

    标签: java postgresql wildfly


    【解决方案1】:

    diver必须作为模块添加,不能引用你的war部署

    本指南是针对mysql的,但过程是一样的,只是使用正确的名称

    https://medium.com/@hasnat.saeed/install-and-configure-mysql-jdbc-driver-on-jboss-wildfly-e751a3be60d3

    【讨论】:

    • 感谢您的回复。我取消了驱动程序和数据库的部署,并按照说明进行了操作。仍然有警告:WARN [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-8) WFLYJCA0003: Unable to instantiate driver class "org.postgresql.Driver": org.jboss.msc.service.DuplicateServiceException: Service jboss.jdbc-driver.NewPestsList-1_0_war_org_postgresql_Driver_42_2 is already registered我取消部署这两个东西时这个驱动程序不在那里,但是当我重新部署时,它又回来了。有什么建议可以解决这个问题吗?
    【解决方案2】:

    您正在创建一个数据源一个 JDBC 连接。你真的只想要数据源。因此,与您修改standalone.xml 和安装模块所采取的手动步骤相比,我推荐一种更标准的方法,这种方法不易出错。只需拥有一份可用的 JDBC 驱动程序副本,您就可以编写整个过程的脚本。

    创建一个包含如下代码的脚本:

    embed-server --server-config=standalone.xml --std-out=echo
    
    batch
    
    # add the module
    module add --name=org.postgres --resources=/path/to/postgresql-42.2.8.jar --dependencies=javax.api,javax.transaction.api
    
    # add the driver
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver)
    
    # add the datasource
    /subsystem=datasources/data-source=tvTutorial/:add(connection-url=jdbc:postgresql://localhost:5432/tvTutorial,driver-name=postgres,jndi-name=java:/jdbc/tvTutorial,user-name=user,password=password)
    
    run-batch
    

    然后运行:

    $WILDFLY_HOME/bin/jboss-cli.sh --file=the_file_name.cli
    

    (注意 $WILDFLY_HOME 可能没有设置。它只是你安装 Wildfly 的目录)

    假设您的服务当前未运行。如果它正在运行,则删除前两行和最后一行。

    您的persistence.xml 文件现在超级简单,因为配置都通过数据源在standalone.xml 中:

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
                 version="2.2">
        <persistence-unit name="tvTutorialPU" transaction-type="JTA">
            <jta-data-source>jdbc/tvTutorial</jta-data-source>
        </persistence-unit>
    </persistence>
    

    这为您提供了一个可重复的过程。您现在不必手动修改 standalone.xml 文件,如果您升级我已经在 Wildfly 8.x 到 18.x 上使用了相同的脚本。

    我会从全新安装 Wildfly 开始,因为您不知道什么都已损坏。

    【讨论】:

    • ¨感谢您的帮助。现在我更新了错误和警告
    • 只有一个(也许是愚蠢的)问题:我还想搜索并将数据添加到数据库中。为此,我可能需要连接到数据库?我不知道在哪里写这个
    • @Freeky - 现在它变得有趣了。我找到了一个pretty simple tutorial,应该可以帮助您入门。请注意,您的persistence.xml 已经正确,因此请忽略该部分。 JPA 是一个非常强大的工具,但有一些初始学习曲线。如果您对此答案满意,我将不胜感激并标记为已接受。然后,如果您在 JPA 上遇到困难,我会提出一个新问题。
    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 2015-10-25
    • 2021-07-17
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多