|
GoogleAppEngine
Using Guice with Google App EngineYou can use Guice with to write modular applications for Google App Engine. Supported BuildsGoogle App Engine support requires Guice 2 (with or without AOP), plus the guice-servlet extension. SetupServlet and Filter RegistrationConfigure servlets and filters by subclassing ServletModule: package com.mycompany.myproject;
import com.google.inject.servlet.ServletModule;
class MyServletModule extends ServletModule {
@Override protected void configureServlets() {
serve("/*").with(MyServlet.class);
}
}Injector CreationConstruct your Guice injector in the getInjector() method of a class that extends GuiceServletContextListener. Be sure to include your application's servlet module in the list of modules. package com.mycompany.myproject;
import com.google.inject.servlet.ServletModule;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class MyGuiceServletContextListener extends GuiceServletContextListener {
@Override protected Injector getInjector() {
return Guice.createInjector(
new MyServletModule(),
new BusinessLogicModule());
}
}Web.xml ConfigurationYou must register both the GuiceFilter and your subclass of GuiceServletContextListener in your application's web.xml file. All other servlets and filters may be configured in your servlet module. <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>My Project</display-name>
<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>
<listener>
<listener-class>com.mycompany.myproject.MyGuiceServletContextListener</listener-class>
</listener>
</web-app>WAR LayoutEnsure the AOP alliance, Guice, and Guice servlet jars are in the WEB-INF/lib directory of your .war file (or www directory): www/
WEB-INF/
lib/
aopalliance.jar
guice-servlet-snapshot.jar
guice-snapshot.jar
...
classes/
...
appengine-web.xml
web.xml
| |
► Sign in to add a comment
check this out:
http://blog.yanivkessler.com/2011/04/simple-appengine-guice-module-part-1.html
Should probably add this to the docs above:
App Engine Log Errors
App Engine will throw a java.lang.reflect.InvocationTargetException when your App Engine projects starts because it tries to register a finalizer. This is not allowed in the App Engine environment, and it is benign to see this error: Guice will continue working normally. See: http://code.google.com/p/google-guice/issues/detail?id=488
Note that App Engine's log output will register these errors at the INFO level as:
Now that Guice 3.0 is out, is App Engine compatible with Guice 3.0?
yes, I use guice 3.0 with latest GAE version
Hey I am getting the following error
Uncaught exception from servlet java.lang.NoClassDefFoundError?: javax/inject/Provider
I have followed all the instructions as is. Can you tell me where I am going wrong.If you're using JSR-330 annotations (javax.inject) then you need to include that Jar as well, or it won't be in the classpath as you see above.