У меня есть компонент ApplicationScoped, который я бы хотел получить в реализации кварцевого задания. Этот бит хранит хэш-карту во время выполнения, и я хотел бы заполнить хэш-карту, когда работа запустится. Тем не менее, FacesContext находится вне контекста внутри задания. У меня есть доступ к ServletContext. Можно ли получить доступ к моему bean-компоненту через ServletContext?Access ApplicationScoped bean через ServletContext
Мой код для доступа к Servlet Контекст:
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
SchedulerContext schedulerContext=null;
try {
schedulerContext=context.getScheduler().getContext();
}
catch (SchedulerException e) {
e.printStackTrace();
}
ServletContext servletContext=(ServletContext)schedulerContext.get("QuartzServletContext");
BOCacheM bOCacheM = (BOCacheM) servletContext.getAttribute("bOCacheM");
}
Мой QuartzServletContext определяется в web.xml как:
<context-param>
<param-name>quartz:scheduler-context-servlet-context-key</param-name>
<param-value>QuartzServletContext</param-value>
</context-param>
<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>
Quartz Scheduler и те вещи используют свою собственную нить для запуска. Похож на некоторые проблемы дизайна. Ответ зависит исключительно от функциональных требований, невидимых в вопросе. – Tiny