4D v16SPベースのサービス (例題) |
||||||||||
|
4D v16
SPベースのサービス (例題)
SPベースのサービス (例題)
SPベースの読み込み (例題)で説明している例では、ストアドプロシージャは、データ読み込み処理が要求されるたびに開始され、終了されています。次の例では、ストアドプロシージャはサーバデータベースが起動されると自動的に開始され、サーバデータベースに接続している任意の4Dから随時に終了する、または再開することができます。ストアドプロシージャは実行されるとすぐに、データベースに接続しているクライアントから送られる複数の要求に対して、非同期的に応答することができるようになります。 SPベースの読み込み (例題)の節では、4D Server で提供される既存のサービスを飛躍的に最適化する方法について説明していますが、この例ではすべての4Dクライアントマシンで使用できる、新しいサービスやカスタムサービスを実現する方法について説明します。さらにこの例は、独自のサービスを実現するためのテンプレートとしても使用することができます。 ストアドプロシージャはOn Server Startupデータベースメソッドによって自動的に開始されます: ` On Server Startup Database Method On Server Startupデータベースメソッドが、SP SERVICESプロジェクトメソッドをストアドプロシージャとして開始するため、実際にクライアントがサーバデータベースに接続しているかどうかに関わらず、4D Server でデータベースが開かれるとすぐにSP SERVICESが実行されます。次の図では、クライアントがまだ接続していない状態で、ストアドプロシージャが実行されている様子が4D Server の管理ウィンドウに表示されています。 START SP SERVICES プロジェクトメソッドは以下のとおりです。: ` START SP SERVICES プロジェクトメソッド Execute on serverコマンドはサーバマシンから呼ばれたときはNew processと同様に動作するので、同じメソッド (START SP SERVICES) をサーバマシンおよびクライアントマシンから使用して、ストアドプロシージャとしてSP SERVICESメソッドをサーバマシン上で実行できます。 STOP SP SERVICESプロジェクトメソッドはSP SERVICESプロジェクトメソッドに停止するよう通知します。 ` STOP SP SERVICES Project Method SP SERVICESプロジェクトメソッドが開始されると、vbStopSPServicesプロセス変数がFalseに設定され、このブール変数がTrueになるまでループします。コマンドSET PROCESS VARIABLEを使用して、サーバあるいはクライアント上で実行されているユーザプロセスからvbStopSPServices変数の値を変更し、ストアドプロシージャを停止させられます。 ストアドプロシージャは、任意の時間に任意の順序で非同期的にクライアントのリクエストを受信し、応答できる必要があります。この通信を保証する簡単な方法はテーブルを使用することです。 [SP Requests] テーブルには、次のフィールドが含まれています:
Note: これらの値は、この例題のため任意に選ばれたものであり、4D から与えられた値ではありません。
クライアントプロセスとストアドプロシージャの間の通信はGET PROCESS VARIABLE、SET PROCESS VARIABLE、VARIABLE TO VARIABLEコマンドを使用して実現できます。SPベースの読み込み (例題)の節や、前述のSTOP SP SERVICESプロジェクトメソッドで使用したソリューションがこの例です。 今回の場合は、ストアドプロシージャがさまざまな量のデータを送受信できるようにシステムが設定されていなければなりません。テキスト配列やピクチャ配列等の配列を使用することもできますが、次の2つの理由からテーブルを使用します:
Client post request プロジェクトメソッドは、リクエストを送るための汎用的なメソッドです: ` Client post request プロジェクトメソッド このメソッドからリクエストID 番号が返されますが、Sequence numberコマンドを使用することにより、この番号は必ずユニークになります。レコードが[SP Requests]テーブルに追加された後、クライアントはフィールド[SP Requests]reqStatus を調べ、ストアドプロシージャが完全にリクエストを処理するまで待機します。 Client get resultプロジェクトメソッドは、リクエストステータスを調べるための汎用的なメソッドです。前述したように、[SP Requets]redStatusフィールドが1以外の値になるとすぐに、クライアントはストアドプロシージャがリクエストを処理したことが (成功しても失敗しても) 分かります。 ` Client get result プロジェクトメソッド リクエストがストアドプロシージャにより正常に処理された場合、このメソッドはレコードからBLOB へ結果をコピーします (ある場合)。BLOB へのポインタは引数として渡されます。次に、呼び出し元であるメソッドでリクエストタイプに応じ、BLOB データが解析されます。リクエストの処理が終了したら、[SP Requests]レコードの削除を行うのはクライアントである点に注意してください。 小さなWAITING LOOPプロジェクトメソッドは、指定したtick数が経過するまでループします: ` WAITING LOOP Project Method Reminder: WAITING LOOP プロジェクトメソッドは、クライアントマシンのユーザ環境プロセスからリクエストされた場合でも、必要なだけ時間を待つために使用されています。 SP SERVICESプロジェクトメソッドは、サーバマシン上でストアドプロシージャとして実行されるメソッドです。疑似コードを次に示しますが、総体的なアーキテクチャは簡単です: “stop” 変数の初期化 以下は実際のコードです: ` SP SERVICES プロジェクトメソッド SP SERVICESプロジェクトメソッドは、データベースに新しいサービスを実現するためのテンプレートとして使用することができます。この節では、SP DO SERVER INFORMATIONサブルーチンおよびSP DO VOLUME LISTサブルーチンの詳細について説明します。SP DO BROWSE DIRECTORY ([SP Requests]reqParamsフィールドに納めて送られた引数を引数として取得するサブルーチン) の詳細については、このドキュメントでは説明されていません。 リクエストのタイプによってSP SERVICESプロジェクトメソッドは、結果データを[SP Requests]reqDataフィールドに保存する処理を行うサブルーチンを呼び出します。レコードの保存やリクエストステータスの変更は、SP SERVICESプロジェクトメソッドによって実行されます。 次に示すのはSP DO SERVER INFORMATIONサブルーチンです。このサブルーチンはサーバ関連の情報をBLOB に保存します。別のプロジェクトメソッドを使用して、クライアントマシン上でBLOB データを取り出します。 ` SP DO SERVER INFORMATION プロジェクトメソッド 次に示すのはSP DO VOLUME LISTサブルーチンです。このサブルーチンは、ボリューム関連の情報をBLOB に保存します。別のプロジェクトメソッドを使用して、クライアントマシン上でBLOB データを取り出します。 ` SP DO VOLUME LIST プロジェクトメソッド 汎用的なClient post requestとClient get resultプロジェクトメソッドを使用して、M_SERVER_INFORMATIONプロジェクトメソッドはストアドプロシージャより返されたサーバ情報をクライアントマシン上に表示します。このメソッドは、メニューに割り当てる、あるいはボタンのオブジェクトメソッドで呼び出してもいいでしょう。 ` M_SERVER_INFORMATION 以下は実行された[SP Requests];"SERVER INFORMATION"フォームです: 汎用的なClient post requestとClient get resultプロジェクトメソッドを使用して、M_SERVER_INFORMATIONプロジェクトメソッドはストアドプロシージャより返されたボリューム一覧をクライアントマシン上に表示します。このメソッドをメニューに割り当てたり、あるいはボタンのオブジェクトメソッドで呼び出してもいいでしょう: ` M_SERVER_VOLUMES 以下は実行された[SP Requests];"VOLUME LIST"フォームです:
参照
|
プロパティ
プロダクト: 4D
履歴
ARTICLE USAGE
4D Server ( 4D v16) |
||||||||