App Engine与Google Cloud Endpoints和Guice [英] Appengine with Google Cloud Endpoints and Guice

查看:150
本文介绍了App Engine与Google Cloud Endpoints和Guice的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我想在App Engine中使用Guice注入我的服务,或者是daos - 很常见我猜,但是我没有找到任何教程。



Appengine文档的官方版本似乎在这里: https://github.com/google/guice/wiki / GoogleAppEngine



配置Guice时,您可以设置com.google.inject.servlet.GuiceFilter来拦截每个请求/ *。在某些时候,您必须初始化模块。像文档说的一个好地方是ServletContextListener。



一种特殊类型的模块是ServletModules,它将请求路由到Servlet-Classes,而不是在web.xml中执行此操作,现在可以通过编程方式来执行此操作。 / p>

挺直直到这里。但是如何将Guice配置为也包括Endpoint-Class?

解决方案

原来,有一个GuiceSystemServiceServletModule可以正确处理。

  public class GuiceSSSModule extends GuiceSystemServiceServletModule {

@Override
protected void configureServlets()
super.configureServlets();

设置< Class<?>> serviceClasses = new HashSet< Class<?>>();
serviceClasses.add(MyEndpoint.class);
serviceClasses.add(AnotherAndpoint.class);
this.serveGuiceSystemServiceServlet(/ _ ah / spi / *,serviceClasses);
}
}

将此模块包含在ServletContextListener中的注入器构造中:

  public class MyGSCL extends GuiceServletContextListener {

@Override
protected Injector getInjector()
return Guice.createInjector(new GuiceSSSModule(),new BaseModule());
}
}

并在您的web.xml中使用此监听器: / p>

 < listener> 
< listener-class> de.mypkg.MyGSCL< / listener-class>
< / listener>

还要确保在您的web.xml中包含Guice过滤器:

 <! -  GUICE  - > 
< filter>
< filter-name> guiceFilter< / filter-name>
< filter-class> com.google.inject.servlet.GuiceFilter< / filter-class>
< / filter>
< filter-mapping>
< filter-name> guiceFilter< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

您的端点将在/ _ah / api / ...下可用,您可以使用@Inject在你的端点类。


So i want to use Guice in Appengine with Cloud Endpoints to inject my services, or daos - pretty common I guess, but I found no tutorial for this.

Official Guice for Appengine documentation seems to be here: https://github.com/google/guice/wiki/GoogleAppEngine

When configuring Guice you set up the com.google.inject.servlet.GuiceFilter to intercept every request "/*". And at some point you must initialize the modules. Like the documentation says a good place to do that is a ServletContextListener.

One special kind of Module are ServletModules, that map request-Paths to Servlet-Classes, instead of doing this in the web.xml you can now do this programmatically.

Pretty straight forward up until here. But how do I configure Guice to also include the Endpoint-Classes?

解决方案

Turns out there is a GuiceSystemServiceServletModule that handles exactly this.

public class GuiceSSSModule extends GuiceSystemServiceServletModule {

  @Override
  protected void configureServlets() {
    super.configureServlets();

    Set<Class<?>> serviceClasses = new HashSet<Class<?>>();
    serviceClasses.add(MyEndpoint.class);
    serviceClasses.add(AnotherAndpoint.class);
    this.serveGuiceSystemServiceServlet("/_ah/spi/*", serviceClasses);
  }
}

Include this module in the Injector construction in your ServletContextListener:

public class MyGSCL extends GuiceServletContextListener {

  @Override
  protected Injector getInjector() {
    return Guice.createInjector(new GuiceSSSModule(), new BaseModule());
  }
}

and use this listener in your web.xml:

<listener>
   <listener-class>de.mypkg.MyGSCL</listener-class>
</listener>

Also make sure to include the Guice filter in your web.xml:

<!-- GUICE -->
<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Your endpoints will be available under /_ah/api/... again and you can use @Inject in your endpoint classes.

这篇关于App Engine与Google Cloud Endpoints和Guice的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆