1

在 GlassFish 4.1/Java EE 7 的单例会话 bean 中使用 EJB 计时器,如下所示。

@Singleton
@LocalBean
@Startup
public class BackgroundJobManager {

    @PersistenceContext
    private EntityManager entityManager;

    @PostConstruct
    private void init() {
        // Do something.
    }

    @Schedule(hour = "*/1", minute = "0", second = "0", persistent = false)
    public void doHourlyJob() {
        // Do something hourly.
    }

    @Schedule(hour = "*", minute = "*/1", second = "0", persistent = false)
    private void doOnEveryMinute() {
        // Do something on every minute.
    }
}

尽管日志级别是INFO,但在(重新)部署应用程序时,服务器终端上会出现以下有点奇怪的警告。

Info:   No timers to be deleted for id: 94427432094072832
Info:   No timers to be deleted for id: 94427432094072832

这是什么意思?它是可以避免的还是容器试图严重警告某些事情(在这种情况下是否有任何修复)?


服务器还在启动时记录以下行。

Info:   Portable JNDI names for EJB TimerBean: [java:global/ejb-timer-service-app/TimerBean, java:global/ejb-timer-service-app/TimerBean!org.glassfish.ejb.persistent.timer.TimerLocal]
Info:   Loading application [ejb-timer-service-app] at [/ejb-timer-service-app]
Info:   ejb.timer_service_started
Info:   ==> Restoring Timers ... 
Info:   EclipseLink, version: Eclipse Persistence Services - 2.6.0.v20150309-bf26070
Info:   /file:/C:/Program Files/glassfish-4.1/glassfish/domains/domain1/applications/ejb-timer-service-app/WEB-INF/classes/___EJB__Timer__App login successful
Info:   There are no EJB Timers owned by this server
Info:   <== ... Timers Restored.
4

1 回答 1

0

这是目标 IDE NetBeans(是的,不是容器 GlassFish 本身)中的一个怪癖,并且只有在必须在 NetBeans 8.1 之前完成的 IDE 上关闭“Preserve Sessions Across Redeployment”选项时才能重现。

在此处输入图像描述

(右键单击服务器并从出现的子菜单中选择“属性”选项以打开上述框架)。

在 NetBeans 8.1 之前,无法启用此选项。这样做会引发异常。因此,不会在后续重新部署中维护会话。因此,出现了这些消息。

这在 NetBeans 8.1 中不再存在。现在重新部署应用程序会发出以下安全消息。

Info:   keepstate options resolved to true, saving appId 95015048510636032 for application Project.
Info:   keepstate options resolved to true, saving appId 95015048510636032 for application Project.
Finer:   initialize identitymaps
Info:   Timers will not be destroyed since keepstate is true for application Project
Info:   Timers will not be destroyed since keepstate is true for application Project

因此,持久性计时器在重新部署期间处于活动状态。当应用程序被重新部署时,它们不会被破坏。

于 2015-12-14T22:53:49.327 回答