3.3. ビルド拡張およびプロジェクトアーティファクト
JBoss EAP for OpenShift イメージは、さまざまなアーティファクトを使用して OpenShift のデータベースサポートを拡張します。これらのアーティファクトは異なるメカニズムを介してビルドイメージに含まれます。
- S2I プロセスの間にイメージにインジェクトされる S2I アーティファクト。
- OpenShift シークレットメカニズムを介して提供される環境ファイルからの ランタイムアーティファクト。
Red Hat が提供する内部データソースドライバーを JBoss EAP for OpenShift イメージと使用する場合のサポートは、JDK 8 イメージストリームでは非推奨になりました。データベースベンダーから取得した JDBC ドライバーを JBoss EAP アプリケーションに使用することが推奨されます。
以下の内部データソースは、JBoss EAP for OpenShift の JDK 11 イメージでは提供されないようになりました。
- MySQL
- PostgreSQL
ドライバーのインストールに関する詳細は、「モジュール、ドライバー、および汎用デプロイメント」を参照してください。
JBoss EAP で JDBC ドライバーを設定するための詳細は、『設定ガイド』の「JDBC ドライバー」を参照してください。
3.3.1. S2I アーティファクト
S2I アーティファクトには、モジュール、ドライバー、およびデプロイメントに必要な設定インフラストラクチャーを提供する追加の汎用デプロイメントが含まれます。この設定は S2I プロセスの間にイメージに組み込まれるため、データソースと関連するリソースアダプターのみをランタイムに設定する必要があります。
S2I プロセスを指示してカスタム Maven アーティファクトリポジトリーミラーを利用する方法の追加情報は「アーティファクトリポジトリーミラー」を参照してください。
3.3.1.1. モジュール、ドライバー、および汎用デプロイメント
JBoss EAP for OpenShift イメージにこれらの S2I アーティファクトが含まれるようにする方法はいくつかあります。
- アプリケーションソースデプロイメントディレクトリーにアーティファクトが含まれるようにします。アーティファクトはビルド中にダウンロードされ、イメージにインジェクトされます。これは、JBoss EAP for OpenShift イメージでアプリケーションをデプロイするのと似ています。
CUSTOM_INSTALL_DIRECTORIES
環境変数が含まれるようにします。これは、S2I プロセス中にイメージのアーティファクトのインストールおよび設定に使用されるディレクトリーのコンマ区切りリストです。S2I プロセスにこの情報が含まれるようにする方法は 2 つあります。指定されたインストールディレクトリーの
install.sh
スクリプト。インストールスクリプトは S2I プロセス中に実行され、問題なく動作します。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『設定ガイド』の「データソース設定の例」を参照してください。module.xml
ファイルの例<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="org.apache.derby"> <resources> <resource-root path="derby-10.12.1.1.jar"/> <resource-root path="derbyclient-10.12.1.1.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
PostgreSQL データソースの
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 データソースの
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
関数は、module.xml
とともに該当の JAR ファイルを JBoss EAP の modules ディレクトリーにコピーします。ドライバー
ドライバーはモジュールとしてインストールされます。ドライバーは
configure_drivers
関数によってinstall.sh
に設定されます。 この設定プロパティーは ランタイムアーティファクト 環境ファイルに定義されます。drivers.env
ファイルの例#DRIVER DRIVERS=DERBY DERBY_DRIVER_NAME=derby DERBY_DRIVER_MODULE=org.apache.derby DERBY_DRIVER_CLASS=org.apache.derby.jdbc.EmbeddedDriver DERBY_XA_DATASOURCE_CLASS=org.apache.derby.jdbc.EmbeddedXADataSource
内部データソースドライバーの追加
MySQL および PostgreSQL データソースは、事前に設定された内部データソースとして提供されなくなりました。ただし、これらのドライバーは、「モジュール、ドライバー、および汎用デプロイメント」で説明されているように、モジュールとしてインストールすることができます。
メカニズムは
Derby
ドライバーの例にならい、S2I アーティファクトを使用します。インストールする各データソースのdrivers.env
ファイルを作成します。MySQL データソースの
drivers.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.jdbc.jdbc2.optional.MysqlXADataSource
PostgreSQL データソースの
drivers.env
ファイルの例#DRIVER DRIVERS=POSTGRES POSTGRES_DRIVER_NAME=postgres POSTGRES_DRIVER_MODULE=org.postgresql POSTGRES_DRIVER_CLASS=org.postgresql.Driver POSTGRES_XA_DATASOURCE_CLASS=org.postgresql.xa.PGXADataSource
MySQL や PostgreSQL など、さまざまなドライバーのダウンロード場所に関する情報は、『設定ガイド』の「 JDBC ドライバーのダウンロード場所 」を参照してください。
-
汎用デプロイメント
JAR、WAR、RAR、EAR などのデプロイ可能なアーカイブファイルは、install-common.sh
の API によって提供される install_deployments
を使用して、インジェクトされたイメージからデプロイすることができます。
CUSTOM_INSTALL_DIRECTORIES
環境変数が宣言されていても、カスタムインストールディレクトリーにinstall.sh
スクリプトがない場合、以下のアーティファクトディレクトリーがビルドイメージの該当する場所にコピーされます。-
modules/*
は$JBOSS_HOME/modules/system/layers/openshift
にコピーされます。 -
configuration/*
は$JBOSS_HOME/standalone/configuration
にコピーされます。 -
deployments/*
は$JBOSS_HOME/standalone/deployments
にコピーされます。
これは
install.sh
の代替方法と比べ基本的な設定方法となります。 アーティファクトが適切に構築される必要があります。-
3.3.2. ランタイムアーティファクト
3.3.2.1. データソース
データソースの種類は 3 つあります。
- デフォルトの内部データソース。これらは PostgreSQL、MySQL、および MongoDB になります。これらのデータソースは、Red Hat レジストリー介して OpenShift ではデフォルトで利用でき、JDK 8 イメージストリームに追加の環境ファイルを設定する必要がありません。DB_SERVICE_PREFIX_MAPPING 環境変数を、検出してデータソースとして使用する OpenShift サービスの名前に設定します。
- その他の内部データソース。これらは、Red Hat レジストリーを介してデフォルトでは利用できない、OpenShift 上で実行されるデータソースです。これらのデータソースの設定は、OpenShift のシークレットに追加された環境ファイルによって提供されます。
- OpenShift 上では実行されない外部データソース。外部データソースの設定は、OpenShift のシークレットに追加された環境ファイルによって提供されます。
例: データソース環境ファイル
# derby datasource ACCOUNTS_DERBY_DATABASE=accounts ACCOUNTS_DERBY_JNDI=java:/accounts-ds ACCOUNTS_DERBY_DRIVER=derby ACCOUNTS_DERBY_USERNAME=derby ACCOUNTS_DERBY_PASSWORD=derby ACCOUNTS_DERBY_TX_ISOLATION=TRANSACTION_READ_UNCOMMITTED ACCOUNTS_DERBY_JTA=true # Connection info for xa datasource ACCOUNTS_DERBY_XA_CONNECTION_PROPERTY_DatabaseName=/home/jboss/source/data/databases/derby/accounts # _HOST and _PORT are required, but not used ACCOUNTS_DERBY_SERVICE_HOST=dummy ACCOUNTS_DERBY_SERVICE_PORT=1527
DATASOURCES
プロパティーは、データソースプロパティー接頭辞のコンマ区切りリストです。これらの接頭辞は、データソースのすべてのプロパティーに追加されます。複数のデータソースを 1 つの環境ファイルに含むことができます。また、各データソースを個別の環境ファイルに提供することもできます。
データソースには、接続プール固有のプロパティーとデータベースドライバー固有のプロパティーの 2 種類のプロパティーが含まれます。データベースドライバー固有のプロパティーは、ドライバー自体がドライバー S2I アーティファクトとして設定されるため、汎用の XA_CONNECTION_PROPERTY
を使用します。ドライバープロパティーの接尾辞は、データソースの特定のドライバーに固有します。
上記の例では、ACCOUNTS
はデータソース接頭辞、XA_CONNECTION_PROPERTY
は汎用ドライバープロパティー、DatabaseName
はドライバー固有のプロパティーになります。
データソース環境ファイルは、プロジェクトの OpenShift シークレットに追加されます。これらの環境ファイルは、ENV_FILES
環境プロパティーを使用して、テンプレート内で呼び出されます。 この環境プロパティーの値は、以下のような完全修飾環境ファイルのコンマ区切りリストです。
{ “Name”: “ENV_FILES”, “Value”: “/etc/extensions/datasources1.env,/etc/extensions/datasources2.env” }
3.3.2.2. リソースアダプター
リソースアダプターの設定は、OpenShift のシークレットに追加された環境ファイルによって提供されます。
表3.1 リソースアダプタープロパティー
属性 | 説明 |
---|---|
PREFIX_ID | サーバー設定ファイルに指定されたリソースアダプターの識別子。 |
PREFIX_ARCHIVE | リソースアダプターアーカイブ。 |
PREFIX_MODULE_SLOT |
|
PREFIX_MODULE_ID | オブジェクトファクトリー Java クラスをロードできる JBoss モジュール ID。 |
PREFIX_CONNECTION_CLASS | 管理された接続ファクトリーまたは管理オブジェクトの完全修飾クラス名。 |
PREFIX_CONNECTION_JNDI | 接続ファクトリーの JNDI 名。 |
PREFIX_PROPERTY_ParentDirectory | データファイルが格納されるディレクトリー。 |
PREFIX_PROPERTY_AllowParentPaths |
|
PREFIX_POOL_MAX_SIZE | プールの最大接続数。各サブプールではこの値を超える接続は作成されません。 |
PREFIX_POOL_MIN_SIZE | プールの最小接続数。 |
PREFIX_POOL_PREFILL | プールをプレフィルすべきかどうかを指定します。値の変更後にサーバーを再起動する必要があります。 |
PREFIX_POOL_FLUSH_STRATEGY |
エラーの場合にプールがどのようにフラッシュされるか。有効な値は |
RESOURCE_ADAPTERS
プロパティーは、リソースアダプタープロパティー接頭辞のコンマ区切りリストです。接頭辞はそのリソースアダプターのすべてのプロパティーに追加されます。複数のリソースアダプターを 1 つの環境ファイルに含めることができます。以下の例では、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
リソースアダプター環境ファイルは、プロジェクト namespace の OpenShift シークレットに追加されます。これらの環境ファイルは、ENV_FILES
環境プロパティーを使用して、テンプレート内で呼び出されます。 この環境プロパティーの値は、以下のような完全修飾環境ファイルのコンマ区切りリストです。
{ "Name": "ENV_FILES", "Value": "/etc/extensions/resourceadapter1.env,/etc/extensions/resourceadapter2.env" }