2017.7.28
(画像参照元:intra-mart FAQ)
みなさんこんにちは。自称エリート(見習い)です。
intra-mart開発をしているページの保守対応を行う中で、
DatabaseManagerオブジェクト(非推奨)を使用しサーバーエラーを発生させているページを見つけました。
今まで研修ではTenantDatabaseしか使用したことがなく、
また実業務に入って初めてSharedDatabaseを知った程度だったのですが、
DatabaseManagerを知り、さらに理解が複雑になってきてしまいました。
そこで今回はDatabaseManagerとその代替メソッドであるTenantDatabaseとSharedDatabaseについて整理するつもりで書いていきたいと思います。
まずこれらのオブジェクトを知る前にIAPで使用される3種類のデータソースの違いを理解する必要があります。
・システムデータベース – システムの保存を行うデータベース(アプリケーションの接続先には非推奨)
・テナントデータベース – テナント内で利用するデータを保存するデータベース
・シェアードデータベース – IAP外のデータを保存するデータベース
■DatabaseManager
DatabaseManagerは現在では、
DatabaseManager.execStoredFuncを除き代替メソッドが用意されています。
※ストアドファンクションが実行できるメソッドです。
DatabaseManagerは引数名に接続名を指定すると、
同じ接続名のシステムデータベース(現シェアードデータベース)<shared-data-source>へ接続されます。
(指定しない場合、現在ログインしているログイングループのテナントデータベース<tenant-data-source>へ接続されます。)
■TenantDatabase
TenantDatabaseはその名の通り、
WEB-INF/conf/data-source-mapping-config.xmlの
<tenant-data-source>で指定したテナントデータベースに接続を行うことができます。
■SharedDatabase
SharedDatabaseは、
WEB-INF/conf/data-source-mapping-config.xmlの
<shared-data-source>で指定したシェアードデータベースに接続を行うことができます。
TenantDatabaseと違いデータソースを引数に指定する必要があります。
DatabaseManagerが非推奨になったことにより、
それぞれのオブジェクトでテナントデータベースとシェアードデータベースの使い分けができるようになったみたいです。
また、現在ではよほど古いコードを使いまわす機会がない限りは使うことはないようです。
現在では使用していないとはいえ、
勉強のつもりで調べてみたら意外と面白いですね!