モデルの設計
最終更新日: 2020年7月7日
R8 | R9
W-MSAにおける "ドメイン" とは、関連度の強い複数のモデルを管理するグループを指します。マイクロサービスとして起動・停止する Wagby アプリケーション (wagbyapp) に含まれるモデル群、と解釈することもできます。ドメインごとにビルドされるアプリケーションを "ドメインアプリケーション" と呼びます。
例えば CRM というドメインを用意したとき、その中に顧客モデル、案件モデル、営業訪問記録モデルといった関連するモデル群が含まれるドメインアプリケーションがビルドされます。
1つのドメイン単位で、データベースのトランザクションを設定することができます。つまり、あるモデルのデータを更新したとき、関連する複数のモデルを同時に更新してコミットするという業務の単位となります。
本ガイドでは二つのドメインアプリケーションを用意するものとします。この識別子を "ドメインID" といいます。今回は "app1" と "app2" という二つのドメインIDを用いて説明します。(以降、ドメインIDの部分は、実際に読者が開発したアプリケーションのドメインIDに読み替えてお試しください。)
次ページで、AWS管理者からカスタムドメイン名を入手する手順を説明します。ドメイン管理者およびドメインアプリケーションの利用者は、ブラウザのアドレスバーに入力するURLに、このカスタムドメイン名を使います。
例えば "wagby.com" というドメインをもった組織が、Wagbyでビルドしたアプリケーションを運用するサブドメインとして "wmsa" を用意したとします。二つのドメインアプリケーション app1 と app2 を利用できるとき、カスタムドメイン名は "app1.wmsa.wagby.com" および "app2.wmsa.wagby.com" になります。(*1)
WagbyDesignerで設定する "ドメインID", "ドメイン名" と、AWSで設定する "カスタムドメイン名" の関係は次の通りです。
実際の運用では、2つ以上のドメインアプリケーションをビルドすることができます。上限の制約はありません。ただし運用手順も複雑化するため、最初は2つから初めて、慣れるようにするとよいでしょう。
Wagbyをインストールした時点では、"共通" と "システム" という二つのドメインが用意されています。
W-MSAでの運用を行わない、かつ、ドメインという単位でモデルを管理しない場合、開発者はすべての(作成した)モデルを "共通" ドメインに含めてください。
W-MSAで運用する場合、共通ドメインは、複数のドメインで横断して使われるモデルを格納するようにするとよいでしょう。例えば都道府県マスタなどがあげられます。共通ドメインに含まれるモデルは、すべてのドメインアプリケーションに含まれます。
システムが利用するモデル (juserやjgroupを含む) がすべて含まれています。これも、すべてのドメインアプリケーションに含まれます。
上述した、標準で用意されているドメインとは別に、新しいドメインを作成する方法を説明します。
"モデル" メニューから、"ドメイン" タブを選択します。
ギアアイコンから "新規" を選択します。
"ドメイン名" と "ドメインID" を入力する欄が用意されます。初期状態はいずれも Group1 となっています。
ドメイン名は、W-MSA全体で使う名称です。日本語を含むことができ、任意に命名できます。
ドメインIDは半角英数字で命名します。AWS管理者とやりとりする他、いくつかのケースで利用します。本ガイド全体をとおして、利用箇所を説明していきます。
ここではドメイン名を「アプリケーション1」、ドメインIDを「app1」とします。
モデル一覧に移ると、新しいドメインのタブ「アプリケーション1」が用意されていることがわかります。
現在、選択されているドメインでモデルを新規作成することができます。作成したモデルは、そのドメインに属することになります。
ここでは顧客モデルを作成してみます。
作成した顧客モデルは「アプリケーション1」ドメインに属します。
共通ドメインタブを開くと、モデルがないことがわかります。すなわち、ドメインごとにモデルの一覧表示が行われます。
モデルごとに、所属するドメインを変更することができます。"その他" タブを開きます。
現在、選択されているドメインを解除します。
ここでは共通ドメインを選択してみます。
モデル一覧で確認します。"アプリケーション1" ドメインに所属するモデルはありません。
代わって、"共通" ドメインに所属するモデルに、この顧客モデルが表示されるようになりました。
複数のモデルをまとめて、所属するドメインを変更することができます。
ドメインを変更したいモデルを選択します。
ギアアイコンからドメイン設定を選択します。現在、所属しているドメインがチェックされています。
所属するドメインを変更します。
変更すると、元のドメイン (アプリケーション1) のモデル一覧には表示されないことがわかります。
今回は共通ドメインに設定したため、このドメインの一覧表示に含まれるようになります。
作成したモデルとドメインと、ビルドしたドメインアプリケーションの関係を、次の例で説明します。
ここまでの設定は、ドメインを用意したものの、まだ W-MSA を利用するという設定は行っていません。
この段階で各ドメインにモデルを作成し、ビルドすることができます。この場合、ドメインは(単に)モデルをグループ化して管理するという意味にとどまり、ビルドされるアプリケーションは 1つだけ (wagbyapp) となります。
ここまでで、マイクロサービスの単位となるドメインを用意し、モデルをドメインに紐づけたところです。この段階でビルドしても、生成されるアプリケーションは1つ (wagbyapp) だけであり、すべてのモデルが1つのwagbyappに含まれます。
ドメインごとにアプリケーション(wagbyapp)を作成するためには、Wagbyマイクロサービスを有効にします。環境メニューから "サーバ > Wagbyマイクロサービス" を開きます。
設定を有効にすると、次の確認ダイアログが表示されます。
このダイアログに示すように、Wagbyマイクロサービスを有効にすると自動的に以下の設定が行われます。
この設定後にビルドしたアプリケーションは、RedisとActiveMQサービスが必要になります。
W-MSAを有効にすると、Designerの画面(右上)に "対象ドメイン" の選択肢が表示されるようになります。
(ここではもう一つのドメイン「アプリケーション2」を用意したものとして説明します。)
対象ドメインごとに、環境設定の値を変更することができます。プロジェクト名を(ドメインごとに)設定した例を示します。
プロジェクト名はドメインごとに指定できますが、"Javaソースコードパッケージ名" は共通です。また、"プロジェクト識別子" は指定することができません。(常にルートデプロイになります。)
"サーバ" タブで説明します。"Javaのバージョン" の設定欄には
"環境 > サーバ > HTTPセッション" は Spring Session Redis が選択されています。その詳細を設定します。
すべてのドメインアプリケーションで共通に利用する ActiveMQ の設定を行います。
ドメイン、ドメインアプリケーション、ドメインID
カスタムドメイン名
ドメインID
ドメイン名
AWSのカスタムドメイン名 (例)
app1
アプリケーション1
app1.wmsa.wagby.com (*2)(*3)
app2
アプリケーション2
app2.wmsa.wagby.com
ワンポイント
ドメインの作成
共通ドメインとシステムドメイン
共通ドメイン
システムドメイン
ドメインを作成する
モデルをドメインに割り当てる
新しいモデルを作成する
所属するドメインを変更する (1) 個別設定
所属するドメインを変更する (2) 一括設定
ドメイン割り当てのルール
例
モデル
共通ドメイン
app1ドメイン
app2ドメイン
ビルドされたドメインアプリケーション
app1
app2
都道府県マスタ
○
○
○
顧客
○
○
○
○
サポート
○
○
見積
○
○
消費税
○
○
ドメインを用意するが、W-MSAを利用しない
W-MSAを有効にする
注意
環境設定
*
が付与されたタブは、ドメインを横断して共通の値が用いられることを意味しています。
*
が付与されています。これは値を書き換えたとき、他のドメインでも共通に使われることを意味しています。"HTTPセッション" や "認証" の設定も同様です。このように、環境設定は*
が付与されていなければドメイン個別に設定でき、付与されていれば共通に用いられるものとなります。
[必須] Spring Session Redis の設定
設定欄 値 説明
Redisホスト名
localhost
Redisサーバの設定は(後述する)転送処理で自動的に付与されます。よってこの設定欄にはダミーの値を記述してください。
Redisパスワード
(ダミーの値)
Redisポート番号
(ダミーの値)
Spring Session ネームスペース
(空白)
空白としてください。
[必須] ActiveMQの設定
設定欄 | 値 | 説明 |
---|---|---|
送信先 | "ブローカー接続" | "ブローカー接続" を指定します。 |
ブローカーURL | failover:tcp://localhost:61616 | ActiveMQサーバの設定は(後述する)転送処理で自動的に付与されます。よってこの設定欄にはダミーの値を記述してください。 |
ユーザ名 | admin (ダミー値として) | |
パスワード | admin (ダミー値として) | |
ジョブを受信するキューの名前 | (空白) |
[必須] ドメイン識別子
ドメインアプリケーション同士で、クッキーに含まれるセッションIDに共通の "ドメイン識別子" を含ませることができます。
"セッションID(Cookie)のドメイン指定" に特定の文字列を設定すると、これをドメイン識別子として扱います。
この値は(後述する)転送処理で自動的に付与されます。よってこの設定欄にはダミーの値として "localhost" と記述してください。
ワンポイント
サブドメイン "wmsa" を含めることで、"wmsa.wagby.com" に属するホストに送信されるクッキーに含まれるセッションIDは共通となります。(今回の例は "app1.wmsa.wagby.com" と "app2.wmsa.wagby.com" が該当します。)サブドメインがない場合、"wagby.com" で運用するすべてのホストで共通となってしまうため、セキュリティ脆弱性につながる懸念が生じます。サブドメインによって、共通利用の範囲をドメインアプリケーション同士のみに限定しています。
[任意] オートスケールの設定
"環境 > サーバ > オートスケール" 欄に用意されている "オートスケールを有効にする" をチェックすると、このドメインアプリケーションはオートスケールで運用することができます。
ビルド
W-MSAが有効なとき、ビルドはドメイン単位で行われます。ドメインを切り替えた直後は、必ずフルビルドを行ってください。
ビルドによって生成されたドメインアプリケーションのフォルダ名は次のようになります。
wagbyapp.<ドメインID>
上の例では、wagbyapp.app1 と wagbyapp.app2 がそれぞれビルドされます。
W-MSAを無効にする
環境メニューから "サーバ > Wagbyマイクロサービス" を開きます。"Wagbyマイクロサービスを有効にする" を解除すると、W-MSA が無効になります。このとき、以下の設定は必要に応じて手動で初期状態に戻すようにしてください。
- "サーバ > HTTPセッション > 格納方式" を空欄にする。
- "アプリケーション > メッセージキュー > メッセージジョブ機能を使用する > ActiveMQ" を解除する。
- "カスタマイズ > 詳細 > ロック情報をデータベースのテーブルに格納する" を解除する。
- "プロジェクト識別子" を設定する。
仕様・制約
メニュー
- 対象ドメインに含まれるモデルだけでメニューを構成します。つまりメニュー設定で、別ドメインのモデルを選択することはできません。
- 各ドメインアプリケーションのメニューには、システムモデルと共通モデルは常に含まれます。メニューの構成(色、並び)も同じです。
- メニュータブの構成(並び)は、すべてのドメインアプリケーションで共通です。
- あるドメインアプリケーションではシステムモデルや共通モデルをメニューに表示させたくない、という要件は、ログオンアカウントの権限で制御してください。
- ドメインをまたぐモデルを操作するためのメニューを用意したい場合は「外部リンクメニュー」を使います。[詳細...]
カスタマイズフォルダ
- ドメインごとに customize フォルダが用意されます。例えば customize.app1 や customize.app2 というフォルダで管理されるようになります。接尾語は "ドメインID" が用いられます。("内部ドメインID" ではありません。)
- ドメインIDをリネーム(改名)したとき、すでに用意されていた customize.<旧ドメインID> は削除されません。ただしリネームのタイミングで新たに空の customize.<新ドメインID> が作成されます。開発者は手動で旧ドメインID用の customize フォルダの内容を新ドメインID側へコピーし、そののち customize.<旧ドメインID> を削除してください。
- ドメインIDを削除したとき、すでに用意されていた customize.<旧ドメインID> は削除されません。開発者の判断でこれを削除するようにしてください。
- ご注意ください。上の説明からわかるように、W-MSA利用時は customizeフォルダは使われません。customize.<ドメインID>フォルダが用いられます。
外部データベース
- W-MSAはドメイン間でデータベースを共有します。そのため外部データベースの設定は共通で利用されます。あるドメインを選択した状態で外部データベースの設定を変更すると、他のドメインでも同じ変更が適用されます。
- JDBCドライバは各ドメインの customize.<ドメインID> フォルダに配置します。つまり、開発者は同じJDBCドライバファイルをそれぞれの customize.<ドメインID> フォルダにコピーする必要があります。
認証方式
- 認証方式は、すべてのドメインアプリケーションで共通です。(あるドメインアプリケーションだけ OpenID Connect にする、というような指定を行うことはできません。)
クラスタリングとオートスケール
- ドメインアプリケーションにクラスタリングの設定を行うことはできません。オートスケールを設定することはできます。
ログの閲覧
- 標準で提供される "システムログ閲覧" 機能は利用できません。代わって、AWS が提供する CloudWatch Logs のユーザーインタフェースを利用します。
Javaのバージョン
- 複数のドメインでアプリケーションをビルドする場合、および、そのアプリケーションを運用するプラットフォームとしての Java は同じものを使ってください。あるドメインは Java 8 で、別のドメインは Java 11 で、というようなことはできません。
- 同じく、Java のメーカーも同一である必要があります。あるドメインで利用する Java は AdoptOpenJDK で、別のドメインでは OracleJava を使う、というようなことはできません。
リポジトリファイル
- 上述したように、環境設定はドメインごとに変更できる箇所があります。このため、リポジトリフォルダには project_<内部ドメインID>.txt というファイルが用意されます。これはドメイン個別の情報を管理します。"内部ドメインID" は自動で採番される数字です。
- ドメイン間で共通の設定は従来どおり project.txt で管理します。
- ドメインIDを変更した場合 project_<内部ドメインID>.txt は影響を受けません。内部ドメインIDの値は変わらないためです。
- ドメインを削除したとき、project_<内部ドメインID>.txt も同時に削除されます。
- ドメインに関する情報は .domain フォルダ内で管理しています。
- モデルがどのドメインに属するか、という情報は<モデルID>.txt に含まれるリポジトリキー
model/@domain
で管理しています。値は "内部ドメインID" です。 - 開発者は通常、"内部ドメインID" およびリポジトリファイルを直接、閲覧または編集することはありません。そのため Designer を使ってリポジトリを操作しているとき、"内部ドメインID" を直接、意識することはありません。
用語集
このページで登場した用語をまとめます。
ドメイン
複数のモデルを管理するグループの単位です。
ドメインアプリケーション
ドメインを定義したとき、ドメイン単位でビルド処理を行います。ドメイン単位で生成されたアプリケーションをドメインアプリケーションと呼びます。これが1つのマイクロサービスと解釈できます。
マイクロサービス
マイクロサービスは概念的な用語です。W-MSAではマイクロサービスを実装した単位としてドメインアプリケーションという用語を使って説明します。
ドメイン名
W-MSA全体で使う名称です。日本語を含むことができ、任意に命名できます。ビルドしたドメインアプリケーションの管理処理>モデル一覧を参照すると、どのモデルがどのドメインに所属しているかを確認できます。
ドメインID
半角英数字で命名します。AWS管理者に伝えます。ビルドしたドメインアプリケーションの接尾語として、また、カスタマイズフォルダの接尾語として用いられます。
内部ドメインID
システム内部で自動的に採番される数値です。開発者が意識することはありません。リポジトリでは、この内部ドメインIDを用いて管理しています。
共通ドメイン
インストール直後の Wagby に含まれています。開発者が任意のドメインを定義しない場合、作成したモデルはすべて共通ドメインに属します。共通ドメインに属するモデルは、すべてのドメインアプリケーションに含まれます。
システムドメイン
juserやjgroupなど、Wagbyが提供するシステムモデルが属するドメインです。開発者が作成したモデルをシステムドメインに所属させることはできません。システムドメインに属するモデルは、すべてのドメインアプリケーションに含まれます。
AWSカスタムドメイン名
AWSのネームサーバ(DNS)に登録するものです。インターネットで利用できる一意の名前になります。W-MSAで使う「ドメイン名」とは異なる概念です。
セッションID
利用者がアプリケーションにログオンしたときに割り当てられるIDです。ログオンのたびに新しいセッションIDが割り当てられます。ドメインアプリケーション同士で、このセッションIDは共通利用されます。
ワンポイント
"ドメイン" という言葉はさまざまな分野で用いられます。データベース設計分野ではドメインは「業務上、とりうる値の範囲」という文脈で用いられます。プログラム開発分野ではドメインは「システム化される対象領域」という文脈で用いられます。インターネットではドメインは「コンピュータやネットワークを識別する名前」です。Wagbyでいうドメインは、プログラム開発分野の意味に近いものとして使っています。