サーバーリソースからGoogleプレイスエンドポイントを呼び出すためにRESTletClientResourceを使用しています。具体的には、RESTリクエストはRESTlet ServerResourceを呼び出し、RESTlet ServerResourceはClientResourceを呼び出し、Googleプレイスの結果を返します。これは、TomcatでWebアプリケーションとして実行されます。
これは約1時間正常に機能し、その後各リクエストがハングします。tomcatを停止すると、すべてのリクエストがログで処理されるのがわかります。Tomcatは1時間ごとに再起動する必要があるため、これは非常に不安定です。
私はしばらくの間答えを探してきましたが、問題は接続が解放されていない可能性が高いことを確認しました。アドバイスは、表現に排気を使用し、クライアントリソースで停止することでした。
最新の安定バージョンのレストレット2.1.1を使用しています。
上記で説明したプロセスの実行方法は次のとおりです。
ClientResource storeRoot = new ClientResource(placeEndPoint);
Client c = (Client)storeRoot.getNext();
String jsonString = storeRoot.get().getText();
try {
c.stop();
} catch (Exception e) {
e.printStackTrace();
}
storeRoot.release();
サーバーリソースが表現を返す部分では、次のように排気と呼びます。
JSONArray ja = new JSONArray(placesList);
JsonRepresentation jr = new JsonRepresentation(ja);
jr.setCharacterSet(CharacterSet.UTF_8);
try {
jr.exhaust();
jr.release();
} catch (IOException e) {
e.printStackTrace();
} finally{
}
return jr;
クライアントリソースがハングするのを防ぐ方法を知っている人はいますか?