У меня есть приложение jsf 2.0 без Spring, и я реализовал кеш в качестве области приложения, к которой следует обращаться из службы Rest.Теперь я хотел бы вызвать остальную веб-службу, которая должна проверять кэш, но когда я хочу получить к нему доступ, он всегда равен нулю.
Я уже пытался Доступ к FacesContext из веб-службы , а этот https://www.mkyong.com/jsf2/how-to-get-servletcontext-in-jsf-2/, но у меня это не работает.
@ManagedBean(eager=true)
@ApplicationScoped
public class CacheController implements Serializable{
private static final long serialVersionUID = 123L;
private Map<String, Cache> map = new HashMap<String, Cache>();
public Map<String, Cache> getMap() {
return map;
}
public void setMap(Map<String, Cache> map) {
this.map = map;
}
}
@Path("/service")
public class RestService {
@POST
@Path("anlieferung/kennzahlen")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String getValueFromCache(String item) throws JSONException, ParseException {
//is always null
CacheController cacheController= (CacheController) getServletContext().getAttribute("cacheController");
//is always null
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
CacheController cacheBean = application.evaluateExpressionGet(context, "#{cacheController}", CacheController.class);
//doSomeStuff and check if the item is in the Cache (CacheController.getMap())
}
}
Я уже инициализировал кеш поверх приложения jsf, и он работает.Теперь я ожидал, что получу объект Cache через FacesContent или ServletContext, но он всегда равен нулю.Нужно ли создавать что-то вроде ServletListener?Кто-нибудь может дать мне пример?Спасибо