Java > JavaEE > EnterpriseBeans > AsynchronousSssionBean

Asynchronous Method Invocation

  • セッションビーンに非同期メソッドを実装できる
    • メソッドが起動される前に、制御がクライアントに返される
    • クライアントはJavaSE Concarrency APIで結果の取得、キャンセル、例外チェックなどをおこなう
    • 長い時間実行するタスク、集中的なプロセッサタスク、バックグラウンドタスク
    • スループットやレスポンスタイムの向上
    • クライアントは非同期メソッドが実行中に別のタスクを行うことができる
  • 非同期メソッドの戻り値はFuture<V>
    • 処理が終わったかどうかのチェック
    • 処理が完了するのを待つ
    • 最終結果の取得
    • 実行のキャンセル

Creating an Asynchronous Business Method

  • メソッドまたはクラスに@Asynchronousを付与
  • Webサービスエンドポイントは非同期にできない
  • メソッドシグニチャ
    @Asynchronous
    public void xxx(...)
    @Asynchronous
    public Future<ResultType> xxx(...) throws MyAplException
    
  • Future<V>の実装AsyncResult<V>を使って結果を返す
    new AsyncResult<ResultType>(result-obj);
    
  • クライアントからキャンセルされたかどうかはSessionContext.wasCancelled()で判断

Calling Asynchronous Methods fromEnterprise Bean Clients

  • クライアントは非同期メソッドを呼んだ直後にFuture<V>を返却される
    • 最終結果の取得
    • キャンセル
    • 処理が完了したかどうかのチェック
    • 例外は発生したかどうかのチェック
    • 実行がキャンセルされたかのチェック

Retrieving the Final Result froman Asynchronous Method Invocation

  • 最終結果の取得はFuture<V>.get
    • クライアントは、実行完了まで待たされる
    • 処理がキャンセルされていたらCancellationException
    • 処理で例外が発生していたらExecutionException
    • get(long timeout, java.util.concurrent.TimeUnit unit)でクライアントのタイムアウトを実現
  • 実行が完了しているかはFuture<V>.isDone

Cancelling an Asynchronous Method Invocation

  • 処理の実行をキャンセルするためには、Future<V>.cancel
    • キャンセルできたらtrueを返却
    • キャンセルできなかった時に、mayInterruptIfRunningパラメータによって、セッションビーンからキャンセル要求の有無を確認できる
      • mayInterruptIfRunningがtrue/false -> SessionContext.wasCancelledがtrue/false
  • 実行がキャンセルされたかどうかを確認するにはFuture<V>.isCancelled

Checking the Status of an Asynchronous Method Invocation

  • メソッド実行が完了したかどうかを確認するにはFuture<V>.isDone
    • 正常に終了した場合、キャンセルされた場合、例外が発生した場合にtrue
最終更新:2012年09月25日 08:52
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。