前回の続きです。
ExticにおけるDBプロビジョニング
「DBエージェント」と呼ばれるWebアプリケーションを通じて、Exticのユーザー情報をオンプレミスのデータベースへ連携します。
エージェントを複数稼働させることで、複数のデータベースへのプロビジョニングを行えます。
設定
システム要件に合わせて以下の環境を用意しています。
Webサーバー: Windows Server 2022 + Eclipse Temurin JDK 17 + Apache Tomcat 10.1.33
DBサーバー: AlmaLinux 9.5 + PostgreSQL 15.10
データベースの準備
任意の形式でテーブルを作成します。
必ずExticが管理するレコードであることを示す列が必要です。
$ sudo -i -u postgres psql
psql (15.10)
postgres=# create database extic;
CREATE DATABASE
postgres=# create role extic with login password 'extic';
CREATE ROLE
postgres=# grant all on database extic to extic;
GRANT
postgres=# \c extic
データベース"extic"にユーザー"postgres"として接続しました。
extic=# create schema extic authorization extic;
CREATE SCHEMA
extic=# create table extic.extic (
name char(24),
email char(50),
extic char(5),
id char(4),
adddate TIMESTAMP,
suffix char(30)
);
CREATE TABLE
extic=# alter table extic.extic owner to extic;
ALTER DATABASE
Extic本体側の準備
Extic管理コンソール > アプリケーションから「Database (オンプレミス)」を選択します。
表示名を設定し、接続キーを「発行」して保存します。
対象ユーザーでアプリケーションを「使用する」設定にします。
Webアプリケーションの設定
管理コンソール > リリース情報 > モジュール からdbagent.war
をダウンロードします。
Tomcatが起動している状態でダウンロードした.war
ファイルを<tomcat_home>\webapps
以下にコピーし、デプロイされることを確認します。
<tomcat_home>\webapps\dbagent\WEB-INF\classes\META-INF\application_setting.properties
を編集します。
subdomain=
にExticテナントのサブドメイン(xxx.ex-tic.com の xxx の部分)を、apiconnect=
に発行した接続キーを指定します。
sqlite_directory=
には実在のパスを指定します。
その他の設定は今回は行いません。
保存してTomcatを再起動します。
http://(ホスト名):(ポート)/dbagent/
にアクセスします。
ここではExticの管理者ロールを持つユーザーでログインします。
次の画面に遷移します。
画面右上のプルダウンメニューから「設定」を選択します。
「DB接続設定」では、DBへの接続情報を設定します。
「ユーザーマッピング設定」では、連携先のテーブル名、レコード識別属性名と、Exticの属性とDBの列のマッピング設定を行います。
マッピング関数が使用できます。
ここでは、id
列に1からの連番を、adddate
列に追加日時を、suffix
列にメールアドレスの@
より後ろの部分を切り取った値を追加しています。
Exticのマッピング関数では、If文の判定において"分岐しなかった側"の処理の評価もされるため、仮に下記のような使い方をすると、メールアドレス
属性が空の場合に"DoNothing"
で処理スキップとはならず、RIGHT関数が実行されてしまうためエラーになります。
=IF([メールアドレス] != "", (RIGHT([メールアドレス], LEN([メールアドレス]) - FIND([メールアドレス], "@"))), "DoNothing")
そのためこのように、メールアドレス
属性に値が無い場合にエラーとならないようにする必要があります。
=RIGHT([メールアドレス], IF(FIND([メールアドレス], "@") == 0, 1, LEN([メールアドレス]) - FIND([メールアドレス],"@")))
「ポーリング間隔」からはExticへのポーリングを行う間隔と、Tomcatの起動時にポーリング処理を開始するか選択します。
確認
右上のドロップダウンリストから「実行」を選択すると、次の画面に遷移します。
「起動する」を選択するとポーリング処理が開始されます。
「即時実行する」とポーリング間隔に関わらず現在のExticのユーザー情報をDBに連携します。
即時実行します。
DBにレコードが追加されます。
extic=# select * from extic.extic;
name | email | extic | id | adddate | suffix
--------------------------+----------------------------------------------------+-------+------+---------------------+-------------------------------
testuser2024 | testuser2024@example.com | EXTIC | 1 | 2024-12-26 15:12:46 | example.com
(1 行)
メールアドレス
属性のないユーザーを対象としてもこの通り処理が実行されていることがわかります。
extic=# select * from extic.extic;
name | email | extic | id | adddate | suffix
--------------------------------+----------------------------------------------------+-------+------+---------------------+--------------------------------
通常ユーザー | | EXTIC | 2 | 2024-12-26 15:17:16 |
testuser2024 | testuser2024@example.com | EXTIC | 1 | 2024-12-26 15:12:46 | example.com
(2 行)
ExticからオンプレミスDBへのプロビジョニングの検証は以上になります。
記事中の「マッピング関数」はExticの各モジュールで使用可能で、紹介したもの以外にも多くの関数が存在します。
次回は「コマンド(オンプレミス)実行」について検証します。