12.13.3. RESTEasy の非同期ジョブの設定
概要
このトピックでは、RESTEasy における非同期ジョブのクエリーパラメーターの例を取り上げます。
警告
非同期ジョブサービスは移植可能な状態で実装できないため、ロールベースのセキュリティーとは機能しません。非同期ジョブサービスを使用する場合、アプリケーションのセキュリティーは
web.xml ファイルの XML 宣言で設定する必要があります。
重要
GET、DELETE、および PUT メソッドは非同期的に呼び出すことができますが、これらのメソッドの HTTP 1.1 コントラクトに違反することになります。複数回呼び出されてもリソースの状態は変わらないこともありますが、呼び出しごとに新しいジョブエントリーとしてサーバーの状態が変更されます。
例12.18 非同期パラメーター
asynch クエリーパラメーターを使用して、バックグラウンドで呼び出しが実行されます。202 Accepted 応答と、バックグラウンドメソッドの応答がある場所を示す URL が含まれる Location ヘッダーが返されます。
POST http://example.com/myservice?asynch=true
上記の例では、202 Accepted 応答と、バックグラウンドメソッドの応答がある場所を示す URL が含まれる Location ヘッダーが返されます。ロケーションヘッダーの例を以下に示します。
HTTP/1.1 202 Accepted
Location: http://example.com/asynch/jobs/3332334
URI は以下の形式を取ります。
/asynch/jobs/{job-id}?wait={millisconds}|nowait=true
この URL では GET、POST、および DELETE 操作を実行できます。
- ジョブが完了すると、GET は応答として呼び出された JAX-RS リソースメソッドを返します。ジョブが完了しないと、GET は 202 Accepted 応答コードを返します。GET を呼び出してもジョブは削除されないため、複数回呼び出すことができます。
- POST はジョブの応答を読み取り、完了したジョブを削除します。
- DLETE は、ジョブのキューを手作業で削除するために呼び出されます。
注記
ジョブのキューが満杯の場合は、メモリーから最初のジョブをエビクトします。DELETE を呼び出す必要はありません。
例12.19 Wait / Nowait
GET および POST 操作では、
wait やnowait クエリーパラメーターを使うことで最大待機時間を定義できます。wait パラメーターが指定されていない場合、デフォルトのnowait=true が使用され、ジョブが完了していない場合でも待機しません。wait パラメーターはミリ秒単位で定義されます。
POST http://example.com/asynch/jobs/122?wait=3000
例12.20 Oneway パラメーター
RESTEasy は
oneway クエリーパラメーターを使用して fire および forget ジョブに対応します。
POST http://example.com/myservice?oneway=true
上記の例は、202 Accepted 応答を返しますが、ジョブは作成されません。