On Server Open Connection データベースメソッド

4D - Documentation   French   English   German   日本語   4D Serverテーマリスト   4D Serverインデックス   戻る   前   次

version 11.2 (Modified)


On Server Open Connection データベースメソッドはいつ呼び出されるか


On Server Open Connection データベースメソッドは、4Dリモートワークステーションが接続プロセスを開始するたびに、サーバマシン上で一度、呼び出されます。4D Server 以外の4D 環境ではOn Server Open Connection データベースメソッドが起動されることはありません。

On Server Open Connection データベースメソッド は以下のときに呼び出されます:

・リモート4Dが接続した (アプリケーションプロセスが開始するため)

・リモート4Dがデザインモードを開く (デザインプロセスが開始するため)

・リモート4DでNew Processコマンド、メニューコマンド、またはメソッド実行ダイアログボックスを使用して、非ローカルプロセスを開始する

リモート4Dでは、いずれの場合にも3つのプロセスが開始されます (クライアントマシン上に1つ、サーバマシン上に2つ) 。クライアントマシンでは、プロセスでコードが実行され、4D Serverに要求が送られます。サーバマシンでは、4Dクライアントプロセスはクライアントプロセスのためのデータベース環境 (ユーザプロセスのためのカレントセレクションやレコードのロック等) を管理し、クライアントマシン上で実行中のプロセスから送られた要求に対して応答を返します。4Dクライアントデータベースプロセスは対応する4Dクライアントプロセスのモニタを担当します。

重要: Web接続およびSQL接続はOn Server Open Connection データベースメソッドを起動しません。Webブラウザが4D Server に接続する場合はOn Web Authentication データベースメソッド (あれば) とOn Web Connection データベースメソッドが起動されます。4D ServerがSQLクエリを受信すると、On SQL Authentication データベースメソッドが (あれば) 呼び出されます。詳細については、4D Language Referenceマニュアルのデータベースメソッドに関する説明を参照してください。

重要: ストアドプロシージャの開始時には、On Server Open Connection データベースメソッドは起動されません。ストアドプロシージャはサーバプロセスであり、4Dクライアントプロセスではありません。ストアドプロシージャはサーバマシン上でコードを実行しますが、4Dクライアント (または他のクライアント) と4D Server によってやり取りされる要求に対して応答を返すことはありません。

On Server Open Connection データベースメソッド呼び出され方


On Server Open Connection データベースメソッドは4D Serverマシン上で、このメソッドを呼び出しを引き起こした4Dクライアントプロセス内で実行されます。

例えばリモート4Dが4D Server インタープリタデータベースに接続すると、そのクライアント用のユーザプロセスとデザインプロセス、クライアント登録プロセスが (デフォルトで) 開始されます。したがってOn Server Open Connection データベースメソッドは3回実行されます。つまり1回目はアプリケーションプロセス内で、2回目はクライアント登録プロセス内で、3回目はデザインプロセス内で実行されます。3つのプロセスがそれぞれサーバマシン上で開始される6番目と7番目と8番目のプロセスである場合に、On Server Open Connection データベースメソッド内からCurrent processを呼び出すと、Current processは1回目には6を、2回目には7を、3回目に8を返します。

On Server Open Connection データベースメソッドはサーバマシン上で実行されることに注意してください。このデータベースメソッドは、クライアント側で実行中のプロセスとは無関係に、サーバマシン上で実行中の4Dクライアントプロセス内で実行されます。また、このメソッドが起動された時点では、4Dクライアントプロセスにはまだ名前が付いていません (この時点では、PROCESS PROPERTIESは4Dクライアントプロセスの名前を返しません)。

On Server Open Connection データベースメソッドは、クライアント側で実行中のプロセスのプロセス変数テーブルにアクセスしません。このテーブルはサーバマシンではなく、クライアントマシンに存在します。

On Server Open Connection データベースメソッドがプロセス変数にアクセスすると、4Dクライアントプロセス用に動的にプロセス変数テーブルが作成され、プライベートに使用されます。

4D ServerはOn Server Open Connection データベースメソッドに3つの倍長整数タイプの引数を渡し、倍長整数タイプの結果を求めます。したがってこのメソッドでは3つの引数と戻り値を倍長整数として明示的に宣言しなくてはなりません:

   C_LONGINT($0;$1;$2;$3)

$0に値を返さず、その結果変数を未定義のままにするかまたはゼロに初期化した場合、4D Server はデータベースメソッドが接続を受け付けたものとみなします。接続を受け付けない場合、$0にヌルではない値を返します。

次の表はこのデータベースメソッドに渡される3つの引数が示す情報を表わしています:

引数説明
$14D Serverがユーザを識別するために内部的に使用するユーザID番号
$24D Serverが接続を識別するために内部的に使用する接続ID番号
$3廃止: 常に0が渡されますが、宣言は必要

これらのID番号は、例えば4Dコマンドに渡す引数のように、情報ソースとして直接使用することはできません。しかしこれらのID番号は、On Server Open Connection データベースメソッドOn Server Close Connection データベースメソッドとの間で、4Dクライアントプロセスを一意に識別するために利用できます。4D Server セッションのどの時点でも、これらの値の組み合わせはユニークです。インタープロセス配列やテーブルにこの情報を格納することによって、2つのデータベースメソッド間で情報をやり取りできます。この節の最後に示された例では、2つのデータベースメソッドがこの情報を使用して、テーブルの同一レコードに接続の開始と終了の日付と時間を格納しています。

例題

1. 次の例は、On Server Open Connection データベースメソッドOn Server Close Connection データベースメソッドを使用して、データベースへの接続ログを管理する方法を示しています。[Server Log]テーブル (下図) は接続処理の記録を取るために使用されています:

このテーブルに格納される情報は、次のOn Server Open Connection データベースメソッドOn Server Close Connection データベースメソッドによって管理されます:

      ` On Server Open Connection データベースメソッド
   C_LONGINT($0;$1;$2;$3)
      ` [Server Log] レコード作成
   CREATE RECORD([Server Log])
   [Server Log]Log ID:=Sequence number([Server Log])
      ` 接続日付と時間を保存
   [Server Log]Log Date:=Current date
   [Server Log]Log Time:=Current time
      ` 接続情報を保存
   [Server Log]User ID:=$1
   [Server Log]Connection ID:=$2
   SAVE RECORD([Server Log])
??      ` エラーなしを返すと接続が続行される
   $0:=0
      ` On Server Close Connection データベースメソッド
   C_LONGINT($1;$2;$3)
      ` [Server Log] レコードを取得
   QUERY([Server Log];[Server Log]User ID=$1;*)
   QUERY([Server Log];?&?;[Server Log]Connection ID=$2;*)
   QUERY([Server Log];?&?;[Server Log]Process ID=0)
      ` 終了日付と時間を保存
   [Server Log]Exit Date:=Current date
   [Server Log]Exit Time:=Current time
      ` プロセス情報を保存
   [Server Log]Process ID:=Current process
   PROCESS PROPERTIES([Server Log]Process ID;$vsProcName;$vlProcState;$vlProcTime)
   [Server Log]Process Name:=$vsProcName
   SAVE RECORD([Server Log])

下図は[Server Log]に登録されたレコードで、いくつかのリモート接続を示しています:

2. 以下の例題は午前2時から4時の間の接続を拒否します。

      ` On Server Open Connection データベースメソッド
   C_LONGINT($0;$1;$2;$3)

   If((?02:00:00?<=Current time)&(Current time<?04:00:00?))
      $0:=22000
   Else
      $0:=0
   End if

参照

On Server Close Connection データベースメソッド, データベースメソッド.


4D - Documentation   French   English   German   日本語   4D Serverテーマリスト   4D Serverインデックス   戻る   前   次