JEE-每天重置ejb单身人士

时间:2019-03-22 13:58:07

标签: java-ee singleton ejb runtime

我正在使用JEE,并且创建了EJB-Singleton。它具有一个字段LRUMap,它表示在应用程序中存储数据的缓存。我想清除单例内的数据,或者只是杀死并在运行时重新启动整个单例。 是否可以选择定期执行此操作?例如,每天重置一次Singleton bean以便清除数据?

代码如下:

@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class BpNotificationCacheBean {

    private static final int CACHE_SIZE = 1000;

    private Map<String, Boolean> cacheMap;

    @PostConstruct
    public void init() {
        cacheMap = new LRUMap(CACHE_SIZE);
    }

    @Lock(LockType.WRITE)
    public Boolean get(String businessPartnerId) {
        return cacheMap.get(businessPartnerId);
    }

    @Lock(LockType.WRITE)
    public void put(String businessPartnerId, Boolean isVIP) {
        this.cacheMap.put(businessPartnerId, isVIP);
    }
}

1 个答案:

答案 0 :(得分:2)

如果您在完整的JEE环境中,我将创建一个带有注释的Schedule方法:

import javax.ejb.Schedule;

@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class BpNotificationCacheBean {

    private static final int CACHE_SIZE = 1000;

    private Map<String, Boolean> cacheMap;

    ...

    @Lock(LockType.WRITE)
    @Schedule(hour = "1", persistent = false)
    private void resetCache() {
        cacheMap = new LRUMap(CACHE_SIZE);
    }
}

键是Schedule注释,它是Java EE Timer Service的一部分。我显示的注释每天运行01:00(1AM),但请参阅文档以了解如何进行更改。