1. マルチテナントとは
単一のiPLAssインスタンス(APサーバ/DBサーバ/war)上にそれぞれが論理的に分離された複数のテナントを作成することが可能です。 エンティティのデータはテナント毎に分離されており、基本的には相互に参照ができません(別途説明する共有テナント機能により共用するエンティティとデータを定義することも可能です)。 また、テナント単位にメタデータ、カスタムロジックを個別に設定することも可能です。
テナントはテナント管理ツール(Tenant Manager)により、作成、削除が可能です。 Tenant Managerの詳細は開発・運用サポートの説明を参照ください。
2. テナントの解決方法
iPLAssにWebアクセスされた際に操作対象となるテナントは、リクエスト情報もしくは設定ファイルの設定内容を基に解決されます。 以下のロジックに従って解決されたテナント名と一致するテナントが操作対象のテナントとして扱われます。
-
サーバーのホスト名から解決
WebFrontendService#tenantAsDomain
がtrue
に設定された場合、サーバーのホスト名(Hostヘッダーの値)をテナント名として扱います。
tenantAsDomain
の詳細については、 WebFrontendService を参照してください。 -
設定ファイルから解決
WebFrontendService#fixedTenant
に値が設定された場合、設定された値を固定かつ単一のテナント名として扱います。
fixedTenant
の詳細については、 WebFrontendService を参照してください。 -
HTTPリクエストヘッダーから解決
HTTPリクエストヘッダーとしてヘッダー名:X-Tenant-Name
が指定された場合、X-Tenant-Name
ヘッダーの値をテナント名として扱います。 -
リクエストパスから解決
それ以外の場合、テナント名はリクエストパスから解決されます。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、パスの種類がいくつかあります。以下に説明します。
Servlet仕様で定義されるcontextPathです。
HttpServletContext#getContextPath()
メソッドで取得されるパスです。
テナントURLはテナント単位に一意のURL文字列(パス)です。
ServletContextPath + tenantURL
で定義されます。
APサーバ上でテナントまでを特定するルート相対パスです。
JavaScriptファイル、CSSファイルなどの静的コンテンツを格納するルートパスです。 通常はservletContextPathと同一ですが、WebFrontendServiceの設定で変更することが可能です。
URLの指定
指定するURLには以下のルールがあります。
staticContentPath以降の指定とみなします。
staticContentPath + 指定パス
外部リソースを指定したとみなします。(指定パスをそのまま利用)
テナントコンテキストパス以降の指定とみなします。
Action経由でStreamやStaticResourceを利用する場合は、Action名を設定することでこのパターンとして動作します。
tenantContextPath + "/" + 指定パス
4.2. テナントの設定項目
基本設定
テナントに関する基本的な設定です。
項目 | 設定内容 |
---|---|
テナントID |
テナントのIDです。テナント作成時に決定されます。変更はできません。 |
テナント名 |
テナント名です。テナント作成時に決定されます。変更はできません。 |
テナントURL |
テナントのURLです。テナント作成時に決定されます。変更はできません。 |
表示名 |
テナントの表示名称を設定します。 |
概要 |
テナントの概要を設定可能です。 |
有効開始日、有効終了日 |
このテナントが有効な期間を示します。 有効期間の判定は、「有効開始日≦現在日付<有効終了日」となっており、 ログイン可能なのは、有効終了日の1日前までです。 |
認証設定
認証に関する設定です。
項目 | 設定内容 |
---|---|
RememberMe機能を利用する |
ログイン状態を一定期間保持する機能を利用するかを指定します。 |
ユーザー管理者ロール |
ユーザー管理者ロールに指定されたロールを保持するユーザーは
ユーザーのパスワードリセット、ユーザーのアカウントポリシーの変更など、ユーザーの管理をすることが可能となります。 |
画面表示設定(GEM)
GEMモジュールの画面表示設定
GEMモジュールの汎用画面表示に関する設定です。
項目 | 設定内容 |
---|---|
ロゴURL |
標準レイアウトを利用した画面で、ヘッダ上にロゴ画像を表示する場合に設定します。
設定する値は画像のURLです。 スキン設定がFlatの場合で、未指定の時はデフォルトのロゴが表示されます。 |
ロゴURL(小) |
スキン設定がFlatの場合の設定です。 |
ロゴURL(大) |
スキン設定がFlatの場合の設定です。 |
アイコンURL |
標準レイアウトを利用した画面で、headerにiconタグを設定します。ico、png、gifに対応します。 |
画面タイトル表示 |
標準レイアウトを利用した画面で、ヘッダ上に「画面タイトル」を表示するかを設定します。 テナントロゴを指定している場合に、画面タイトルを出力したくない時に「表示しない」に設定することを想定しています。 |
画面タイトル・ロゴ表示 (ログイン・エラー画面) |
ログイン画面、エラー画面に画面タイトル、テナントロゴを表示するかを設定します。 スキン設定がFlatの場合とそれ以外の場合で動作が異なります。
ログイン画面やエラー画面で画面タイトルやテナントロゴを隠したい場合は「表示しない」を選択してください。 |
画面タイトル |
画面タイトルを返却する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を設定します。 |
テナント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 |
|
TOP画面URL |
TOP画面として表示するURL(アクション名)を指定します。
初期値として ここで指定したURLは以下のタイミングで参照されます。 tenantContextPath + "/"が呼び出された場合
例えば、servletContextPathがiplass、テナントURLが |
リクエストパス構築用テナントURL |
APサーバの前段にプロキシサーバが存在し、URLのリライティングを行っているような場合に、設定された値でtenantContextPathをリライトできます。 例えば、ServletContextPathが この設定を行うことで、 |
ログイン画面Action制御Scriptの設定
Scriptには以下の変数がバインドされます。
request |
RequestContextのインスタンス(org.iplass.mtp.command.RequestContextWrapperのインスタンス) |
path |
リクエストされたパス。ただし、テナントコンテキストパスを除く(アクション名を表します) |
エラー画面Template制御Scriptの設定
Scriptには以下の変数がバインドされます。
exception |
Exceptionのインスタンス |
request |
RequestContextのインスタンス |
path |
リクエストされたパス。ただし、テナントコンテキストパスを除く(アクション名を表します) |
エラー画面は以下の優先度で決定されます。
-
Tenantに設定された「エラー画面Template制御Script」が返すTemplate名
-
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アドレスの個人名
( |
ReplyToアドレス |
デフォルトの送信ReplyToアドレスを設定します。未指定の場合はFromアドレスをセットします。 |
ReplyToアドレス個人名 |
デフォルトの送信ReplyToアドレスの個人名
( |
拡張機能設定
拡張機能に関する設定です。
項目 | 設定内容 |
---|---|
日付プレビュー表示機能 |
システム内で利用するシステム日時を一時的に変更して、画面動作・Entity検索結果を確認することができます。 Entityのバージョン管理にて時間ベースのバージョン管理を行っている場合、ここで指定した日付でデータのプレビューを行うことが可能です。 ONにすることで、GEM画面で、ヘッダ上に「プレビュー日時変更」が表示されます。 このダイアログで設定した日時は、設定を実行したユーザーのSession情報に格納されます。 (そのSessionのみで有効) システム日時を取得する下の2つのAPIは、プレビュー日付が設定されている場合はその値を返します。
※EQLでバインドされる |
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 |