如何使用EJB实现永久后台进程?

问题描述 投票:0回答:1

我对EJB中的一般设计模式有疑问。我有Java EE应用程序(EJB和Web),我需要一种后台进程,它通过JPA永久扫描和处理特定数据。

我想,一个解决方案是实现@Singleton EJB。在使用@PostConstruct注释的方法中,我可以启动我的进程。

@Singleton
@Startup
public class MyUpdateService {
    @PostConstruct
    void init() {
        while(true) {
            // scann for new data...
            // do the job.....
        }
    }
}

但这是推荐的模式吗?或者是否有更好的方法在EJB容器中运行这样的类?

在EJB中,还有其他模式,如@TimerService和新的Java EE7批处理。但是我认为这两个概念都用于有限过程?

java java-ee ejb
1个回答
2
投票

在当前项目中使用EJB TimerService执行定期数据修剪或后端数据同步等任务。它不仅允许单次执行,还允许使用基于日历的计划的间隔计时器和计时器。

Smth喜欢:

@Startup
@Singleton
public class SyncTimer {
    private static final long HOUR = 60 * 60 * 1000L;

    @Resource
    private TimerService timerService;
    private Timer timer;

    @PostConstruct
    public void init() {
        TimerConfig config = new TimerConfig();
        config.setPersistent(false);
        timer = timerService.createIntervalTimer(HOUR, HOUR, config);
    }

    @Timeout
    private synchronized void onTimer() {
        // every hour action
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.