我正在使用带有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