Java EJB计时器:放入一个异常的方法@Timeout注释

Java EJB计时器:放入一个异常的方法@Timeout注释,java,exception,timer,ejb-3.0,Java,Exception,Timer,Ejb 3.0,大家早上好, 我写这封信是因为我想创建一个EJB计时器 但是我的@Timeout注释方法必须引发应用程序异常 我在文档中看到@Timeout方法不能引发应用程序异常 我从EJB编程开始:您觉得我的代码还好吗 我有必要保留这个例外 你遇到过这样的问题吗 非常感谢。应用程序例外旨在向调用者提供更多信息。在这种情况下,@Timeout方法的调用方是EJB容器,它无法知道应用程序异常的意图,因此不允许它们。如果您需要向容器发送失败信号,以便它重试,我建议捕获ACCESNOMENCALLEExcept

大家早上好,
我写这封信是因为我想创建一个EJB计时器
但是我的@Timeout注释方法必须引发应用程序异常
我在文档中看到@Timeout方法不能引发应用程序异常


我从EJB编程开始:您觉得我的代码还好吗
我有必要保留这个例外
你遇到过这样的问题吗

非常感谢。

应用程序例外旨在向调用者提供更多信息。在这种情况下,
@Timeout
方法的调用方是EJB容器,它无法知道应用程序异常的意图,因此不允许它们。如果您需要向容器发送失败信号,以便它重试,我建议捕获
ACCESNOMENCALLEException
并将其作为
EJBException
重新播放,这是一个系统异常,而不是应用程序异常。否则,如果您只想忽略失败,那么捕获它并记录它,而不是重新调用它。

在@Timeout注释的方法updateDataBase中,
在@Timeout注释的方法updateDataBase中,我可能会插入一个捕获异常的try catch。但是我想找到一种方法,如果可能的话,保持这个应用程序异常抛出。因为,通过try-catch,我“删除”了应用程序异常。java文档表明超时回调方法不能抛出应用程序异常。但是我想对一个方法使用@Timeout注释,我希望这个方法,如果可能的话,当然,如果可能的话,抛出一个异常。你有没有办法调和这两个事实?非常感谢你。汤玛斯非常感谢你。我想标记你的答案,但我不能,因为我的声誉太低。@Thomas你接受了答案,这是你所需要做的,谢谢:-)。
   @Stateless@Local
   @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
   public class AccesCacheImpl implements AccesCache {

        @Resource
        private TimerService serviceMinuteur;

       // i have to make an updateDataBase every 30 minutes
        public void creerTimer() {
          serviceMinuteur.createTimer(1000, 1800000, "MinuteurCache");
        }

        public void detruireTimer() {
            Timer timerCourant;
            for (final Object timer : serviceMinuteur.getTimers()) {
                timerCourant = (Timer) timer;
                if ("MinuteurCache".equals(timer)) {
                 timerCourant.cancel();
             }
        }
       }

         @Timeout
         public void updateDataBase(final Timer pTimer) throws AccesNomenclatureException {
             .....
             .....
             .....
         }

}