36.2. 配置 JDBC Web 服务器数据源
Java 数据库连接(JDBC)是一种 API 规范,用于将 Java 编写的程序连接到数据库。数据源是一个对象,它允许 Java 数据库连接(JDBC)客户端(如应用服务器)与数据库建立连接。应用程序在 Java 命名和目录接口(JNDI)树或本地应用程序上下文中查找数据源,并请求数据库连接来检索数据。您必须为 KIE 服务器配置数据源,以确保在服务器和指定数据库之间进行正确的数据交换。
通常,使用 Red Hat Process Automation Manager 的解决方案在单个事务中管理多个资源。用于异步作业、事件和计时器的 JMS,例如:在确保数据原子性和一致性结果时,Red Hat Process Automation Manager 需要数据源中的 XA 驱动程序。如果监听器内存在针对不同架构的事务代码,或者从 jBPM 引擎提供的 hook 派生出来,则还需要一个 XA 驱动程序。
不要使用非 XA 数据源,除非您正面没有参与单一事务的多个资源。
对于生产环境,请指定实际的数据源。不要在生产环境中使用示例数据源。
先决条件
- Red Hat Process Automation Manager 安装在 Red Hat JBoss Web Server 上。
-
Red Hat Process Automation Manager 7.13.5 Maven Repository (
rhpam-7.13.5-maven-repository.zip
)和 Red Hat Process Automation Manager 7.13.x Add-Ons (rhpam-7.13.5-add-ons.zip
)文件已下载,如 第 34 章 下载 Red Hat Process Automation Manager 安装文件 所述。 您需要配置以下支持的数据库和休眠方法之一:
-
DB2:
org.hibernate.dialect.DB2Dialect
-
MSSQL:
org.hibernate.SQLServer 2012Dialect
-
MySQL:
org.hibernate.dialect.MySQL5InnoDBDialect
-
MariaDB:
org.hibernate.dialect.MySQL5InnoDBDialect
-
Oracle:
org.hibernate.dialect.Oracle10gDialect
-
PostgreSQL:
org.hibernate.dialect.PostgreSQL82Dialect
-
PostgreSQL 加上:
org.hibernate.dialect.PostgresPlusPlusDialect
-
Sybase:
org.hibernate.dialect.SybaseASE157Dialect
-
DB2:
流程
完成以下步骤以准备数据库:
-
在临时目录中提取
rhpam-7.13.5-add-ons.zip
,如TEMP_DIR
。 -
提取
TEMP_DIR/rhpam-7.13.5-migration-tool.zip
。 -
将您的当前目录更改为
TEMP_DIR/rhpam-7.13.5-migration-tool/ddl-scripts
目录。此目录包含多种数据库类型的 DDL 脚本。 将您的数据库类型的 DDL 脚本导入到您要使用的数据库中,例如:
psql jbpm < /ddl-scripts/postgresql/postgresql-jbpm-schema.sql
注意如果您与 Spring Boot 结合使用 PostgreSQL 或 Oracle,则必须导入对应的 Spring Boot DDL 脚本,如
/ddl-scripts/oracle/oracle-springboot-jbpm-schema.sql
或/ddl-scripts/postgresql/postgresql-springboot-jbpm-schema.sql
。
-
在临时目录中提取
-
提取
rhpam-7.13.5-maven-repository.zip
离线 Maven 存储库文件。 将以下库从提取的 Maven 存储库复制到
JWS_HOME/tomcat/lib
文件夹,其中VERSION
是该库的版本:org/jboss/spec/javax/transaction/jboss-transaction-api_1.2_spec/{VERSION}/jboss-transaction-api_1.2_spec-{VERSION}.jar org/jboss/integration/narayana-tomcat/{VERSION}/narayana-tomcat-{VERSION}.jar org/jboss/narayana/jta/narayana-jta/{VERSION}/narayana-jta-{VERSION}.jar org/jboss/jboss-transaction-spi/{VERSION}/jboss-transaction-spi-{VERSION}.jar
-
将数据库 JDBC 驱动程序复制到
JWS_HOME/tomcat/lib
文件夹。 在
JWS_HOME/tomcat/conf/context.xml
文件中配置 pooling XA 数据源:注意以下示例中的一些属性可能不适用于您的数据库服务器。检查 JDBC 驱动程序的文档,以确定要设置哪些属性。
在没有池功能的情况下配置 XA 数据源。此 XA 数据源用于创建与目标数据库的新连接。在以下示例中,IXA 数据源是
xads
,变量在 表 36.1 “XA 数据源变量” 中定义:<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource auth="Container" databaseName="${datasource.dbName}" description="XA Data Source" factory="org.apache.tomcat.jdbc.naming.GenericNamingResourcesFactory" loginTimeout="0" name="xads" uniqueName="xads" portNumber="${datasource.port}" serverName="${datasource.hostname}" testOnBorrow="false" type="${datasource.class}" url="${datasource.url}" URL="${datasource.url}" user="${datasource.username}" password="${datasource.password}" driverType="4" schema="${datasource.schema}" /> </Context>
表 36.1. XA 数据源变量 变量 描述 <datasource.dbName>
数据库的名称。
<datasource.port>
数据库的端口号。
<datasource.hostname>
数据库主机的名称。
<datasource.class>
JDBC 驱动程序的
XADataSource
类。<datasource.url>
JDBC 数据库连接 URL。对于某些数据库,URL 属性是
url
,其他数据库(如 H2 数据库)是URL
。<datasource.username>
数据库连接的用户名。
<datasource.password>
数据库连接的密码。
<datasource.schema>
数据库架构。
配置一个池数据源,它依赖于 XA 数据源创建新连接。在本例中,数据源是
poolingXaDs
,<datasource.username
> 是数据库连接的用户名,<datasource.password
> 是数据库连接的密码:<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="poolingXaDs" uniqueName="poolingXaDs" auth="Container" description="Pooling XA Data Source" factory="org.jboss.narayana.tomcat.jta.TransactionalDataSourceFactory" testOnBorrow="true" transactionManager="TransactionManager" transactionSynchronizationRegistry="TransactionSynchronizationRegistry" type="javax.sql.XADataSource" username="${datasource.username}" password="${datasource.password}" xaDataSource="xads" /> </Context>
现在,数据源位于
java:comp/env/pool/poolingXaDs
JNDI 名称下,并通过org.kie.server.persistence.ds
系统属性传递给 KIE 服务器,如后续步骤中所述。注意池数据源配置依赖于之前在
kie-server
应用中的context.xml
文件中配置的额外资源,特别是TransactionManager
和TransactionSynchronizationRegistry
。
配置 KIE 服务器以使用数据源:
在文本编辑器中打开以下脚本之一:
注意setenv.sh
或setenv.bat
脚本应已存在。但是,如果没有,请创建它。对于 Linux 或 Unix:
JWS_HOME/tomcat/bin/setenv.sh
对于 Windows:
JWS_HOME/tomcat/bin/setenv.bat
在
CATALINA_OPS
中添加以下属性,其中 <hibernate.dialect&
gt; 是您数据库的 Hibernate 断处:CATALINA_OPTS="-Xmx1024m -Dorg.jboss.logging.provider=jdk -Dorg.kie.server.persistence.ds=java:comp/env/poolingXaDs -Dorg.kie.server.persistence.tm=JBossTS -Dorg.kie.server.persistence.dialect=${<hibernate.dialect>}"