1. マルチテナントとは

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. テナント管理

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

3.1. パスの種類

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

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

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

tenantURL(テナントURL)

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

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

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

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

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

3.2. テナントの設定項目

基本設定

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

項目 設定内容

テナントID

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

テナント名

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

テナントURL

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

表示名

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

概要

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

有効開始日、有効終了日

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

認証設定

認証に関する設定です。

項目 設定内容

RememberMe機能を利用する

ログイン状態を一定期間保持する機能を利用するかを指定します。

ユーザ管理者ロール

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

画面表示設定(GEMの表示設定)

画面表示に関する設定です。

項目 設定内容

ロゴURL

GEMの画面でヘッダ上にロゴ画像を表示する場合に設定します。 設定する値は画像のURLです。 ログイン画面、エラー画面については、「テナント名のログイン・エラー画面表示」が「表示する」の場合のみ表示されます。

ロゴURL(小)

スキン名でフラットスキンを選択した場合で、メニューを縮小した際に表示するロゴ画像を設定します。

ロゴURL(大)

スキン名でフラットスキンを選択した場合で、ログイン画面に表示するロゴ画像を設定します。

アイコンURL

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

テナント名表示

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

テナント名表示 (ログイン・エラー画面)

GEMのログイン画面、エラー画面にテナント名(表示名)、テナントロゴを表示するかを設定します。

表示する

「テナント名の表示」が「表示する」の場合に、テナント名が表示されます。 「テナントロゴURL」が指定されている場合に、ロゴが表示されます。

表示しない

service-configで設定された「TenantContextService」の「defaultTenantName」が表示されます。

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

スキン名

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

テーマ名

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

テナントJavaScript URL

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

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

「/」始まりの場合

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

「http」始まりの場合

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

上記以外の場合

テナントコンテキストパス以降の指定とみなします。
tenantContextPath + "/" + 指定パス

テナントStyleSheet URL

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

指定するURLは「テナントJavaScript URL」と同様のルールです。

画面遷移設定

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

項目 設定内容

ログイン画面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のインスタンス

path

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

(例)ログイン画面Action制御Script

例えばシステム運用者はGEMのログイン画面、コンシューマ向けにはGEM以外のカスタムのActionを利用して画面を構成している場合に、 バインドされたpathをもとにログインする画面を切り替えることができます。

if (path != null) {
    //pathがmemberで始まる場合は、メンバー用のログイン画面を利用
    //(member/loginというActionを自分で用意)
    if (path.startsWith("member")) {
        return "member/login";
    }
}

return null;    //nullを返すとデフォルトが利用される

このScriptで返ってきたActionにリダイレクトします。 その際、もともとアクセスしようとしたパスについてはrequestのattributeに redirectPath KEYで格納されます。

//redirectPathの定数
org.iplass.mtp.web.WebRequestConstants#REDIRECT_PATH;

ログイン画面を独自実装する際は、以下を参考にしてください。

org.iplass.gem.command.auth.LoginCommand jsp/gem/auth/Login.jsp

ログイン画面表示に関する優先度

ログイン画面は以下の優先度で決定されます。

  1. Tenantに設定された「ログイン画面Action制御Script」が返すAction名

  2. service-configのAuthService#loginUrlSelectorで設定されたSelectorが返すAction名
    デフォルトでは gem/auth/login が設定されています。

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

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

exception

Exceptionのインスタンス

request

RequestContextのインスタンス

path

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

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

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

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

  2. service-configの WebFrontendService#errorUrlSelector で設定されたSelectorが返すTemplate名
    デフォルトでは次のように設定されています。

    • NoPermissionExceptionの場合、gem/auth/PermissionError

    • ApplicationExceptionの場合、gem/generic/error

    • UnavailableExceptionの場合、gem/error/unavailable

    • それ以外の例外の場合、gem/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 Expansion DatePreview

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

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

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

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

4. 共有テナント機能

共有テナントはメタデータ、データを複数テナント間で共有する機能です。 メタデータの共有方法としては、メタデータ設定ファイルやAnnotationを利用することでも実現可能です。 テナントを共有テナントとして設定すると、その共有テナントに登録されたメタデータ定義だけでなく、Entityのデータも各テナント側で利用できるようになります。

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

4.1. 共有テナントの設定

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

TenantContextServiceの「sharedTenantId」に共有テナントとするテナントのIDを設定します。 また、「localTenantIds」を指定することで、共有テナント配下のローカルテナントを指定出来ます。 「localTenantIds」を指定した場合、共有テナントは指定されたローカルテナントでのみ有効になります。 なお、未指定の場合には共有テナントを除く全てのテナントで有効になります。

4.2. 共有設定

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

  • 共有設定

  • 上書き可否

  • データ共有

  • 権限共有

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

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

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

マルチテナント