我正在使用帶有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();
}
}
}
本地接口是:
import java.io.File;
public interface TimedFileDeletionBeanLocal {
public void setRequiredInfo(long intervalDuration, File fileToDelete);
}
當我打電話通過Web容器豆(我用的條紋框架)的超時方法之後調用指定的時間,但它只打印「超時發生」,它不會刪除該文件並引發異常。這是控制檯輸出:
INFO [STDOUT] Timeout occurred
ERROR [TimerImpl] Error invoking ejbTimeout: javax.ejb.EJBException: java.lang.NullPointerException
任何意見,將不勝感激。
感謝您的建議。我將創建一個只通過servletContextListener運行一次的EJB計時器,並且每隔幾分鐘檢查一次舊文件。 – Alex 2010-11-27 17:10:26