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、パスの種類がいくつかあります。以下に説明します。
Servlet仕様で定義されるcontextPathです。
HttpServletContext#getContextPath()
メソッドで取得されるパスです。
テナントURLはテナント単位に一意のURL文字列(パス)です。
ServletContextPath + tenantURL
で定義されます。
APサーバ上でテナントまでを特定するルート相対パスです。
JavaScriptファイル、CSSファイルなどの静的コンテンツを格納するルートパスです。 通常はservletContextPathと同一ですが、WebFrontendServiceの設定で変更することが可能です。
3.2. テナントの設定項目
基本設定
テナントに関する基本的な設定です。
項目 | 設定内容 |
---|---|
テナントID |
テナントのIDです。テナント作成時に決定されます。変更はできません。 |
テナント名 |
テナント名です。テナント作成時に決定されます。変更はできません。 |
テナントURL |
テナントのURLです。テナント作成時に決定されます。変更はできません。 |
表示名 |
テナントの表示名称を設定します。 |
概要 |
テナントの概要を設定可能です。 |
有効開始日、有効終了日 |
このテナントが有効な期間を示します。 有効期間の判定は、「有効開始日≦現在日付<有効終了日」となっており、 ログイン可能なのは、有効終了日の1日前までです。 |
認証設定
認証に関する設定です。
項目 | 設定内容 |
---|---|
RememberMe機能を利用する |
ログイン状態を一定期間保持する機能を利用するかを指定します。 |
ユーザ管理者ロール |
ユーザ管理者ロールに指定されたロールを保持するユーザは
ユーザのパスワードリセット、ユーザのアカウントポリシーの変更など、ユーザの管理をすることが可能となります。 |
画面表示設定(GEMの表示設定)
画面表示に関する設定です。
項目 | 設定内容 |
---|---|
ロゴURL |
GEMの画面でヘッダ上にロゴ画像を表示する場合に設定します。 設定する値は画像のURLです。 ログイン画面、エラー画面については、「テナント名のログイン・エラー画面表示」が「表示する」の場合のみ表示されます。 |
ロゴURL(小) |
スキン名でフラットスキンを選択した場合で、メニューを縮小した際に表示するロゴ画像を設定します。 |
ロゴURL(大) |
スキン名でフラットスキンを選択した場合で、ログイン画面に表示するロゴ画像を設定します。 |
アイコンURL |
標準レイアウトを利用した画面で、headerにiconタグを設定します。ico、png、gifに対応します。 |
テナント名表示 |
標準レイアウトを利用した画面で、ヘッダ上に「表示名」(未指定の場合はテナント名)を表示するかを設定します。 テナントロゴを指定している場合に、テナント名称を出力したくない時に「表示しない」に設定することを想定しています。 |
テナント名表示 (ログイン・エラー画面) |
GEMのログイン画面、エラー画面にテナント名(表示名)、テナントロゴを表示するかを設定します。
ログイン画面やエラー画面でテナントの名称を隠したい場合は「表示しない」を選択してください。 |
スキン名 |
GEMで提供されている画面レイアウトを指定します。 未指定の場合は、デフォルト設定(フラット)が利用されます。 |
テーマ名 |
GEMで提供されている画面テーマカラーを指定します。 未指定の場合は、デフォルト設定が利用されます。 |
テナントJavaScript URL |
GEMで提供している標準レイアウト(gem/layout/defaultLayout)、 ポップアップレイアウト(gem/layout/popupLayout)に組み込むカスタムのJavaScriptのURLを指定します。 指定するURLには以下のルールがあります。 「/」始まりの場合
staticContentPath以降の指定とみなします。 「http」始まりの場合
外部リソースを指定したとみなします。(指定パスをそのまま利用) 上記以外の場合
テナントコンテキストパス以降の指定とみなします。 |
テナント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 |
|
TOP画面URL |
TOP画面として表示するURL(アクション名)を指定します。
初期値として ここで指定したURLは以下のタイミングで参照されます。 tenantContextPath + "/"が呼び出された場合
例えばservletContextPathがiplass、テナントURLが`/sampleTenant`の場合、TOP画面URLに「gem/」が設定されていた場合 |
リクエストパス構築用テナントURL |
APサーバの前段にプロキシサーバが存在し、URLのリライティングを行っているような場合に、設定された値でtenantContextPathをリライトできます。 例えば、ServletContextPathがiplass、テナントURLが`/sampleTenant`の場合、 この設定を行うことで、 |
ログイン画面Action制御Scriptの設定
Scriptには以下の変数がバインドされます。
request |
RequestContextのインスタンス |
path |
リクエストされたパス。ただし、テナントコンテキストパスを除く(アクション名を表します) |
例えばシステム運用者は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
ログイン画面は以下の優先度で決定されます。
-
Tenantに設定された「ログイン画面Action制御Script」が返すAction名
-
service-configのAuthService#loginUrlSelectorで設定されたSelectorが返すAction名
デフォルトではgem/auth/login
が設定されています。
エラー画面Template制御Scriptの設定
Scriptには以下の変数がバインドされます。
exception |
Exceptionのインスタンス |
request |
RequestContextのインスタンス |
path |
リクエストされたパス。ただし、テナントコンテキストパスを除く(アクション名を表します) |
エラー画面は以下の優先度で決定されます。
-
Tenantに設定された「エラー画面Template制御Script」が返すTemplate名
-
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アドレスの個人名
( |
ReplyToアドレス |
デフォルトの送信ReplyToアドレスを設定します。未指定の場合はFromアドレスをセットします。 |
ReplyToアドレス個人名 |
デフォルトの送信ReplyToアドレスの個人名
( |
拡張機能設定
拡張機能に関する設定です。
項目 | 設定内容 |
---|---|
日付プレビュー表示機能 |
システム内で利用するシステム日時を一時的に変更して、画面動作・Entity検索結果を確認することができます。 Entityのバージョン管理にて時間ベースのバージョン管理を行っている場合、ここで指定した日付でデータのプレビューを行うことが可能です。 ONにすることで、GEM画面で、ヘッダ上に「プレビュー日時変更」が表示されます。 ![]() このダイアログで設定した日時は、設定を実行したユーザのSession情報に格納されます。 (そのSessionのみで有効) システム日時を取得する下の2つのAPIは、プレビュー日付が設定されている場合はその値を返します。
※EQLでバインドされる |
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 |