Имам следния сървлет sitebricks. Foo.get()
е достъпен като GET
на /foo/bar
. Разположих сървлета в GAE.
@Service
@At("/foo")
@Singleton
public class Foo {
@Get
@At("/bar")
public Reply<?> bar(Request<String> request, HttpSession session) {
// access request scoped HttpSession
}
}
Ако разбирам правилно sitebricks, както Request, така и HttpSession се инжектират от sitebricks (потенциално с помощта на Guice). Той също така ще гарантира, че HttpSession е локален за текущата заявка. Едновременните заявки ще се изпълняват на едно и също копие на Foo
, тъй като класът е анотиран с @Singleton
(вижте Guice документи). Но дори при едновременни заявки, пристигащи на една и съща JVM, всяко извикване на bar()
ще има своя собствена HttpSession въз основа на JSESSIONID, предадено от клиента. Валидни ли са всички тези предположения?
Когато изпълнявам тестове за натоварване на моето приложение, забелязах, че при много ниска скорост HttpSession, предадена от sitebricks/Guice, е нула. В момента отстранявам този проблем с поддръжката на Google. Но освен GAE - Какво може да причини това от гледна точка на sitebricks/Guice?
Аз намерих кодов фрагмент, който инжектира доставчик в конструктора. Това означава ли, че мога/трябва да получа HttpSession, като извикам Provider.get()
, вместо да оставя sitebricks да го инжектира като параметър на метод?
Свързани въпроси:
- Доставчик‹HttpSession› не се инжектира
- Как да @Инжектиране на обект HttpSession в клас на сервизен слой (DAO) в GWT с помощта на Guice?
- Инжектиране на стойност @SessionScoped във филтър с Guice
Актуализации
- Премахнах параметъра HttpSession от всички методи на сървлета като
bar
. ИнжектирахProvider<HttpSession>
в сървлета и извикахprovider.get()
, за да получа сесията. Тестовете, които проведох досега, показват, че това е по-надеждно от извеждането наHttpSession
от параметрите. Въпреки това не съм сигурен дали сесията се предоставя от sitebricks или от самия GAE. HttpSession предоставя ли се от контейнера на сервлета?