4.3. 构建扩展和项目 Artifacts

用于 OpenShift 镜像的 JBoss EAP 使用各种工件扩展 OpenShift 中的数据库支持。这些工件通过不同的机制包含在构建的镜像中:

  • S2I 工件,在 S2I 过程中注入到镜像中。
  • 通过 OpenShift Secret 机制提供的环境文件的运行时工件
构建扩展流程
重要

对使用带有 JBoss EAP 的红帽提供的内部数据源驱动程序的支持现已弃用。红帽建议将 JDBC 驱动程序从数据库厂商获取用于 JBoss EAP 应用程序。

JBoss EAP for OpenShift 镜像不再提供以下内部数据源:

  • MySQL
  • PostgreSQL

有关安装驱动程序的更多信息,请参阅模块、驱动程序和通用部署

有关使用 JBoss EAP 配置 JDBC 驱动程序的更多信息,请参阅 JBoss EAP 配置指南中JDBC 驱动程序

请注意,如果您想要将它们添加到置备的服务器,您也可以创建一个自定义层来安装这些驱动程序和数据源。

4.3.1. S2I Artifacts

S2I 工件包括模块、驱动程序和其他通用部署,它们提供部署所需的必要的配置基础架构。此配置内置在 S2I 过程中,以便在运行时配置数据源和相关资源适配器。

如需了解如何指示 S2I 进程利用自定义 Maven 工件存储库镜像的其他指导,请参阅 Artifact Repository 镜像。

4.3.1.1. 模块、驱动程序和通用部署

有几个选项可以在 JBoss EAP for OpenShift 镜像中包括这些 S2I 工件:

  1. 将工件包含在应用程序源部署目录中。工件会在构建期间下载,并注入到镜像中。这与在 JBoss EAP for OpenShift 镜像中部署一个应用程序类似。
  2. 包括 CUSTOM_INSTALL_DIRECTORIES 环境变量(一个以逗号分隔的目录列表),用于在 S2I 过程中为镜像安装和配置工件。在 S2I 中有两个方法包括以下信息:

    • 在提名的安装目录中的 install.sh 脚本。安装脚本在 S2I 过程中执行,并使用 impunity 操作。

      install.sh 脚本示例

      #!/bin/bash
      
      injected_dir=$1
      source /usr/local/s2i/install-common.sh
      install_deployments ${injected_dir}/injected-deployments.war
      install_modules ${injected_dir}/modules
      configure_drivers ${injected_dir}/drivers.env

      install.sh 脚本负责使用 install-common.sh 提供的 API 自定义基础镜像。install-common.sh 包含 install.sh 脚本用于安装和配置模块、驱动程序和通用部署的功能。

      install-common.sh 中包含的功能:

      • install_modules
      • configure_drivers
      • install_deployments

        模块

        模块是用于类加载和依赖关系管理的逻辑分组。模块在应用服务器的 EAP_HOME/modules/ 目录中定义。每个模块都作为子目录存在,如 EAP_HOME/modules/org/apache/。然后,每个模块目录都会包含一个插槽子目录,默认为 main,其中包含 module.xml 配置文件和任何所需的 JAR 文件。

        有关为 MySQL 和 PostgreSQL JDBC 驱动程序配置 module.xml 文件的更多信息,请参阅 JBoss EAP 配置指南中的 Datasource 配置示例

        PostgreSQL Datasource 的 module.xml 文件示例

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

        MySQL Connect/J 8 Datasource 的 module.xml 文件示例

        <?xml version="1.0" encoding="UTF-8"?>
        <module xmlns="urn:jboss:module:1.0" name="com.mysql">
        <resources>
        <resource-root path="mysql-connector-java-8.0.Z.jar" />
        </resources>
        <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        </dependencies>
        </module>

        注意

        mysql-connector-java-8.0.Z.jar 中的 ".Z" 指示所下载的 JAR 文件的版本。可以重命名该文件,但名称必须与 module.xml 文件中的名称匹配。

        install.sh 中的 install_modules 功能会将对应的 JAR 文件复制到 JBoss EAP 中的模块目录中,以及 module.xml

        驱动程序

        驱动程序作为模块安装。然后,这个驱动程序由 configure_drivers 函数在 install.sh 中配置,该配置属性在运行时工件环境文件中定义。

        添加数据源驱动程序

        MySQL 和 PostgreSQL 数据源不再作为预先配置的内部数据源提供。您仍然可以将这些驱动程序作为模块安装;请参阅模块、驱动程序和通用部署中的描述。您可以从 JBoss EAP 应用程序的数据库供应商处获取这些 JDBC 驱动程序。

        为每个要安装的数据源创建一个 drivers.env 文件。

        MySQL Datasource 的 driver.env 文件示例

        #DRIVER
        DRIVERS=MYSQL
        MYSQL_DRIVER_NAME=mysql
        MYSQL_DRIVER_MODULE=org.mysql
        MYSQL_DRIVER_CLASS=com.mysql.cj.jdbc.Driver
        MYSQL_XA_DATASOURCE_CLASS=com.mysql.cj.jdbc.MysqlXADataSource

        PostgreSQL Datasource 的 driver.env 文件示例

        #DRIVER
        DRIVERS=POSTGRES
        POSTGRES_DRIVER_NAME=postgresql
        POSTGRES_DRIVER_MODULE=org.postgresql
        POSTGRES_DRIVER_CLASS=org.postgresql.Driver
        POSTGRES_XA_DATASOURCE_CLASS=org.postgresql.xa.PGXADataSource

        有关下载不同驱动程序(如 MySQL 或 PostgreSQL)的信息,请参阅配置指南中的 JDBC 驱动程序下载位置。

通用部署

可以使用 install-common.sh 中的 install_deployments 功能从注入的镜像部署可部署资源,如 JAR、WAR、RAR 或 EARs。

  • 如果已经声明了 CUSTOM_INSTALL_DIRECTORIES 环境变量,但没有在自定义安装目录中找到 install.sh 脚本,则以下工件目录将复制到构建镜像中对应的目的地:

    • modules/* 复制到 $JBOSS_HOME/modules/
    • configuration/* 复制到 $JBOSS_HOME/standalone/configuration
    • deployments/* 复制到 $JBOSS_HOME/standalone/deployments

    这是与 install.sh 替代方案相比的基本配置方法,需要正确构建工件。

4.3.2. 运行时工件

4.3.2.1. datasources

数据源有两种类型:

  1. 内部数据源.这些数据源在 OpenShift 上运行,但默认情况下无法通过 Red Hat Registry 或 OpenShift 存储库提供。这些数据源的配置由添加到 OpenShift Secret 的环境文件提供。
  2. 外部数据源.这些数据源不在 OpenShift 中运行。外部数据源的配置由添加到 OpenShift Secret 的环境文件提供。
注意

有关创建和配置 OpenShift Secret 的更多信息,请参阅 Secret

您可以在目录中创建数据源环境文件,如源项目的配置目录。以下示例显示了示例数据源环境文件的内容:

示例:数据源环境文件

DB_SERVICE_PREFIX_MAPPING=PostgresXA-POSTGRES=DS1
DS1_JNDI=java:jboss/datasources/pgds
DS1_DRIVER=postgresql-42.2.5.jar
DS1_USERNAME=postgres
DS1_PASSWORD=postgres
DS1_MAX_POOL_SIZE=20
DS1_MIN_POOL_SIZE=20
DS1_CONNECTION_CHECKER=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
DS1_EXCEPTION_SORTER=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter

DB_SERVICE_PREFIX_MAPPING 属性是一个以逗号分隔的数据源属性前缀列表。然后,这些前缀会附加到该数据源的所有属性中。然后,可以将多个数据源包含在一个环境文件中。另外,还可在单独的环境文件中提供各个数据源。

datasources 包含两种类型的属性:连接池相关的属性,以及特定于数据库驱动程序的属性。连接池特定的属性生成与数据源的连接。数据库驱动程序的属性决定数据源的驱动程序,并配置为驱动程序 S2I 工件。

在上例中,DS1 是数据源前缀,CONNECTION_CHECKER 指定用于验证数据库的连接检查器类,而 EXCEPTION_SORTER 指定用来检测致命数据库连接异常分类器类。

datasources 环境文件添加到项目的 OpenShift Secret 中。这些环境文件然后在模板中使用 ENV_FILES 环境属性调用,其值是完全限定环境文件的逗号分隔列表,如下所示。

{
    “Name”: “ENV_FILES”,
    “Value”: “/etc/extensions/datasources1.env,/etc/extensions/datasources2.env”
}

4.3.2.2. 资源适配器

资源适配器的配置由添加到 OpenShift Secret 的环境文件提供。

表 4.2. 资源适配器属性

属性描述

PREFIX_ID

在服务器配置文件中指定的资源适配器标识符。

PREFIX_ARCHIVE

资源适配器归档。

PREFIX_MODULE_SLOT

插槽子目录,其中包含 module.xml 配置文件和任何所需的 JAR 文件。

PREFIX_MODULE_ID

从其中载入对象工厂 Java 类的 JBoss 模块 ID。

PREFIX_CONNECTION_CLASS

受管连接工厂或 admin 对象的完全限定类名称。

PREFIX_CONNECTION_JNDI

连接工厂的 JNDI 名称。

PREFIX_PROPERTY_ParentDirectory

保存数据文件的目录。

PREFIX_PROPERTY_AllowParentPaths

AllowParentPaths 设置为 false 以禁止在路径中。 这可防止请求父目录中包含的文件。

PREFIX_POOL_MAX_SIZE

池连接的最大数量。每个子池不会创建更多连接。

PREFIX_POOL_MIN_SIZE

池的最小连接数。

PREFIX_POOL_PREFILL

指定是否应预先填充池。更改此值需要重启服务器。

PREFIX_POOL_FLUSH_STRATEGY

在出错时,应该如何清除池。有效值为: FailingConnectionOnly (默认)、IdleConnections、和 EntirePool

RESOURCE_ADAPTERS 属性是资源适配器属性前缀的逗号分隔列表。然后,这些前缀会附加到该资源适配器的所有属性中。然后可在单个环境文件中包含多个资源适配器。在以下示例中,MYRA 用作资源适配器的前缀。另外,可在单独的环境文件中提供每个资源适配器。

示例:资源适配器环境文件

#RESOURCE_ADAPTER
RESOURCE_ADAPTERS=MYRA
MYRA_ID=myra
MYRA_ARCHIVE=myra.rar
MYRA_CONNECTION_CLASS=org.javaee7.jca.connector.simple.connector.outbound.MyManagedConnectionFactory
MYRA_CONNECTION_JNDI=java:/eis/MySimpleMFC

资源适配器环境文件添加到项目命名空间的 OpenShift Secret 中。这些环境文件然后在模板中使用 ENV_FILES 环境属性调用,其值是完全限定环境文件的逗号分隔列表,如下所示。

{
    "Name": "ENV_FILES",
    "Value": "/etc/extensions/resourceadapter1.env,/etc/extensions/resourceadapter2.env"
}