Google app engine 如何在GAE上的sitebricks方法中注入请求范围的HttpSessions?

Google app engine 如何在GAE上的sitebricks方法中注入请求范围的HttpSessions?,google-app-engine,servlets,guice,httpsession,sitebricks,Google App Engine,Servlets,Guice,Httpsession,Sitebricks,我有以下servletFoo.get()可以作为get在/Foo/bar上访问。我将servlet部署到 @服务 @在(“/foo”) @独生子女 公开课Foo{ @得到 @在(“/巴”) 公共回复栏(请求,HttpSession会话){ //访问请求作用域HttpSession } } 如果我正确理解sitebricks,那么请求和HttpSession都是由sitebricks注入的(可能是在的帮助下)。它还将确保HttpSession是当前请求的本地会话。并发请求将在Foo的同一实例上执

我有以下servlet
Foo.get()
可以作为
get
/Foo/bar
上访问。我将servlet部署到

@服务
@在(“/foo”)
@独生子女
公开课Foo{
@得到
@在(“/巴”)
公共回复栏(请求,HttpSession会话){
//访问请求作用域HttpSession
}
}
如果我正确理解sitebricks,那么请求和HttpSession都是由sitebricks注入的(可能是在的帮助下)。它还将确保HttpSession是当前请求的本地会话。并发请求将在
Foo
的同一实例上执行,因为该类用
@Singleton
注释(请参阅)。但是,即使并发请求到达同一JVM,每次调用
bar()
都将基于客户端传入的JSESSIONID拥有自己的HttpSession所有这些假设都有效吗?

在对我的应用程序运行负载测试时,我注意到sitebricks/Guice传入的HttpSession以非常低的速率为空。我正在谷歌的支持下解决这个问题。但是,除了GAE之外,从sitebricks/Guice的角度来看,是什么导致了这种情况

I将提供程序注入构造函数。这是否意味着我可以/应该通过调用
Provider.get()
而不是让sitebricks将其作为方法参数注入来获取HttpSession

相关问题:

更新

  • 我从所有servlet方法(如
    bar
    )中删除了HttpSession参数。我向servlet中注入了一个
    提供者
    ,并调用
    Provider.get()
    来获取会话。到目前为止,我运行的测试表明,这比从参数中获取
    HttpSession
    更可靠。也就是说,我不确定会话是由sitebricks还是GAE本身提供的HttpSession是否由servlet容器提供?

通常,我首先将HttpServletRequest注入服务类,然后从请求中获取HttpSession对象,这对我来说一直很好

例如:

@At("/preview")
@Service
public class PreviewService {

  @Inject
  private HttpServletRequest request;

  // It's similar if we need to modify response directly
  @Inject
  private HttpServletResponse response;

  @Get
  public Reply<?> get() {
    HttpSession session = request.getSession();
    ... ...
  }
}
@At(“/preview”)
@服务
公共类预览服务{
@注入
私有HttpServletRequest;
//如果我们需要直接修改响应,这是类似的
@注入
私有HttpServletResponse;
@得到
公众答覆{
HttpSession session=request.getSession();
... ...
}
}
希望能有帮助

@At("/preview")
@Service
public class PreviewService {

  @Inject
  private HttpServletRequest request;

  // It's similar if we need to modify response directly
  @Inject
  private HttpServletResponse response;

  @Get
  public Reply<?> get() {
    HttpSession session = request.getSession();
    ... ...
  }
}