JEE - сбросить ejb singleton каждый день - PullRequest
0 голосов
/ 22 марта 2019

Я использую JEE и создал EJB-Singleton. Он имеет в качестве поля LRUMap, который представляет кеш для хранения данных в приложении. Я хочу очистить эти данные внутри синглтона или просто убить и запустить заново весь синглтон во время выполнения. Есть ли возможность делать это периодически? Например, чтобы сбросить синглтон-бин один раз в день, чтобы очистить данные?

Вот код:

@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 Ответ

2 голосов
/ 22 марта 2019

Если вы находитесь в полной среде 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Сервис .Аннотация, которую я показываю, запускается 01:00 (1:00) каждый день, но посмотрите документы, чтобы показать, как это изменить.

...