第5章 ファット JAR としての仮想データベースの作成
Teiid Springboot スターターを使用して、仮想化ファイルを Fat JAR として作成できます。JAR を Maven リポジトリーに公開し、YAML ベースのカスタムリソースを使用して仮想データベースを OpenShift にデプロイできます。Teiid Spring Boot スターターに関する詳細は、https://github.com/teiid/teiid-spring-boot を参照してください。
Spring Boot Maven プラグインは、単一の JAR ファイルにすべてのアプリケーションコードおよび依存関係が含まれる自己完結型 Uber JAR または fat JAR を作成します。
プロジェクトのリソースファイル(DDL ファイルや application.properties
など)で仮想データベースを定義し、pom.xml
ファイルで仮想データベースを Spring Boot Java 実行可能ファイルとしてビルドするために必要な依存関係を指定します。ビルドを実行すると、Maven は pom.xml
ファイルを読み込み、そのコンテンツを解決して、外部リソースをビルドに組み込みます。
プロジェクトをビルドすると、仮想データベースを Spring Boot Java 実行可能ファイルとして作成します。作成された実行ファイルをローカルでテストできます。
ローカルテストが完了したら、JAR ファイルを Maven リポジトリーにデプロイできます。FAT JAR を Maven リポジトリーで利用可能になると、仮想データベースを OpenShift にデプロイするのと同様に YAML ベースのカスタムリソースを使用できます。
- ファット JAR として仮想データベースを作成する利点
- 仮想データベースと設定を表す DDL コード間のクリーン分離を確立します。
- OpenShift 外の仮想化のローカルテストを提供します。当然ながら、OpenShift 環境に依存する他の機能、キャッシュ、認証、およびその他の機能はローカルでは機能しません。
- プロジェクトの一部としてユーザー定義の関数(UDF)、カスタム翻訳者などの拡張機能をサポートするため、自動的にランタイム仮想データベースに組み込まれます。
- 複数の環境へのデプロイメントに適しています。
- バージョン管理は、プロジェクト全体のレベルで実行されます。
- ファット JAR として仮想データベースを作成する際の欠点
- Java、Maven、Teiid Spring Boot スターター、Spring、および Teiid に関する作業知識が必要です。
前提条件
- Java 開発、Maven、Teiid Spring Boot スターター、Spring、および Teiid に関する作業知識がある。
- Maven 3.2 以降がインストールされている。
- JDK 11(Java Platform、Standard Edition 11 Development Kit)以降がインストールされている。
- 互換性のあるデータソースがあり、OpenShift クラスターがアクセスできる。
-
仮想データベースを構築するために必要な依存関係を指定する
pom.xml
ファイルがある。 - データソースのドライバーが公開 Maven リポジトリーから利用できない場合は、ドライバーをダウンロードし、ローカルの Maven リポジトリーにデプロイしています。
- Data Virtualization Operator は、仮想データベースのビルド依存関係が含まれる Maven リポジトリーにアクセスできます。
- 作成する仮想データベースの DDL ファイルがあるか、SQL コードを作成し、DDL ファイルを作成する方法を把握している。
手順
- 仮想データベースの以下のディレクトリー構造で Java Maven プロジェクトを作成します。
dv-customer-fatjar/ ├── pom.xml └── src └── main ├── java │ └── io │ └── integration │ ├── Application.java │ └── DataSources.java └── resources ├── application.properties └── vdb.ddl
-
pom.xml
で、仮想データベースの構築に必要なリポジトリーの場所、ドライバー、およびユーザーの認証情報を定義します。 -
仮想データベースプロジェクトのアプリケーションライブラリーで、Java アプリケーションファイル
Application.java
を作成します。 -
同じディレクトリーに、
Datasourcess.java
クラスファイルを追加し、仮想データベースが接続する各データソースに bean メソッドを追加します。postgreSQL データベースと連携するように設計されたDatasources.java
ファイルの例は、「Datasources.java ファイルのサンプル」 を参照してください。 -
/src/main/resources
に、application.properties
ファイルとデータソースの接続プロパティーを追加します。詳細は、「アプリケーションプロパティーの指定」 を参照してください。 /resources/vdb.ddl
で DDL ステートメントを追加して、ビューを含む仮想データベースの構造を指定します。たとえば、vdb.ddl
です。以下の例は、postgreSQL データソースを使用する仮想データベースの DDL ファイルのサンプルを示しています。
例: vdb.ddl
CREATE DATABASE customer OPTIONS (ANNOTATION 'Customer VDB'); USE DATABASE customer; CREATE FOREIGN DATA WRAPPER postgresql; CREATE SERVER sampledb TYPE 'NONE' FOREIGN DATA WRAPPER postgresql; CREATE SCHEMA accounts SERVER sampledb; CREATE VIRTUAL SCHEMA portfolio; SET SCHEMA accounts; IMPORT FOREIGN SCHEMA public FROM SERVER sampledb INTO accounts OPTIONS("importer.useFullSchemaName" 'false'); SET SCHEMA portfolio; CREATE VIEW CustomerZip(id bigint PRIMARY KEY, name string, ssn string, zip string) AS SELECT c.ID as id, c.NAME as name, c.SSN as ssn, a.ZIP as zip FROM accounts.CUSTOMER c LEFT OUTER JOIN accounts.ADDRESS a ON c.ID = a.CUSTOMER_ID;
DDL を使用して仮想データベースを定義する方法の詳細は、『Data Virtualization リファレンスガイド』の「 DDL metadata for schema objects 」を参照してください。仮想データベースの完全な DDL を定義する方法については、本書の対象外となります。
仮想データベースアーティファクトをビルドします。端末を開き、以下のコマンドを入力します。
mvn clean install
このコマンドは、ターゲットリポジトリーに
${project.name}-$2020.Q1.vdb
ファイルを生成します。以下のコマンドを入力して、アーティファクトをリモートリポジトリーにデプロイします。
mvn clean install deploy
Maven リポジトリーで仮想データベースアーティファクトが利用可能になった後に、YAML ベースのカスタムリソースを使用して仮想データベースを OpenShift にデプロイできます。
5.1. Datasources.java ファイルのサンプル
Datasources.java
ファイルは、データソースへの接続を表すクラスを追加します。このファイルは、ConfigurationProperties
引数(spring.datasource.sampledb
)にプレフィックスも確立します。この接頭辞は、application.properties
ファイルに指定するデータソースプロパティーの名前で使用する必要があります。
Datasources.java
で複数のデータソースを定義するには、それぞれが独自のプレフィックス指定を持つ複数のクラスを追加します。それぞれの場合も、対応するエントリーを DDL ファイルおよび CR ファイルの データソース
プロパティーに追加する必要があります。
Java Bean を DDL ファイルに定義されたデータソースに関連付けるには、Bean 名は DDL ファイルの SERVER
および resource-name
プロパティーの名前と同じである必要があります。たとえば、以下のサンプルファイルは sampledb
という名前の PostgreSQL データベースへの接続を確立します。これは、DDL ファイルでデータソースの SERVER
オブジェクトおよびその resource-name
定義に割り当てられる名前です。
package com.example; import javax.sql.DataSource; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class DataSources { @ConfigurationProperties(prefix = "spring.datasource.sampledb") 1 @Bean public DataSource sampledb() { 2 return DataSourceBuilder.create().build(); } }