Introdução Configurando plugin no EclipsePara facilitar, muito, a criação, deploy e debug de seus aplicativos aconselho a utilizar o 
Eclipse juntamente com o plugin fornecido pelo google.
IntegraçõesSpring 3.0.2Gosto de usar o controle transacional do Spring (@Transactional) , injeção de dependência e a implementação do open session in view (OpenEntityManagerInView) e para usar tais recursos tive que configurar o 
web.xml dessa forma.
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <filter>
        <filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
        <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
Já o arquivo 
applicationContext.xml ficou assim.
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
    <bean id="entityManagerFactory"    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" lazy-init="true">
        <property name="persistenceUnitName" value="t3st3" />
    </bean>
    <bean name="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="txManager" />
JavaServer Faces 2 (JSF 2.0)Costumo repassar o trabalho de cuidar do ciclo de vida dos managedbean para o Spring. A utilização do jsf 2 (implementação myfaces) traz as novidades do jsf 2.0 (que é um grande passo) e saber que é compatível com gae é muito bom. Bem meu 
web.xml ficou assim.
   <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.jsf</url-pattern>
   </servlet-mapping>      
        <!--
           We need to set annotation lifecycyle provider manually as org.apache.myfaces.config.annotation.NoInjectionAnnotationLifecycleProvider.
           Other providers use some classes that are restricted on Google App Engine.    
        --> 
        <context-param>
            <param-name>org.apache.myfaces.config.annotation.LifecycleProvider</param-name>
            <param-value>org.apache.myfaces.config.annotation.NoInjectionAnnotationLifecycleProvider</param-value>
        </context-param>       
        <!--
            Need to set a secret to avoid javax.crypto.BadPaddingException.
            "param-value" must be Base64 encoded.
            More details: http://wiki.apache.org/myfaces/Secure_Your_Application
         -->
        <context-param>
            <param-name>org.apache.myfaces.SECRET</param-name>
            <param-value>NzY1NDMyMTA=</param-value>
          </context-param>  
e o 
faces-config.xml assim:
    <application>
        <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
    </application>
Hibernate
Só usar! Ahh é mesmo tem que se criar um arquivo persistence.xml (META-INF) mínimo.
Observações gerais:Tente usar sempre o objeto 
Key como id, pois objetos filhos devem usar Key ou String codificada, não sendo possível usar long ou int.
Você pode acompanhar o 
status do ambiente,  quais serviços estão online qual a latência de uso e etc.