タスク操作: ジョブの送信(submitJob)(REST)
ジオプロセシング サービスが非同期実行モードで公開されている場合、そのサービスのジオプロセシング タスクはジョブの送信(submitJob)操作をサポートします。submitJob 操作は、大規模データセットを処理する長期実行中のタスクに適しています。また、ジオプロセシング サーバは、ジョブ操作の成功のために結果マップ サービスを作成できます。したがって、submitJob 操作は、TIN や CAD などの非可搬性ツール出力、および Web アプリケーションでレンダリングできない RasterData 出力に適しています。該当するケースの出力は、サーバが結果マップ サービスとしてレンダリングでき、クライアントはその結果マップ サービスをクライアントの Web アプリケーションに追加できます。
submitJob を使用したジョブの送信
submitJob 操作の URL テンプレートは http://<GP タスクの URL>/submitJob です。クライアントは、submitJob 操作を通じて、タスク実行のリクエストを送信します。ジョブを送信すると、タスク実行操作と同様に、タスクの入力パラメータが URL として作成され、サーバに送信されます。サーバは、submitJob 操作のリクエストを受信すると、一意の ID(jobId)を使用してジョブのリソースを作成し、クライアントに返します。ジオプロセシング タスクの submitJob 操作に対するサーバ応答には、次に示すように、一意のジョブ ID(jobId)とジョブ ステータス(jobStatus)が示されます。
ジョブの送信(submitJob)リクエストの JSON 応答
{ "jobId" : "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSubmitted"}
ジョブのステータスの確認
ジョブのリソースの URL は http://<タスクの URL>/jobs/<ジョブ ID> です。クライアントは、ジョブの URL を通じて定期的にリクエストを送信し、ジョブのステータスを判断します。ジョブのステータス リクエストに対するサーバ応答には、jobId、jobStatus、およびジオプロセシング ツール メッセージ(ジオプロセシング サービスのメッセージ レベルによって異なる)が示されます。次の JSON は、ステータス リクエストに対してサーバが送信する応答を示しています。メッセージごとにタイプと説明プロパティが含まれています。
ステータス リクエストに対する JSON 応答
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobExecuting",
"messages": [
{
"type": "esriJobMessageTypeInformative",
"description": "Submitted."
},
{
"type": "esriJobMessageTypeInformative",
"description": "Executing..."
}
]
}
上記の例では、jobStatus として esriJobExecuting が示されています。次の表では、その他のジョブのステータスについて説明します。
jobStatus コード | 説明 |
esriJobWaiting | サーバは、他のリクエストでビジーの状態です。 |
esriJobSubmitted | サーバはジョブ リクエストを受け入れました。 |
esriJobExecuting | サーバはジョブを実行中です。 |
esriJobSucceeded | サーバはジョブを正常に完了し、出力結果が提供されています。 |
esriJobFailed | 無効なパラメータまたは他のジオプロセシング ツールの障害のため、ジョブの実行に失敗しました。 |
esriJobCancelling | サーバは、クライアントのリクエストに基づきジョブの実行をキャンセル中です。 |
esriJobCancelled | ジョブの実行リクエストがクライアントによってキャンセルされ、サーバはジョブの実行を終了しました。 |
成功したタスク結果
ジョブが成功すると(jobStatus = esriJobSucceeded)、サーバは、URL によるアクセスが可能な入力/出力パラメータ用のリソースを新規作成します。ステータス リクエストに対するサーバ応答には、入力と結果の URL に関する情報が示されます。出力パラメータ Output_Polygons を含む、バッファ ポイント タスクの JSON 応答の例を次に示します。タスク実行の結果の値とは異なり、出力パラメータと入力パラメータの値は相対 URL であることに注意してください。
成功したタスク結果の JSON 応答
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSucceeded",
"results": {
"Output_Polygons": {
"paramUrl": "results/Output_Polygons"
}
},
"inputs": {
"Input_Features": {
"paramUrl": "inputs/Input_Features"
}
},
"messages": [
]
}
ジョブが正常に完了すると、クライアントは、各出力パラメータを取得するためのリクエストを送信する必要があります。クライアントは、それぞれのリソースの URL を使用して入力または出力結果を取得できます。結果の URL は http://<ジョブの URL>/results/<パラメータ名> です。入力の URL は http://<ジョブの URL>/inputs/<パラメータ名> です。これらのリソースからの応答がパラメータの値であり、そのフォーマットは、クライアントのリクエストに基づき JSON/KML/AMF/HTML 出力フォーマットのうちのいずれかになります。データ タイプ GPFeatureRecordSetLayer の出力パラメータ Output_Polygons の JSON 応答例を次に示します。応答には、パラメータのパラメータ名、データ タイプ、および値が示されます。
結果の出力パラメータの JSON 応答
{
"paramName": "Buffer_Polygons",
"dataType": "GPFeatureRecordSetLayer",
"value": {
"displayFieldName": "",
"geometryType": "esriGeometryPolygon",
"spatialReference": {
"wkid": 102726,
"latestWkid": 102726
},
"fields": [
{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID"
},
{
"name": "BUFF_DIST",
"type": "esriFieldTypeDouble",
"alias": "BUFF_DIST"
},
{
"name": "Shape_Length",
"type": "esriFieldTypeDouble",
"alias": "Shape_Length"
},
{
"name": "Shape_Area",
"type": "esriFieldTypeDouble",
"alias": "Shape_Area"
}
],
"features": [{
"attributes": {
"FID": 1,
"BUFF_DIST": 3280.83333333,
"Shape_Length": 20613.401930152133,
"Shape_Area": 3.381121258723078E7
},
"geometry": {"rings": [[
[
7643591.499937415,
684676.8331969082
],
[
7643683.927544653,
684675.5310036391
] ...more
]]}
}],
"exceededTransferLimit": false
}
}
次の図は、submitJob 操作におけるサーバ/クライアント通信の概要を示しています。クライアントによって送信される定期的なステータス リクエストにより、ジョブのステータスが決定されます。クライアントは、ステータス リクエストの送信間隔を決定できます。サーバは、ジョブの実行を正常に完了すると、URL によるアクセスが可能な結果と入力のリソースを作成します。
また、ジオプロセシング サービスが、[マップ サービスに結果を表示] を有効にして公開されている場合、サーバは、タスク実行が正常に終了したときに出力パラメータの結果マップ サービスを作成します。タスクの各ジオデータベース出力パラメータは、マップ サービスのレイヤに対応し、タスクのパラメータに対して定義されたレイヤ シンボルに基づき描画されます。
エラー応答
無効な入力パラメータやアクセス不能なプロジェクト データ、または他のジオプロセシング ツールの障害のため、ジョブが失敗することがあります。ジョブが失敗すると、ジョブのステータスが esriJobFailed に更新されます。クライアントは、ジョブの URL を使用してジョブのステータスを確認し、ジョブの失敗を追跡する必要があります。失敗したタスクのエラー応答の JSON を次に示します。
esriJobFailed ステータスを示すステータス応答の JSON
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobFailed",
"messages": [
{
"type": "esriJobMessageTypeInformative",
"description": "Submitted."
},
{
"type": "esriJobMessageTypeInformative",
"description": "Executing..."
},
{
"type": "esriJobMessageTypeError",
"description": "Failed."
}
]
}
ジョブが失敗した場合、サーバは入力および結果のリソースを作成しません。また、サーバは、結果マップ サービスを伴うジオプロセシング サービスの場合であっても結果マップ サービスを作成できません。
ジョブのキャンセル
クライアントは、ジョブの実行中にいつでも submitJob 操作を破棄し、ジョブに対してキャンセル操作を開始できます。ジョブのキャンセルの URL は http://<GP タスクの URL>/cancel です。サーバは、キャンセル リクエストを受信すると、ジョブのステータスを esriJobCancelling に変更し、ジョブの実行を終了しようとします。サーバは、次に示すようなジョブのステータス メッセージをクライアントに送信します。
キャンセル リクエストの JSON 応答
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobCancelling"
}
クライアントは、ジョブの URL を使用して引き続きジョブのステータスをポーリングし、ジョブのキャンセルの進行状況を追跡できます。また、クライアントがキャンセルをリクエストできるのは、ステータスが esriJobWaiting、esriJobSubmitted、または esriJobExecuting であるジョブに限られます。ステータスが esriJobSucceeded または esriJobFailed であるジョブに対してキャンセル リクエストが発行されると、サーバによってエラー メッセージが返されます。