微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 GlassFish/Payara 连接到 MySQL 8.x

如何解决将 GlassFish/Payara 连接到 MySQL 8.x

我有一个 maven JSF/JPA Web 应用程序,它连接到使用 Netbeans 12 开发的 MysqL 5.x。该应用程序运行良好,直到我将 MysqL 版本从 5.x 更新到 8.x。自那次更新以来,我无法配置数据库以连接到 JSF 应用程序。与 MysqL 8.x 的连接在 Netbeans 中工作,但在部署应用程序时不起作用。

当前配置包括 EclipseLink 2.7.7、MysqL 8.0.23 和 GlassFish 5(5.0.1) / Payara 5(5.2021.1)。无法成功连接到 MysqL。我也未能在 GlassFish 和 Payara 管理控制台的 JDBS 连接池内建立连接。有人可以将我指向 MysqL 版本 8 链接到 Payara 或 GlassFish 的来源吗?

Payara 管理控制台中显示错误如下。

An error has occurred Ping Connection Pool Failed for pooConnection.
Connection Could not be allocated because: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. Please check the server.log for more details. 

日志文件包含以下内容

[javax.enterprise.resource.resourceadapter.com.sun.enterprise.connectors.service] [tid: _ThreadID=161 _ThreadName=admin-thread-pool::admin-listener(3)] [timeMillis: 1613549343463] [levelValue: 900] [[
  RAR8054: Exception while creating an unpooled [test] connection for pool [ pooConnection ],Connection Could not be allocated because: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.]]

[2021-02-17T13:39:03.472+0530] [Payara 5.2021.1] [SEVERE] [] [org.glassfish.admingui] [tid: _ThreadID=139 _ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1613549343472] [levelValue: 1000] [[
  RestResponse.getResponse() gives FAILURE.  endpoint = 'http://localhost:4848/management/domain/resources/ping-connection-pool.json'; attrs = '{id=pooConnection}']]

解决方法

为了连接到 Payara Server,我发现的唯一有效方法是直接在域管理控制台中创建一个连接池。

现在看起来似乎很长,但完成后它将成为第二天性:

https://dev.mysql.com/downloads/connector/j/ 下载 MySQL8 Java 连接器 并解压到任何文件夹:

它会提取到类似的东西: mysql-connector-java-8.0.23 2/mysql-connector-java-8.0.23.jar

1) 确保您已启动并运行 Payara Server:

cd PATH_TO_PAYARA/bin

2) 启动/重启

./asadmin start-domain

注意:这将默认启动 domain1

3) 安装 MySQL8 连接器

./asadmin add-library PATH_TO_MYSQL_CONNECTOR.jar

4)(必需)重启 Payara

./asadmin restart-domain

5) 通过 http://localhost:4848/common/index.jsf 访问管理控制台

6) 在侧边栏中导航到“JDBC”->“JDBC 连接池”菜单

7) 从那里,单击“新建”以添加新的连接池

你想吃多少就吃多少。因此,如果您之前尝试过,您可以将池保留在那里。

8) 在:新的 JDBC 连接池(第 1 步,共 2 步)

Pool Name: MySQL8Pool (or whatever you want)
Resource Type: javax.sql.DataSource
Database Driver Vendor: MySQL8

点击“下一步

9) 向下滚动到“附加属性”

全选并“删除属性”

10) 添加 6 个属性,键/值如下:

DatabaseName  YOUR_DB_NAME
User YOUR_DB_USER
Password YOUR_DB_PASSWORD
ServerName localhost
PortNumber 3306
UseSSL false

点击“保存

11) 在侧边栏中导航到“JDBC”->“JDBC 资源”菜单

12) 从那里,单击“新建”以添加新的 JDBC 资源

并填充:

JNDI Name: jdbc/MySQL8App
PoolName: MySQL8Pool

点击“保存

从现在开始,我假设您正在使用 Maven。

13) 在你的 pom.xml 中确保你有 Eclipse Persistence 在你标记中:

  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.core</artifactId>
    <version>2.7.7</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.asm</artifactId>
    <version>2.7.7</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.antlr</artifactId>
    <version>2.7.7</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa</artifactId>
    <version>2.7.7</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa.jpql</artifactId>
    <version>2.7.7</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.moxy</artifactId>
    <version>2.7.7</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.2.1</version>
  </dependency> 

14) 在

中创建一个持久化单元

在persistence.xml文件中:

<persistence-unit name="mysql8PU" transaction-type="JTA">
  <jta-data-source>jdbc/MySQL8App</jta-data-source>
  <exclude-unlisted-classes>false</exclude-unlisted-classes>
  <shared-cache-mode>NONE</shared-cache-mode>
  <!--properties>
    <property name="javax.persistence.schema-generation.database.action" value="drop-and-create OR create OR complete remove this line"/-->
  </properties>
</persistence-unit>

请注意,在 jta-data-source 中它指向 jdbc/MySQL8App 并且从现在起可以在代码中的任何位置使用它,以便在构建 Payara 之后现在可以注入了。

PersistenceService.java

package com.your.package.services

import javax.enterprise.context.ApplicationScoped;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@ApplicationScoped
public class PersistenceService {

  @PersistenceContext(unitName = "mysql8PU")
  EntityManager entityManager;
}

现在重建并重新运行您的项目,一切都应该没问题!

,

只需四步即可配置您的连接:

  1. 将 Mysql JDBC 驱动程序 JAR 复制到 $PAYARA_HOME/glassfish/domains/$YOUR_DOMAIN/lib/ e。 g.

    cp mysql-connector-java-8.0.22.jar /opt/payara5/glassfish/domains/domain1/lib/

  2. 创建 XML 资源描述符文件,将其命名为 glassfish-resources.xml。指定适当的参数:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
    <jdbc-connection-pool connection-creation-retry-interval-in-seconds="30" connection-validation-method="auto-commit" datasource-classname="com.mysql.cj.jdbc.MysqlDataSource" wrap-jdbc-objects="false" res-type="javax.sql.DataSource" name="mysql_mydb_rootPool" is-connection-validation-required="true" connection-creation-retry-attempts="10" validate-atmost-once-period-in-seconds="60">
        <property name="User" value="root"/>
        <property name="Password" value="secret"/>
        <property name="URL" value="jdbc:mysql://localhost:3306/voyager?zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=false"/>
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
        <property name="characterEncoding" value="utf-8"/>
    </jdbc-connection-pool>
    <jdbc-resource enabled="true" jndi-name="jdbc/mydb" object-type="user" pool-name="mysql_mydb_rootPool"/>
</resources>
  1. 向 Payara 添加资源

    $PAYARA_HOME/bin/asadmin add-resources glassfish-resources.xml

  2. 重新启动您的域

    $PAYARA_HOME/bin/asadmin restart-domain

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。