EJB计时器突然停止在Glassfish 4.1.2(内部版本1)上触发

时间:2018-12-18 09:18:54

标签: java timer glassfish ejb

在Windows和Linux上安装的Glassfish上运行的同一应用程序。在Windows上,没有问题。在Linux上,每隔几天就会停止触发所有计时器。

添加属性:

reschedule-failed-timer=true

没有解决问题。

我认为,这可能与转换回滚或系统异常有关,所以我创建了简单的测试计时器:

@Startup
@Singleton
@LocalBean
public class AliveTimer {

    final static Logger log = Logger.getLogger( AliveTimer.class );
    @Resource private TimerService ts;

    @PostConstruct
    private void atStartup() {
        TimerConfig config = new TimerConfig();
        config.setPersistent( false );

        ScheduleExpression schedule = new ScheduleExpression();
        schedule.second( "0" );
        schedule.minute( "30" );
        schedule.hour( "*/8" );

        ts.createCalendarTimer( schedule, config );
    }

    @Timeout
    public void execute( Timer timer ) {
        log.info( "Timers alive..." );
    }

}

甚至几天后就停止触发,只有应用程序重新部署或容器重启会有所帮助。

发生这种情况时,请拨打以下网址

http://localhost:8080/ejb-timer-service-app/timer

返回正常输出

Welcome to Timer Application

There are 0 active persistent timers on this container
There are 258 active non-persistent timers on this container 

日志中也没有发现重要的东西。

有人知道是什么原因吗?

0 个答案:

没有答案