メインコンテンツまでスキップ
バージョン: 開発中

リモートデータストア

リモートデータストア とは、ローカルの 4Dアプリケーション (4D または4D Server) 上で使用される、別の 4Dアプリケーションの データストア への参照です。

ローカルの 4Dアプリケーションは、Open datastore コマンドを呼び出すことで、リモートデータストアに接続し参照します。

リモートマシン上で、4D は セッション を開いて、Open datastore を呼び出したアプリケーションからのリクエストを処理します。リクエストは内部的には REST API を使用し、これには 認証 および 利用可能なライセンス が必要となります。

Webセッションの使用​

Open datastore コマンドによって参照されるリモートデータストアの場合、リクエスト元プロセスとの接続はリモートマシン上では Webセッション により管理されます。

リモートデータストア上で作成される Webセッションは内部的にセッションID によって識別され、4Dアプリケーション上では localID と紐づいています。データ、エンティティセレクション、エンティティへのアクセスはこのセッションによって自動的に管理されます。

localID はリモートデータストアに接続しているマシンにおけるローカルな識別IDです:

  • 同じアプリケーションの別プロセスが同じリモートデータストアに接続する場合、localID とセッションは共有することができます。
  • 同じアプリケーションの別プロセスが別の localID を使って同じデータストアに接続した場合、リモートデータストアでは新しいセッションが開始されます。
  • 他のマシンが同じ localID を使って同じデータストアに接続した場合、新しいセッションが新しい cookie で開始されます。

これらの原則を下図に示します:

セッションの監視​

データストアアクセスのセッションは4D Server 管理ウィンドウにて、ユーザーエージェントが 4D であるREST セッション として表示されます。

セッションの終了​

セッションの有効期限 の段落で説明されているように、アクティビティなしにタイムアウト時間が経過すると、4D は自動的にセッションを終了します。デフォルトのタイムアウト時間は60分です。ですが、Open datastore コマンドのconnectionInfo 引数を使用することでこの値を変更することができます。

セッション終了後にリクエストがリモートデータストアに送信された場合、セッションは可能な限り (ライセンスがあり、サーバーが停止していない、など) 再開されます。ただしセッションが再開しても、ロックやトランザクションに関わるコンテキストは失われていることに留意が必要です (後述参照)。

ロッキングとトランザクション​

エンティティロッキングやトランザクションに関連した ORDA 機能は、ORDA のクライアント / サーバーモードと同様に、リモートデータストアにおいてもプロセスレベルで管理されます:

  • あるプロセスがリモートデータストアのエンティティをロックした場合、セッションの共有如何に関わらず、他のすべてのプロセスに対してそのエンティティはロックされた状態です (エンティティロッキング 参照)。同一のレコードに対応する複数のエンティティが 1つのプロセスによってロックされている場合、同プロセス内でそれらがすべてアンロックされないと、ロックは解除されません。なお、ロックされたエンティティに対する参照がメモリ上に存在しなくなった場合にも、ロックは解除されます。
  • トランザクションは、 dataStore.startTransaction()、dataStore.cancelTransaction()、および dataStore.validateTransaction() 関数を使用することで、各リモートデータストアにおいて個別に開始、検証、またはキャンセルすることができます。これらの操作は他のデータストアには影響しません。
  • クラシックな4D ランゲージコマンド(START TRANSACTION、 VALIDATE TRANSACTION、 CANCEL TRANSACTION) は(ds から返される)メインのデータストアに対してのみ適用されます。リモートデータストアのエンティティがあるプロセスのトランザクションで使われている場合、セッションの共有如何に関わらず、他のすべてのプロセスはそのエンティティを更新できません。
  • 次の場合にエンティティのロックは解除され、トランザクションはキャンセルされます:
    • プロセスが強制終了された
    • サーバー上でセッションが閉じられた
    • サーバー管理ウィンドウからセッションが強制終了された