CDI и HttpRequest

Използвам помощен клас в сървлет, за да премахна някакъв код от самия сървлет. Инжектирам този помощен клас в сървлета с CDI @Inject и това също е маркирано като @RequestScoped bean. Тъй като този помощен клас се използва за премахване на някакъв код от сървлета, имам нужда от достъп до httprequest, отговор и сесия в този клас. Има ли начин те да бъдат достъпни чрез инжектиране? Опитах се да използвам @inject в поле от тип HttpServletRequest, но получавам грешка от WELD.


person jimny    schedule 11.03.2014    source източник
comment
Най-добрият начин би бил да преминете към Java EE 7. Ако не можете да направите това, разгледайте тези алтернативи: stackoverflow.com/questions/18189337/ и stackoverflow.com/questions/13419887/   -  person helderdarocha    schedule 12.03.2014
comment
@helderdarocha Използвам Glassfish 4.0...така че трябва да използвам Java EE 7.   -  person jimny    schedule 12.03.2014
comment
Ако помощният клас е без състояние, помислете дали да го маркирате @ApplicationScoped.   -  person Adrian Mitev    schedule 13.03.2014


Отговори (1)


Има няколко алтернативни решения за това.

  1. Можете да предадете HttpServletRequest на помощника. Имам предвид вместо помощникът да бъде:

    @Inject HttpServletRequest request;
    
    public Xxx doSomeHelperWork() {
        // use request
    }
    

    Направи го:

    public Xxx doSomeHelperWork(HttpServletRequest request) {
        // use request
    }
    
  2. Използвайте сървлет модула DeltaSpike, който може да се справи с инжектирането на HttpServletRequest.

person Nikos Paraskevopoulos    schedule 12.03.2014
comment
Благодаря за коментара. Вече използвах Google Guice за това, но бих искал да премина към CDI и Java EE. Изглежда нещо толкова просто, че трябва да е възможно с CDI - person jimny; 12.03.2014