サンプルデータセットアップ¶
サンプルデータセットアップの仕様は、テナント環境セットアップの仕様と似通っています。説明の中で使用する用語などについても同様ですので、この章を読み進める前にテナント環境セットアップ を一読されることを推奨します。
項目
サンプルデータセットアップ とは¶
デプロイされた各モジュールを試用するためのサンプルデータを投入する処理です。
試用環境を構築する際に実行するセットアップで、本番環境では実施する必要はありません。
モジュールの開発者は、開発しているモジュールを動作させるためのサンプルデータを利用者に提供する場合、 サンプルデータセットアップを実行するための資材を用意する必要があります。
サンプルデータセットアップ 仕様¶
サンプルデータセットアップ で実行可能な処理¶
サンプルデータセットアップで実行できる処理は、次の通りです。
- 前処理プログラムの実行
- テナントデータベースに対するDDLの発行
- テナントデータベースに対するDMLの発行
- テナントマスタ情報のインポート
- 拡張インポートの実行
サンプルデータセットアップ 実行準備¶
セットアップ設定ファイル の作成と配置¶
サンプルデータセットアップを実行するモジュールは、セットアップ設定ファイルを用意する必要があります。
例:モジュールID=”jp.co.intra_mart.im_tenant”の場合、次のようなxmlファイルを用意してください。
WEB-INF/conf/products/import/sample/import-im_tenant-config.xmlセットアップ設定ファイルの配置先、および命名の規則について説明します。
セットアップ設定ファイルの配置先ディレクトリ規則は次のとおりです。
WEB-INF/conf/products/import/sample
セットアップ設定ファイルの命名規則は次のとおりです。
import-%ショートモジュールID%-config.xml
コラム
サンプルデータセットアップのセットアップ設定ファイルには、スキーマバージョンによるバージョニング管理は適用しません。
モジュールが定義するサンプルデータは、そのモジュールの最新バージョンに合わせて常に最新状態となるよう管理してください。
コラム
サンプルデータセットアップのセットアップ設定ファイルの配置先ディレクトリには、 テナント環境セットアップの場合とは異なり、ショートモジュールIDディレクトリを設けません。サンプルデータセットアップは SchemaUpdate によるセットアップ適用状況の管理の対象外のため、特定のモジュールにおけるセットアップ設定ファイルは最大でもひとつしか作成されません。そのため、モジュールIDディレクトリを用意して分類する必要がありません。
セットアップ設定ファイルには、次の定義を記述します。(テナント環境セットアップと同じ構成です。)
- 発行するDDLを定義したインポートDDLパス
- 発行するDMLを定義したインポートDMLパス
- インポートするテナントマスタ情報のインポートXMLパス
- 実行する拡張インポートのパス
セットアップ設定ファイルの記述例を示します。
セットアップ設定ファイルの記述例を示します。下記では、セットアップ設定ファイルで定義可能なすべての情報を盛り込んでいます。<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> <!-- インポートDDL ※複数定義が可能です。 [0..*] --> <!-- SystemStorageからの相対パスを指定します。 --> <create-file>products/import/sample/module_id/ddl.sql</create-file> <!-- インポートDML ※複数定義が可能です。 [0..*] --> <!-- SystemStorageからの相対パスを指定します。 --> <!-- 基本情報と国際化情報を分割して定義します。 --> <insert-file>products/import/sample/module_id/dml.sql</insert-file> <insert-file>products/import/sample/module_id/dml_ja.sql</insert-file> <insert-file>products/import/sample/module_id/dml_en.sql</insert-file> <insert-file>products/import/sample/module_id/dml_zh_CN.sql</insert-file> </database> <!-- テナントマスタ系 ※不要な場合、削除してください。 --> <tenant-master> <!-- 各ファイルパスには、SystemStorageからの相対パスを指定します。 --> <!-- ロール ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <role-file>products/import/sample/module_id/role.xml</role-file> <role-file>products/import/sample/module_id/role_ja.xml</role-file> <role-file>products/import/sample/module_id/role_en.xml</role-file> <role-file>products/import/sample/module_id/role_zh_CN.xml</role-file> <!-- アカウント ※複数定義が可能です。 [0..*] --> <!-- 基本情報のみ定義します。(アカウントには国際化情報がないためです。) --> <account-file>products/import/sample/module_id/account.xml</account-file> <!-- カレンダー --> <!-- カレンダー:カレンダー ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <calendar-file>products/import/sample/module_id/calendar.xml</calendar-file> <calendar-file>products/import/sample/module_id/calendar_ja.xml</calendar-file> <calendar-file>products/import/sample/module_id/calendar_en.xml</calendar-file> <calendar-file>products/import/sample/module_id/calendar_zh_CN.xml</calendar-file> <!-- カレンダー:日付情報セット ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <calendar-day-set-file>products/import/sample/module_id/calendar-day-set.xml</calendar-day-set-file> <calendar-day-set-file>products/import/sample/module_id/calendar-day-set_ja.xml</calendar-day-set-file> <calendar-day-set-file>products/import/sample/module_id/calendar-day-set_en.xml</calendar-day-set-file> <calendar-day-set-file>products/import/sample/module_id/calendar-day-set_zh_CN.xml</calendar-day-set-file> <!-- カレンダー:日付情報 ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <calendar-day-file>products/import/sample/module_id/calendar-day.xml</calendar-day-file> <calendar-day-file>products/import/sample/module_id/calendar-day_ja.xml</calendar-day-file> <calendar-day-file>products/import/sample/module_id/calendar-day_en.xml</calendar-day-file> <calendar-day-file>products/import/sample/module_id/calendar-day_zh_CN.xml</calendar-day-file> <!-- カレンダー:カレンダーマージ ※複数定義が可能です。 [0..*] --> <!-- 基本情報のみ定義します。(カレンダー:カレンダーマージには国際化情報がないためです。) --> <calendar-merge-file>products/import/sample/module_id/calendar-merge.xml</calendar-merge-file> <!-- メニュー --> <!-- メニュー:メニューカテゴリ ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <menu-group-category-file>products/import/sample/module_id/menu-group-category.xml</menu-group-category-file> <menu-group-category-file>products/import/sample/module_id/menu-group-category_ja.xml</menu-group-category-file> <menu-group-category-file>products/import/sample/module_id/menu-group-category_en.xml</menu-group-category-file> <menu-group-category-file>products/import/sample/module_id/menu-group-category_zh_CN.xml</menu-group-category-file> <!-- メニュー:メニューグループ ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <menu-group-file>products/import/sample/module_id/menu-group.xml</menu-group-file> <menu-group-file>products/import/sample/module_id/menu-group_ja.xml</menu-group-file> <menu-group-file>products/import/sample/module_id/menu-group_en.xml</menu-group-file> <menu-group-file>products/import/sample/module_id/menu-group_zh_CN.xml</menu-group-file> <!-- 認可 --> <!-- 認可:リソースグループ ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <authz-resource-group-file>products/import/sample/module_id/authz-resource-group.xml</authz-resource-group-file> <authz-resource-group-file>products/import/sample/module_id/authz-resource-group_ja.xml</authz-resource-group-file> <authz-resource-group-file>products/import/sample/module_id/authz-resource-group_en.xml</authz-resource-group-file> <authz-resource-group-file>products/import/sample/module_id/authz-resource-group_zh_CN.xml</authz-resource-group-file> <!-- 認可:リソース ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <authz-resource-file>products/import/sample/module_id/authz-resource.xml</authz-resource-file> <authz-resource-file>products/import/sample/module_id/authz-resource_ja.xml</authz-resource-file> <authz-resource-file>products/import/sample/module_id/authz-resource_en.xml</authz-resource-file> <authz-resource-file>products/import/sample/module_id/authz-resource_zh_CN.xml</authz-resource-file> <!-- 認可:サブジェクトグループ ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <authz-subject-group-file>products/import/sample/module_id/authz-subject-group.xml</authz-subject-group-file> <authz-subject-group-file>products/import/sample/module_id/authz-subject-group_ja.xml</authz-subject-group-file> <authz-subject-group-file>products/import/sample/module_id/authz-subject-group_en.xml</authz-subject-group-file> <authz-subject-group-file>products/import/sample/module_id/authz-subject-group_zh_CN.xml</authz-subject-group-file> <!-- 認可:ポリシー ※複数定義が可能です。 [0..*] --> <!-- 基本情報のみ定義します。(ポリシーには国際化情報がないためです。) --> <authz-policy-file>products/import/sample/module_id/authz-policy.xml</authz-policy-file> <!-- ジョブスケジューラ ※複数定義が可能です。 [0..*] --> <!-- 基本情報と国際化情報を分割して定義します。 --> <job-scheduler-file>products/import/sample/module_id/job-scheduler.xml</job-scheduler-file> <job-scheduler-file>products/import/sample/module_id/job-scheduler_ja.xml</job-scheduler-file> <job-scheduler-file>products/import/sample/module_id/job-scheduler_en.xml</job-scheduler-file> <job-scheduler-file>products/import/sample/module_id/job-scheduler_zh_CN.xml</job-scheduler-file> </tenant-master> <!-- 拡張インポート ※不要な場合、削除してください。 --> <extends-import> <!-- Javaクラスを指定する場合 ※複数定義が可能です。 [0..*] --> <!-- jp.co.intra_mart.foundation.security.ExtendsImport を継承したJavaクラスの完全修飾クラス名を指定します。 --> <extends-import-class>jp.co.intra_mart.foo.bar.SampleExtendsImporter</extends-import-class> <!-- サーバサイドJavaScriptを指定する場合 ※複数定義が可能です。 [0..*] --> <!-- WEB-INF/jssp/platform/srcなど、サーバサイドJavaScriptのルートからの相対パスを、拡張子".js"をつけて指定します。 --> <!-- 指定したサーバサイドJavaScriptにおける doImport 関数が実行されます。 --> <!-- doImport 関数の第一引数にはテナントIDを渡します。 --> <!-- doImport 関数は処理結果を Boolean 型で返却する必要があります。 --> <extends-import-class>sample/sample_import.js</extends-import-class> </extends-import> </import-data-config>コラム
セットアップ設定ファイルで定義された情報は、定義順に(上から順に)処理されます。
「database」タグ内は必ず次の順序で定義する必要があります。
- create-file
- insert-file
「tenant-master」タグ内に定義可能なタグ群は順不同で自由に定義可能です。インポート順序によっては情報の不整合が発生する場合があるため、適宜調整してください。例
メニューリソースはメニューグループのインポートで登録されますが、この作業の実施前にメニューリソースに対する認可ポリシーをインポートしようとすると、メニューリソースが存在せずに例外が発生する可能性があります。セットアップ設定ファイルのフォーマットファイルについては フォーマットファイル(xsd) を参照してください。
前処理プログラム の作成と配置¶
セットアップ設定ファイルに記述した前処理プログラムを作成します。前処理プログラムの実装については 前処理プログラム サンプル を参照してください。作成したら、セットアップ設定ファイルで指定したパスに配置します。
セットアップ設定ファイルで前処理プログラムを記述していない場合は当作業は不要です。
前処理プログラムの配置先パッケージおよびパスについての規則は特に設けません。各モジュールにおける適当なパッケージおよびパスで定義してください。
インポートファイル の作成と配置¶
セットアップ設定ファイルに記述したインポートファイルを作成します。
作成したら、セットアップ設定ファイルで指定したパスに配置します。配置先は システムストレージ です。パブリックストレージではないので注意してください。セットアップ設定ファイルでインポートファイルを記述していない場合は当作業は不要です。
インポートファイルの配置先、および命名の規則について説明します。
インポートファイルの配置先ディレクトリ規則は次のとおりです。
<STORAGE_PATH>/system/storage/products/import/sample/%ショートモジュールID%[ /任意のディレクトリ]
コラム
ショートモジュールIDディレクトリを作成することにより、モジュール間でのインポートファイルの重複を回避します。
ショートモジュールIDディレクトリ配下のディレクトリ作成は必要に応じて実施してください。
インポートファイルの命名規則はテナント環境セットアップと同様です。
インポートDDL、インポートDMLの記法については セットアップ用SQLファイル / インポートDDL / インポートDML 記法 を参照してください。インポートXMLの記法については、各テナントマスタインポータの仕様書を参照してください。コラム
- インポートDML
- インポートXML
上記のインポートファイルは、原則として次の2種類を用意し、セットアップ設定ファイルで定義してください。
- 基本インポートファイル
- 多言語インポートファイル
詳細はテナント環境セットアップと同様です。
コラム
インポートDDLおよびインポートDMLは、システムデータベースの種類に応じた定義をすることができます。各ファイル名の末尾にデータベースサフィックスを付加することで対応します。詳細はテナント環境セットアップと同様です。
拡張インポート の作成と配置¶
セットアップ設定ファイルに記述した拡張インポートを作成します。
作成したら、セットアップ設定ファイルで指定したパスに配置します。
セットアップ設定ファイルで拡張インポートを記述していない場合は当作業は不要です。
拡張インポートの配置先パッケージおよびパスについての規則は特に設けません。各モジュールにおける適当なパッケージおよびパスで定義してください。
サンプルデータセットアップ 実行方法¶
システム管理者でログインし、サンプルデータセットアップを実行します。
サンプルデータセットアップ におけるトランザクション制御¶
サンプルデータセットアップ 実行時のトランザクション単位は次のとおりです。
前処理
トランザクション制御は行いません。トランザクション制御が必要な処理を前処理プログラムで行う場合は、独自にトランザクション制御実装を行う必要があります。
DDL
トランザクション制御は行いません。
DML(DML/テナントマスタ情報のインポート)
スキーマバージョン単位でトランザクション制御します。
拡張インポート
トランザクション制御は行いません。トランザクション制御が必要な処理を拡張インポートで行う場合は、独自にトランザクション制御実装を行う必要があります。
例外発生時の動作¶
サンプルデータセットアップの実行中に例外が発生した場合、テナント環境セットアップとは異なり、後続のセットアップ処理を継続実行します。
コラム
理由は、サンプルデータをもつモジュールが新規追加された場合、環境の再構築をせずともサンプルデータセットアップの再実行により情報を最新化する可能性を残すためです。ただこの場合は、すでにインポート済みの情報に関しては一意制約違反などの例外が多量に発生してしまう恐れがあります。また、既存モジュールのバージョンアップの場合は想定したサンプルデータが投入されない恐れもあります。そのため、開発などの限定的な用途で利用されることを想定しています。