JBoss 5.1 内に EJB3-Timer があります。 編集: ShutdownHook は、doTimeOut() が正常に終了できるフラグを設定する必要があります (そうしないと、ジョブが完了し、このタイマーが終了するまでシャットダウンが停止されます)。
@Stateless
class Timer {
private static Thread hook;
static {
hook = new ShutdownHook();
}
@Timeout
public void doTimeOut(){
//some code
}
private class ShutdownHook implements Runnable(){
Logger.getLogger(ShutdownHook.class.getName()).log(Level.INFO, "MyBEAN.ShutdownHook execute hook " + hook); // Not always printed to log
Logger.getAnonymousLogger().log(Level.INFO, "MyBEAN.ShutdownHook execute hook " + hook); // throwns Exception
System.out.println("MyBEAN.ShutdownHook execute hook " + hook);
[...] // some code
}
}
この 2 つの投稿を見つけましたが、これらは 2005 年のもので、バグは CLOSED とマークされています。
http://www.pankaj-k.net/archives/2005/08/jboss_shutdown.html
http://jira.jboss.com/jira/browse/JBAS-2087
anonymousLogger によってスローされる例外は NullPointer です。
2011-02-02 09:16:33,120 ERROR [STDERR] Exception in thread "Thread-33"
2011-02-02 09:16:33,122 ERROR [STDERR] java.lang.NullPointerException
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.CategoryKey.<init>(CategoryKey.java:31)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:261)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:242)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.LogManager.getLogger(LogManager.java:188)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.Logger.getLogger(Logger.java:104)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.jboss.logbridge.LogBridgeHandler.publish(LogBridgeHandler.java:71)
2011-02-02 09:16:33,122 ERROR [STDERR] at java.util.logging.Logger.log(Unknown Source)
2011-02-02 09:16:33,122 ERROR [STDERR] at java.util.logging.Logger.doLog(Unknown Source)
2011-02-02 09:16:33,122 ERROR [STDERR] at java.util.logging.Logger.log(Unknown Source)
2011-02-02 09:16:33,122 ERROR [STDERR] at com.demo.MyBEAN$ShutdownHook.run(MyBEAN.java:202)
何か案は?