認証トークンを取得し、その後のWebサービス呼び出しに使用するWebサービス呼び出しがあります。 Webサービスコールを行うたびにトークンWebサービスを作成し、その後実際のWebサービスを呼び出すようになりました。静的メソッドの同期化または非同期化
トークンを取得する方法は次のとおりです。基本的にこのコードが行うことは、Webサービスを呼び出してトークンを取得し、GSONを使用してレスポンスを解析してトークンを取得することです。
public static String getAuthTicket() {
String authTicket = null;
HttpResponse httpResponse = getAuthResponse();
String body;
if (httpResponse.getStatusLine().getStatusCode() == 200) {
try {
body = IOUtils.toString(httpResponse.getEntity().getContent());
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
ResponseTicket responseTicket = gson.fromJson(body, ResponseTicket.class);
authTicket = responseTicket.getTicket();
} catch (UnsupportedOperationException e) {
LOGGER.error("UnsupportedOperationException : ",e);
} catch (IOException e) {
LOGGER.error("IO Exception : ",e);
}
}
return authTicket;
}
これは明らかにパフォーマンスの問題につながっています。したがって、トークンを取得するためにWebサービスを提供しているパーティーはトークンを30分間有効にしました。
したがって、私たちが考えているのは、トークンを時間とともにキャッシュに入れ、現在のキャッシュ時間が30未満であるかどうかをチェックすることです。時間が30を超えると、トークンを取得し、キャッシュ内のタイムスタンプでトークンを更新します。
唯一のことは、競合状態のために不正なauthtokenを取得しないように、同期に関することが怖いです。
私は、この静的メソッドを同期化すると考えています。他に良い方法があると思いますか?
2つの操作の間の競合状態? –
後続のWebサービスコールを行う前にauthトークンを取得する競合条件 – noob
authトークンはどこに格納/キャッシュしますか? – Markus