Как получить bean-объект области применения JSF из веб-сервиса? - PullRequest
2 голосов
/ 29 апреля 2019

У меня есть приложение 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?Кто-нибудь может дать мне пример?Спасибо

...