Jersey Client 2.29で非同期呼び出し時のタイムアウトが効かない
使い方が悪いのかもしれないのだが、サーバがシャットダウン状態(接続先の無い状態)でJersey Client 2.29で非同期呼び出しを行うと永遠に待機してしまう。元は複雑なコードなので概要になるが、おおよそは以下のようなものだ。
Client client = ClientBuilder.newClient(new ClientConfig(
new JacksonJaxbJsonProvider()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
));
WebTarget target = client.target("http://localhost:8080/api");
Invocation.Builder builder = target.request();
Future<Response>future = builder.get();
このfutureを別スレッドで待機すると、サーバに接続できない場合は永遠に待ってしまう。応答がこないのだ。しかし、Futureを無視して以下のようにするとうまく行く。きちんとコールバックされている。
builder.get(new InvocationCallback() {
....
});
https://allegro.tech/2014/10/async-rest.htmlには、この処理にバグがあるようなことが書いてあるのだが、未だに治っていないのだろうか?