次のようなサーブレットがあります。
public class CacheRefresher extends HttpServlet {
private static final long START_TIMEOUT = 120*1000;
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
new Thread(new Worker()).start();
}
private class Worker implements Runnable {
public Worker() { }
public void run() {
try {
Thread.sleep(START_TIMEOUT);
} catch (InterruptedException e) {
}
while(true) {
MyService myService = null;
try {
myService = ServiceFactory.getInstance().getMyService();
myService.doSomething();
} catch (Exception ex){
ex.printStackTrace();
}finally {
ServiceFactory.getInstance().releaseMyService(myService);
}
try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
}
}
}
}
}
その目的は、サービスを定期的に呼び出すことです。このサーブレットのインスタンスは 1 つだけで、サーバーの起動時に作成されます。MyService は EJB です。
これはどれほど悪いですか?EJB からのスレッドの生成が許可されていないことは知っていますが、その逆はどうでしょうか? サーバーがシャットダウンするとどうなりますか?