テナント環境セットアップ時にテーブルが作成されるよう設定する

e Builderを利用して作成したアプリケーションにおいて、テナント環境セットアップ時に自動でテーブルが作成されるように設定する手順を紹介します。

今回は例として、CookBook:フォームに入力した内容をデータベースに登録するで利用するテーブルをテナント環境セットアップ時に作成するように設定します。

完成イメージ

本稿の内容を設定したユーザモジュールをwarファイルに含めてデプロイしてください。
その後テナント環境セットアップを行った時に以下のテーブルがテナントデータベースに作成されます。

テーブル名:cb109004
カラム名 データ型 備考
item_cd VARCHAR 20 主キー
item_name VARCHAR 100
item_price NUMERIC 15
comment VARCHAR 200

完成サンプル

以下の完成サンプルをダウンロードしてご活用ください。
e builder プロジェクト : im_cookbook_109004.zip
imm ファイル : im_cookbook_109004-1.0.0.imm

レシピ

  1. セットアップ設定ファイルを作成します。
  2. 実行するDDLファイルを作成します。

1. セットアップ設定ファイルを作成します。

(1) はじめにe Builder のモジュールプロジェクト内に「セットアップ設定ファイル」を作成してください。
セットアップ設定ファイルを作成することで、テナント環境セットアップ時にデータベースのテーブル作成処理を組み込むことができます。
セットアップ設定ファイルには定義ルールがあります。必ず以下の配置ディレクトリ、ファイル名で作成してください。
定義ルールに則っていない場合テナント環境セットアップの対象となりません。この場合、実行時例外は発生しません。注意してください。

定義ルール
配置ディレクトリ `src/main/conf/products/import/basic/{アーティファクトID}/`
ファイル名 `import-{アーティファクトID}-config-1.xml`

モジュールプロジェクトのルートディレクトリに配置されているmodule.xmlのidタグにおいて、アーティファクトIDは以下のように定義されています。

<id>${group_id}.${artifact_id}</id>

この${artifact_id}がセットアップ設定ファイルの配置ディレクトリやファイル名に使用するアーティファクトIDです。

ファイル名に追加されているサフィックス “1” は、各モジュールにおけるテナント環境セットアップのバージョン管理のための番号(スキーマバージョン)です。初回では、必ず “1” を指定してください。
スキーマバージョンの詳細はSchemaUpdateをご参照ください。

今回配布しているサンプルでは module.xmlのidタグは以下のように設定されています。

<id>jp.co.intra_mart.im_cookbook_109004</id>

アーティファクトIDはim_cookbook_109004となっているので、セットアップ設定ファイルは src/main/conf/products/import/basic/im_cookbook_109004/import-im_cookbook_109004-config-1.xml で作成してください。

(2) セットアップ設定ファイルの内容を記述してください。
セットアップ設定ファイルはXMLで記述してください。その基本構造は以下の通りです。

<?xml version="1.0" encoding="UTF-8"?>
<import-data-config
  xmlns="http://intra_mart.co.jp/system/service/provider/importer/config/import-data-config"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://intra_mart.co.jp/system/service/provider/importer/config/import-data-config import-data-config.xsd ">

    <!-- データベース系 ※不要な場合、削除してください。 -->
    <database>
       : (省略)
    </database>

    <!-- テナントマスタ系 ※不要な場合、削除してください。 -->
    <tenant-master>
       : (省略)
    </tenant-master>

    <!-- 拡張処理 ※不要な場合、削除してください。 -->
    <extends-import>
       : (省略)
    </extends-import>

</import-data-config>

セットアップ設定ファイルのフォーマットはWebアーカイブディレクトリ内の下記のxsdファイルで定義されています。

  • WEB-INF/schema/import-data-config.xsd

今回はデータベースのテーブル作成のみを行うので、セットアップ設定ファイルの内容は以下の通り記述してください。

<?xml version="1.0" encoding="UTF-8"?>
<import-data-config
  xmlns="http://intra_mart.co.jp/system/service/provider/importer/config/import-data-config"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://intra_mart.co.jp/system/service/provider/importer/config/import-data-config import-data-config.xsd ">

    <database>
       <create-file>products/import/basic/im_cookbook_109004/im_cookbook_109004-ddl.sql</create-file>
    </database>

</import-data-config>

テナント環境セットアップ時にテーブル作成のDDLを実行するように設定する場合、create-fileタグでセットアップ時に実行したいDDLファイルのシステムストレージからの相対パスを指定してください。
DDLファイルの拡張子は.sqlです。

セットアップ設定ファイルの詳細はintra-mart Accel Platform ユーザモジュール開発ガイド-テナント環境セットアップの組み込みをご参照ください。

2. 実行するDDLファイルを作成してください。

(1) 上記のセットアップ設定ファイルで指定したパス上に、DDLファイルを作成してください。

intra-mart Accel Platform がサポートしているデータベース毎に、DDLファイルおよびDMLファイルを切り換えることができます。
例えば、セットアップ設定ファイルのDDLファイル名に my_project-ddl.sql というファイルを指定している場合、Oracle 専用のDDL文を実行したい場合は my_project-ddl_oracle.sql というファイルを作成してください。
このようにするとテナントデータベースが Oracle の場合 my_project-ddl_oracle.sql が実行されます。
各データベースのサフィックスは以下のようになっています。

データベース サフィックス
DB2 db2
Oracle oracle
Postgre SQL postgre
SQL Server sqlserver

今回はPostgreSQL専用のDDLファイルのみ作成します。
このDDLファイルのディレクトリパスやファイル名はセットアップ設定ファイルで指定したパスにPostgreSQLのサフィックスを加えた src/main/storage/system/products/import/basic/im_cookbook_109004/im_cookbook_109004-ddl_postgre.sql で作成してください。

(2) DDLファイルの内容を記述してください。
冒頭の完成イメージの通り、以下のようなテーブルを作成するSQLを記述してください。

テーブル名:cb109004
カラム名 データ型 備考
item_cd VARCHAR 20 主キー
item_name VARCHAR 100
item_price NUMERIC 15
comment VARCHAR 200

この場合はim_cookbook_109004-ddl_postgre.sqlに以下の通り記述してください。

CREATE TABLE cb109004 (
  item_cd VARCHAR(20) NOT NULL,
  item_name VARCHAR(100),
  item_price NUMERIC(15),
  comment VARCHAR(200),
  PRIMARY KEY (item_cd)
)

以上を設定することで、テナント環境セットアップ時にテーブルの作成が自動的に実行されます。