Внедренные ресурсы в сервис @Singleton EJB - PullRequest
0 голосов
/ 24 апреля 2020

Я использую кеш кофеина в своем приложении для хранения результатов некоторых запросов от внешнего API. Я решил, что было бы разумно использовать синглтон, так что это будет всего один кэш во всем приложении. Во-вторых, он внедряет bean-компонент без сохранения состояния и службу запросов API. Этот кэш, скорее всего, будет иметь высокий трафик c

  1. Может ли эта реализация каким-то образом быть bottle шейной, и, возможно, есть лучший способ связать ее?

  2. Будет ли синглтон использовать только один экземпляр внедренного сервиса (ответ занимает около 3 с, поэтому я хочу использовать многопоточность с кофеином при обновлении значений)? Если это плохая картина, как я должен решить это?

  3. Должна ли служба вызовов API быть локальным компонентом без сохранения состояния?
@Startup
@Singleton
class MyResultsCache {

    @EJB
    protected RestApiCallService service;

    protected Caffeine<Object, Object> cacheBuilder = Caffeine.newBuilder()
            .refreshAfterWrite(REFRESH_AFTER_MINUTES, TimeUnit.MINUTES)
            .expireAfterWrite(EXPIRE_AFTER_DAYS, TimeUnit.DAYS);
    protected LoadingCache<Object, Object> cache;

    @PostConstruct
    public void init() {
        loader = service::doRequestToApi;
        cache = cacheBuilder.build(loader);
    }
}

@Stateless
@LocalBean
class RestApiCallService  {
   private WebTarget target = ...; // web target creation here also

   public Object doRequestToApi(Object reqObj) {
      // amazing request impl...
      return target.request(..)post(..);
   }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...