Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)


4.5 クライアントAPIの通信タイムアウトの設定

JAX-RS 2.1のクライアントAPI(javax.ws.rs.client.Clientインタフェース)を用いてREST通信を行う際の各種タイムアウト値を指定できます。

タイムアウト時間の指定方法は,ClientBuilder/Client/WebTargetオブジェクト単位にAPIで指定する方法と,APIで指定されなかった場合のデフォルト値をJ2EEサーバ単位にユーザプロパティで指定する方法の2種類があります。

ClientBuilder/Client/WebTargetオブジェクトに渡すClient configuration propertyとしてサポートするプロパティを次の表に示します。

表4‒2 サポートするClient configuration property

プロパティのキー名

データ型

指定内容

デフォルト値

J2EEサーバ

cjclstartap

jersey.config.client.connectTimeout

Integer

JAX-RSのクライアントAPIでの,クライアントソケットの接続タイムアウト値を指定します(単位:ミリ秒)。

0を指定した場合,タイムアウトされません。

ユーザプロパティ「ejbserver.javaee.jaxrs.config.client.connectTimeout」の指定値

0

jersey.config.client.readTimeout

Integer

JAX-RSのクライアントAPIでの,クライアントソケットの読み込みタイムアウト値を指定します(単位:ミリ秒)。

0を指定した場合,タイムアウトされません。

ユーザプロパティ「ejbserver.javaee.jaxrs.config.client.readTimeout」の指定値

0

Client configuration propertyの使用例を次に示します。

Client client = ClientBuilder.newClient();
String result = client.target("http://example.com/example/rest")
    .property("jersey.config.client.connectTimeout", 3000) // 接続タイムアウト3秒
    .property("jersey.config.client.readTimeout", 10000) // 読み込みタイムアウト10秒
    .request(MediaType.TEXT_PLAIN)
    .get(String.class);

各種タイムアウトが発生した場合の動作を次の表に示します。

表4‒3 タイムアウトが発生した場合の動作

タイムアウト種別

対象メソッド

タイムアウト発生時の動作

接続タイムアウト

javax.ws.rs.client.SyncInvokerインタフェースの全メソッド

メッセージログにKDJE60311-Eが,例外ログにスタックトレースが出力され,java.net.SocketTimeoutExceptionを原因とするjavax.ws.rs.ProcessingExceptionがスローされます。

読み込みタイムアウト

javax.ws.rs.client.SyncInvokerインタフェースの全メソッド

メッセージログにKDJE60311-Eが,例外ログにスタックトレースが出力され,java.net.SocketTimeoutExceptionを原因とするjavax.ws.rs.ProcessingExceptionがスローされます。

OSによるタイムアウト

javax.ws.rs.client.SyncInvokerインタフェースの全メソッド

メッセージログにKDJE60312-Eが,例外ログにスタックトレースが出力され,java.io.IOExceptionまたはそのサブクラスを原因とするjavax.ws.rs.ProcessingExceptionがスローされます。