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としてサポートするプロパティを次の表に示します。
プロパティのキー名 |
データ型 |
指定内容 |
デフォルト値 |
|
---|---|---|---|---|
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);
各種タイムアウトが発生した場合の動作を次の表に示します。
タイムアウト種別 |
対象メソッド |
タイムアウト発生時の動作 |
---|---|---|
接続タイムアウト |
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がスローされます。 |