1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- ---
- title: Google App Engine Integration
- order: 7
- layout: page
- ---
-
- [[advanced.gae]]
- = Google App Engine Integration
-
- __This section is not yet fully updated to Vaadin 7.__
-
- Vaadin includes support to run Vaadin applications in the Google App Engine
- (GAE). The most essential requirement for GAE is the ability to serialize the
- application state. Vaadin applications are serializable through the
- [classname]#java.io.Serializable# interface.
-
- To run as a GAE application, an application must use
- [classname]#GAEVaadinServlet# instead of [classname]#VaadinServlet#, and of
- course implement the [classname]#java.io.Serializable# interface for all
- persistent classes. You also need to enable session support in
- [filename]#appengine-web.xml# with:
-
-
- [source, xml]
- ----
- <sessions-enabled>true</sessions-enabled>
- ----
-
- The Vaadin Project wizard can create the configuration files needed for GAE
- deployment. See
- <<dummy/../../../framework/getting-started/getting-started-first-project#getting-started.first-project.creation,"Creating
- the Project">>. When the Google App Engine deployment configuration is selected,
- the wizard will create the project structure following the GAE Servlet
- convention instead of the regular Servlet convention. The main differences are:
-
- * Source directory: [filename]#src/main/java#
- * Output directory: [filename]#war/WEB-INF/classes#
- * Content directory: [filename]#war#
-
- == Rules and Limitations
-
- Running Vaadin applications in Google App Engine has the following rules and
- limitations:
-
- * Avoid using the session for storage, usual App Engine limitations apply (no
- synchronization, that is, it is unreliable).
-
- * Vaadin uses memcache for mutex, the key is of the form
- [parameter]#_vmutex<sessionid>#.
-
- * The Vaadin [classname]#WebApplicationContext# class is serialized separately
- into memcache and datastore; the memcache key is [parameter]#_vac<sessionid>#
- and the datastore entity kind is [parameter]#_vac# with identifiers of the type
- [parameter]#_vac<sessionid>#.
-
- * __Do not__ update the application state when serving an
- [classname]#ConnectorResource# (such as [classname]#ClassResource#.
- [methodname]#getStream()#).
-
- * __Avoid__ (or be very careful when) updating application state in a
- [classname]#TransactionListener# - it is called even when the application is not
- locked and won't be serialized (such as with [classname]#ConnectorResource#),
- and changes can therefore be lost (it should be safe to update things that can
- be safely discarded later, that is, valid only for the current request).
-
- * The application remains locked during uploads - a progress bar is not possible.
-
-
-
-
|