JDK 1.5でJBoss 4.2.3を使用しています。指定した期間(ミリ秒)後にファイルを削除することを目的としたステートレスなEJBを作成しました。EJB 3タイマーの問題
EJBコードがある:
import java.io.File;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import org.jboss.annotation.ejb.LocalBinding;
@Stateless
@LocalBinding(jndiBinding = "TimedFileDeletion")
public class TimedFileDeletionBean implements TimedFileDeletionBeanLocal {
@Resource
TimerService timerService;
File fileToDelete;
public void setRequiredInfo(long intervalDuration, File fileToDelete) {
timerService.createTimer(intervalDuration, "Created new timer");
this.fileToDelete = fileToDelete;
}
@Timeout
public void timeout(Timer timer) {
System.out.println("Timeout occurred");
if(fileToDelete.exists()) {
fileToDelete.delete();
}
}
}
ローカルインタフェースである:
Iタイムアウトメソッドが後に呼び出されるWebコンテナ(私はストライプのフレームワークを使用する)を介してBeanを呼び出すimport java.io.File;
public interface TimedFileDeletionBeanLocal {
public void setRequiredInfo(long intervalDuration, File fileToDelete);
}
指定された時刻が "タイムアウトが発生しました"だけを出力し、ファイルを削除せず、例外をスローします。これはコンソール出力です:
INFO [STDOUT] Timeout occurred
ERROR [TimerImpl] Error invoking ejbTimeout: javax.ejb.EJBException: java.lang.NullPointerException
アドバイスをいただければ幸いです。それが問題かもしれません表示されます
感謝。私はservletContextListenerを通して一度だけ実行するEJBタイマーを作成し、数分ごとに古いファイルをチェックします。 – Alex