タイマーに例外が発生すると、タイマーの実行が停止することを理解しています。しかし、ここに私のコードがあります:
@Startup
@Singleton
public class TimerBean
{
private HashMap myMap;
@EJB
private MyBean myBean;
@Schedule (minute="*/1" ....)
public void myTimer()
{
myMap.clear();
myMap = myBean.createData(); //this takes a few seconds to finish
}
...
}
したがって、タイマーは1分ごとに起動し、myBeanを呼び出してデータベースからデータを取得し、ハッシュマップにデータを入力します。
別のクラスで、クライアントはrestFul Webサービス呼び出しを行い、ハッシュマップを取得します。コードは次のとおりです。
@EJB
private TimerBean timerBean;
@GET
@Path("query")
@Produces(MediaType.APPLICATION_JSON)
public MyObject getData()
{
timerBean.getMyMap(); //call timerBean to get the hashmap
//in case the hashmap returned is empty, meaning it's not ready yet
//(it's still in the process of populating)
//throw an WebApplicationException
//so that from the user's end, I can show a different web page
//and ask the user to wait.
}
例外がスローされると、タイマーが再び機能しなくなることがあります。なんで?タイマー自体は例外に遭遇していません。
潜在的な問題は、ユーザーがハッシュマップを取得しようとしたときに、タイマーがハッシュマップの入力の途中にある可能性があることです。これを防ぐにはどうすればよいですか?準備ができるまでWebサービス呼び出しをブロックするようなものですか?
ありがとう