大家早上好,
我写信给您是因为我想创建一个 EJB 计时器。
但我的 @Timeout 注释方法必须抛出应用程序异常。
我在文档中看到 @Timeout 方法不能引发应用程序异常。
<前>@Stateless@Local
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
公共(public)类 AccesCacheImpl 实现 AccesCache {
@资源
私有(private) TimerService 服务 Minuteur;
//我必须每 30 分钟更新一次DataBase
公共(public)无效 creerTimer() {
serviceMinuteur.createTimer(1000, 1800000, "MinuteurCache");
}
公共(public)无效detruireTimer(){
定时器timerCourant;
for (最终对象计时器: serviceMinuteur.getTimers()) {
计时器Courant =(计时器)计时器;
if ("MinuteurCache".equals(timer)) {
timeCourant.cancel();
}
}
}
@暂停
public void updateDataBase(final Timer pTimer) 抛出 AccesNomenclatureException {
……
……
……
}
}
我开始EJB编程:你觉得我的代码还好吗?
我有必要保留这个异常(exception)。
您遇到过这样的问题吗?
非常感谢。
应用程序异常旨在向调用者提供附加信息。在这种情况下,@Timeout
方法的调用者是 EJB 容器,它无法知道应用程序异常的意图,因此它们是不允许的。如果您需要向容器发出失败信号以便其重试,我建议捕获 AccesNomenclatureException 并将其重新抛出为 EJBException,这是系统异常而不是应用程序异常。否则,如果您只是想忽略失败,那么捕获它并记录它,而不是重新抛出它。
我是一名优秀的程序员,十分优秀!