マルチテナント

1. マルチテナントとは

単一のiPLAssインスタンス(APサーバ/DBサーバ/war)上にそれぞれが論理的に分離された複数のテナントを作成することが可能です。 エンティティのデータはテナント毎に分離されており、基本的には相互に参照ができません(別途説明する共有テナント機能により共用するエンティティとデータを定義することも可能です)。 また、テナント単位にメタデータ、カスタムロジックを個別に設定することも可能です。

テナントはテナント管理ツール(Tenant Manager)により、作成、削除が可能です。 Tenant Managerの詳細は開発・運用サポートの説明を参照ください。

2. テナントの解決方法

iPLAssにWebアクセスされた際に操作対象となるテナントは、リクエスト情報もしくは設定ファイルの設定内容を基に解決されます。 以下のロジックに従って解決されたテナント名と一致するテナントが操作対象のテナントとして扱われます。

テナント名の解決ロジック
  1. サーバーのホスト名から解決
    WebFrontendService#tenantAsDomaintrue に設定された場合、サーバーのホスト名(Hostヘッダーの値)をテナント名として扱います。
    tenantAsDomain の詳細については、 WebFrontendService を参照してください。

  2. 設定ファイルから解決
    WebFrontendService#fixedTenant に値が設定された場合、設定された値を固定かつ単一のテナント名として扱います。
    fixedTenant の詳細については、 WebFrontendService を参照してください。

  3. HTTPリクエストヘッダーから解決
    HTTPリクエストヘッダーとして ヘッダー名:X-Tenant-Name が指定された場合、X-Tenant-Name ヘッダーの値をテナント名として扱います。

  4. リクエストパスから解決
    それ以外の場合、テナント名はリクエストパスから解決されます。ServletContextPath以降の最初の1階層目の値をテナント名として扱います。
    例えば、「 http://localhost:8080/sampleApp/sampleTenant/gem 」というURLの場合、 sampleTenant をテナント名として解決します。

3. メタデータ・カスタムロジックとテナントの関係

メタデータの定義方法、またカスタムロジックの作成手段により、それが適用されるテナントの範囲が異なります。

3.1. すべてのテナントに適用されるメタデータ・カスタムロジック

以下のものはすべてのテナントに適用されます。

  • 設定ファイルにて管理されるメタデータ

  • Java/JSPで作成されたカスタムロジック

  • Java上にアノテーションで記述されたメタデータ

  • 共有テナント と定義されたテナント上で定義された共有メタデータ

3.2. テナント個別に適用されるメタデータ・カスタムロジック

以下のものは個別のテナントのみに適用されます。

  • AdminConsoleから作成・更新されたメタデータ

  • Groovy/GroovyTemplateで作成されたカスタムロジック

テナント共通に適用されたメタデータをAdminConsoleから変更することにより、 特定のテナントのみカスタム設定、ロジックを適用することが可能です。

4. テナント管理

テナント単位の設定情報はAdminConsoleから設定します。 以下にテナント単位で設定可能な項目について説明します。

4.1. パスについて

パスの種類

説明文中にiPLAssで定義するURL、パスの種類がいくつかあります。以下に説明します。

servletContextPath(サーブレットコンテキストパス)

Servlet仕様で定義されるcontextPathです。 HttpServletContext#getContextPath() メソッドで取得されるパスです。

tenantURL(テナントURL)

テナントURLはテナント単位に一意のURL文字列(パス)です。

tenantContextPath(テナントコンテキストパス)

ServletContextPath + tenantURL
で定義されます。 APサーバ上でテナントまでを特定するルート相対パスです。

staticContentPath(静的コンテンツパス)

JavaScriptファイル、CSSファイルなどの静的コンテンツを格納するルートパスです。 通常はservletContextPathと同一ですが、WebFrontendServiceの設定で変更することが可能です。

URLの指定

指定するURLには以下のルールがあります。

「/」始まりの場合

staticContentPath以降の指定とみなします。
staticContentPath + 指定パス

「http」始まりの場合

外部リソースを指定したとみなします。(指定パスをそのまま利用)

上記以外の場合

テナントコンテキストパス以降の指定とみなします。 Action経由でStreamやStaticResourceを利用する場合は、Action名を設定することでこのパターンとして動作します。
tenantContextPath + "/" + 指定パス

4.2. テナントの設定項目

基本設定

テナントに関する基本的な設定です。

項目 設定内容

テナントID

テナントのIDです。テナント作成時に決定されます。変更はできません。

テナント名

テナント名です。テナント作成時に決定されます。変更はできません。

テナントURL

テナントのURLです。テナント作成時に決定されます。変更はできません。

表示名

テナントの表示名称を設定します。

概要

テナントの概要を設定可能です。

有効開始日、有効終了日

このテナントが有効な期間を示します。 有効期間の判定は、「有効開始日≦現在日付<有効終了日」となっており、 ログイン可能なのは、有効終了日の1日前までです。

認証設定

認証に関する設定です。

項目 設定内容

RememberMe機能を利用する

ログイン状態を一定期間保持する機能を利用するかを指定します。
利用する場合は、認証ポリシーのRemember Meを設定してください。

ユーザー管理者ロール

ユーザー管理者ロールに指定されたロールを保持するユーザーは ユーザーのパスワードリセット、ユーザーのアカウントポリシーの変更など、ユーザーの管理をすることが可能となります。
GEMのユーザー編集機能は、この設定をもとにリセットボタンの表示制御を行っています。

画面表示設定(GEM)

GEMモジュールの画面表示設定

GEMモジュールの汎用画面表示に関する設定です。

項目 設定内容

ロゴURL

標準レイアウトを利用した画面で、ヘッダ上にロゴ画像を表示する場合に設定します。 設定する値は画像のURLです。
URLの指定方法については、URLの指定を参照してください。

スキン設定がFlatの場合で、未指定の時はデフォルトのロゴが表示されます。

ロゴURL(小)

スキン設定がFlatの場合の設定です。
メニューを縮小した際に表示するロゴ画像を設定します。 未指定の時はデフォルトのロゴが表示されます。

ロゴURL(大)

スキン設定がFlatの場合の設定です。
ログイン画面に表示するロゴ画像を設定します。 未指定の時はデフォルトのロゴが表示されます。

アイコンURL

標準レイアウトを利用した画面で、headerにiconタグを設定します。ico、png、gifに対応します。

画面タイトル表示

標準レイアウトを利用した画面で、ヘッダ上に「画面タイトル」を表示するかを設定します。 テナントロゴを指定している場合に、画面タイトルを出力したくない時に「表示しない」に設定することを想定しています。

画面タイトル・ロゴ表示 (ログイン・エラー画面)

ログイン画面、エラー画面に画面タイトル、テナントロゴを表示するかを設定します。 スキン設定がFlatの場合とそれ以外の場合で動作が異なります。

Flatの場合

ログイン画面には画面タイトルは表示されません。「ロゴURL(大)」の設定によってロゴが出力されます。
エラー画面は「画面タイトル表示」、「ロゴURL」の設定によって表示が決定されますが、 「表示しない」を設定した場合、ロゴについては「ロゴURL」の指定に関係なくデフォルトのロゴが出力されます。

Flat以外の場合

ログイン画面、エラー画面ともに「画面タイトル表示」、「ロゴURL」の設定によって表示が決定されますが、 「表示しない」を設定した場合、画面タイトルにはservice-configで設定された「TenantContextService」の「defaultTenantName」が表示されます。 ロゴは「ロゴURL」の設定に関係なく表示されなくなります。
service-configの設定についてはTenantContextServiceを参照してください。
デフォルトでは iPLAss が設定されています。

ログイン画面やエラー画面で画面タイトルやテナントロゴを隠したい場合は「表示しない」を選択してください。

画面タイトル

画面タイトルを返却するGroovyTemplateを指定します。未指定の場合は、表示名(テナント名)が利用されます。また、指定したGroovyTemplateでエラーが発生した場合も表示名(テナント名)が利用されます。

スキン名

GEMで提供されている画面レイアウトを指定します。 未指定の場合は、デフォルト設定(Flat)が利用されます。

テーマ名

GEMで提供されている画面テーマカラーを指定します。 未指定の場合は、デフォルト設定が利用されます。

テナントJavaScript URL

GEMで提供している標準レイアウト(gem/layout/defaultLayout)、 ポップアップレイアウト(gem/layout/popupLayout)に組み込むカスタムのJavaScriptのURLを指定します。

テナントStyleSheet URL

GEMで提供している標準レイアウト(gem/layout/defaultLayout)、ポップアップレイアウト(gem/layout/popupLayout)に組み込むカスタムのCSSのURLを指定します。

MDCモジュールの画面表示設定

モバイルファーストなMDCモジュールの汎用画面表示に関する設定です。

項目 設定内容

アプリケーションバーロゴURL

標準レイアウトを利用した画面で、アプリケーションバーにロゴ画像を表示する場合に設定します。 設定する値は画像のURLです。
URLの指定方法については、URLの指定を参照してください。

ログイン画面ロゴURL

ログイン画面に表示するロゴ画像を設定します。設定しなかった場合はデフォルトのロゴ画像が表示されます。 設定する値は画像のURLです。
URLの指定方法については、URLの指定を参照してください。

ファビコンURL

ファビコンとして設定する画像のURLを設定します。
URLの指定方法については、URLの指定を参照してください。

アップルタッチアイコンURL

アップルタッチアイコンとして設定する画像のURLを設定します。
URLの指定方法については、URLの指定を参照してください。

テナントJavaScript URL

MDCで提供している標準レイアウトに組み込むカスタムのJavaScriptのURLを指定します。

テナントStyleSheet URL

MDCで提供している標準レイアウトに組み込むカスタムのCSSのURLを指定します。

画面タイトル表示

標準レイアウトを利用した画面で、ヘッダ上に「画面タイトル」を表示するかを設定します。 テナントロゴを指定している場合に、画面タイトルを出力したくない時に「表示しない」に設定することを想定しています。

画面タイトル

画面タイトルを返却するGroovyTemplateを指定します。未指定の場合は、表示名(テナント名)が利用されます。また、指定したGroovyTemplateでエラーが発生した場合も表示名(テナント名)が利用されます。

テーマ名

MDCで提供している画面テーマカラーを指定します。 MdcConfigService で独自のテーマ、テーマ配色を設定可能です。 未指定の場合は、デフォルト設定が利用されます。

画面遷移設定

画面遷移に関する設定です。

項目 設定内容

ログイン画面Action制御Script

ログイン画面を切り替えるためのScriptを設定します。

認証が必要なActionに対してリクエストされた場合に、このScriptの戻り値として返ってきたAction名を利用して ログイン画面を表示します。

※この制御ScriptではAction名を返します。

再認証URL制御Script

信頼された認証を必要とする重要なページにアクセスした際、再度認証が必要な場合に表示する認証画面を切り替えるためのScriptを設定します。

設定内容についてはログイン画面Action制御Scriptを参照してください。

※この制御ScriptではAction名を返します。

エラー画面Template制御Script

システム内で例外が発生した場合のエラー画面を切り替えるためのScriptを設定します。

※この制御ScriptではTemplate名を返します。

TOP画面URL

TOP画面として表示するURL(アクション名)を指定します。 初期値として gem/ が設定されています。

ここで指定したURLは以下のタイミングで参照されます。

tenantContextPath + "/"が呼び出された場合

例えば、servletContextPathがiplass、テナントURLが /sampleTenant の場合、TOP画面URLに「gem/」が設定されていた場合
http://localhost:8080/iplass/sampleTenant/
にアクセスすると、
http://localhost:8080/iplass/sampleTenant/gem/
にリダイレクトします。

リクエストパス構築用テナントURL

APサーバの前段にプロキシサーバが存在し、URLのリライティングを行っているような場合に、設定された値でtenantContextPathをリライトできます。

例えば、ServletContextPathが iplass 、テナントURLが /sampleTenant の場合、
APサーバにダイレクトにアクセスする場合、 http://localhost:8080/iplass/sampleTenant/
と呼び出せますが、 前段のプロキシサーバで
/ → /iplass/sampleTenant/
のようなパス変換を行っている場合、リクエストパス構築用テナントURLに / を設定します。

この設定を行うことで、
http://localhost:8080/
で呼び出すことが可能になります。

ログイン画面Action制御Scriptの設定
バインド変数

Scriptには以下の変数がバインドされます。

request

RequestContextのインスタンス(org.iplass.mtp.command.RequestContextWrapperのインスタンス)

path

リクエストされたパス。ただし、テナントコンテキストパスを除く(アクション名を表します)

エラー画面Template制御Scriptの設定
バインド変数

Scriptには以下の変数がバインドされます。

exception

Exceptionのインスタンス

request

RequestContextのインスタンス

path

リクエストされたパス。ただし、テナントコンテキストパスを除く(アクション名を表します)

エラー画面表示に関する優先度

エラー画面は以下の優先度で決定されます。

  1. Tenantに設定された「エラー画面Template制御Script」が返すTemplate名

  2. service-configの WebFrontendService#errorUrlSelector で設定されたSelectorが返すTemplate名

service-configの設定についてはErrorUrlSelectorを参照してください。
デフォルトでは次のように設定されています。

  • NoPermissionExceptionの場合、gem/auth/PermissionError

  • ApplicationExceptionの場合、gem/generic/error

  • UnavailableExceptionの場合、gem/error/unavailable

  • それ以外の例外の場合、gem/error/system

MDCモジュール を有効化した場合、 mdc/ で始まるアクションについては、以下のようなエラーTemplateが設定されます。

  • UnavailableExceptionの場合、mdc/error/Unavailable

  • それ以外の例外の場合、mdc/error/System

多言語設定

多言語に関する設定です。

項目 設定内容

多言語利用

GEMを利用した画面で、ヘッダ上に「言語選択」を表示するかを設定します。 「利用する」に設定した場合は、「利用可能言語」を設定する必要があります。

利用可能言語

標準レイアウトを利用した画面で、ヘッダ上の「言語選択」で選択可能な言語を指定します。

デフォルトロケール

テナントのデフォルトロケールを設定します。未指定の場合、サーバのロケールが利用されます。

デフォルトタイムゾーン

テナントのデフォルトタイムゾーンを設定します。未指定の場合、サーバのタイムゾーンが利用されます。

Date出力Format

Date型のデータを画面やCSVファイルなどに出力する際のフォーマットを設定します。 未指定の場合は、ロケールに従ってservice-configで定義されたフォーマットで出力されますが、 テナントでカスタマイズしたい場合に設定してください。

書式は、 日付Format設定書式 を参照してください。

Date画面入力Format

Date型のデータを画面上で入力する際のフォーマットを設定します。 未指定の場合は、ロケールに従ってservice-configで定義されたフォーマットで出力されますが、 テナントでカスタマイズしたい場合に設定してください。

書式は、 日付Format設定書式 を参照してください。

日付Format設定書式
書式 出力内容

yyyy

年(4桁の数字)

MM

月(2桁に0埋めした数字)

MMM

省略した月名 ex. Jan

MMMM

月名 ex. January

dd

日(2桁に0埋めした数字)

※MMM、MMMMについては、ロケールがen、en_XXの場合のみ正常に動作します。
※画面入力のFormatではMMM、MMMMはサポートしていません。

メール送信設定

メール送信に関する設定です。

項目 設定内容

メールの送信

「メール」機能を利用してメール送信処理を実行した場合に、実際にメールを送信するかを設定します。

開発環境などでメールサーバがない場合など、メール送信処理の確認のみを行いたい場合に 「送信しない」に設定することで、実際のメール送信は実行されなくなります。 開発環境においては、デバッグログに出力されるメール文面を確認することが可能です。

Fromアドレス

デフォルトの送信Fromアドレスを設定します。 メール送信時にFromが設定されていない場合、ここで指定されたアドレスをセットします。

Fromアドレス個人名

デフォルトの送信Fromアドレスの個人名 ( InternetAddress#personal )を設定します。(任意)

ReplyToアドレス

デフォルトの送信ReplyToアドレスを設定します。未指定の場合はFromアドレスをセットします。

ReplyToアドレス個人名

デフォルトの送信ReplyToアドレスの個人名 ( InternetAddress#personal )を設定します。(任意)

拡張機能設定

拡張機能に関する設定です。

項目 設定内容

日付プレビュー表示機能

システム内で利用するシステム日時を一時的に変更して、画面動作・Entity検索結果を確認することができます。 Entityのバージョン管理にて時間ベースのバージョン管理を行っている場合、ここで指定した日付でデータのプレビューを行うことが可能です。

ONにすることで、GEM画面で、ヘッダ上に「プレビュー日時変更」が表示されます。

tenant menu preview date
tenant preview date dialog

このダイアログで設定した日時は、設定を実行したユーザーのSession情報に格納されます。 (そのSessionのみで有効)

システム日時を取得する下の2つのAPIは、プレビュー日付が設定されている場合はその値を返します。

TemplateUtil#getCurrentTimestamp() Templateでの利用を想定
EntityManager#getCurrentTimestamp() CommandなどのServerロジックでの利用を想定

※EQLでバインドされる date 変数もこの値を返します。 逆に上記APIを利用していない箇所は、設定しても効きません。

5. 共有テナント機能

共有テナントはメタデータ、データを複数テナント間で共有する機能です。 あるテナントを共有テナントとして設定すると、その共有テナントに登録されたメタデータ定義、Entityのデータを共有テナント以外のテナントでも利用できるようになります。

共有テナント側に登録されるメタデータについては、参照側テナント(ローカルテナント、子テナント)に対して、各メタデータを「共有するか」(公開)、「上書きしてもよいか」(カスタマイズ)等を設定できます。

5.1. 共有テナントの設定

共有テナントの設定はservice-configで行います。

TenantContextServiceの「sharedTenantId」に共有テナントとするテナントのIDを設定します。 共有テナントは1つのテナントのみ指定可能です。 共有テナントが設定された場合、その共有テナント上で共有設定されたメタデータ、データはすべてのテナントで共有可能となります。

メタデータの共有方法としては、メタデータ設定ファイルやAnnotationを利用することでも実現可能です。 メタデータ設定ファイル、Annotationで定義されたメタデータは共有テナントに所属するメタデータとして動作します。

TenantContextServiceにsharedTenantIdが定義されない場合、-1がデフォルトの共有テナントIDとなります。その場合、メタデータ設定ファイル、Annotationで定義されたメタデータのみがすべてのテナントで利用可能となります。

5.2. 共有設定

共有設定の項目には以下があり、メタデータの形式により設定手段が異なります。

  • 共有設定

  • 上書き可否

  • データ共有

  • 権限共有

このうち「データ共有」はEntity定義、Cube定義で利用できます。 また、「権限共有」はEntity定義、Action、WebApi、Workflow定義、Cube定義で利用できます。

Entity定義を変更した場合は、それに連動してデータのメンテナンス処理が実行されますが、共有されたEntity定義を変更した場合は、すべてのテナントのデータに対してメンテナンス処理が実行されます。

Entityデータを格納するDBを複数のプロジェクト・システムで共有している場合、共有テナントを有効化した場合、意図せず他のプロジェクト・システムのデータを上書きしてしまう危険性があります。
共有テナントを有効化する場合、他のプロジェク・システムトとDBの共有はおこなわないことを推奨します。

メタデータ設定ファイルによる共有設定

XMLファイルによるメタデータ定義の場合、「metaDataEntry」のAttribute属性として設定します。

項目 設定方法 デフォルト値 備考

共有設定

指定不可

true

上書き可否

overwritable

true

データ共有

dataSharable

false

権限共有

permissionSharable

false

設定例
<metaDataEntry name="/entity/sampleSampleEntity" overwritable="true">
    <metaData xsi:type="metaEntity" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Annotation記述による共有設定

Annotation定義の場合、各Annotation(ActionMapping、CommandClass、WebApi)のプロパティとして設定します。

項目 設定方法 デフォルト値 備考

共有設定

設定不可

true

上書き可否

overwritable

true

データ共有

設定不可

false

権限共有

permissionSharable

false

CommandClassでは指定不可

設定例
@ActionMapping(
    overwritable=true,
    permissionSharable=false,
    name="sample/sampleSearch",

AdminConsoleによる共有設定

共有テナントにログインし、AdminConsoleから共有設定することが可能です。 各メタデータの編集画面の「Common Attribute」領域に表示されている「Shared Setting」から設定を行います。

項目 設定方法 デフォルト値 備考

共有設定

canShare

false

上書き可否

canOverwrite

false

データ共有

canDataShare

false

権限共有

canSecurityShare

false