TP Web Service
S. Salva

Google App Engine


1. Outils nécessaires

Vous préférez utiliser un IDE (Eclipse)? alors allez là


  • Maven
  • Vous pouvez utiliser votre propre compte Google. J'ai aussi crée un compte (login:iut.info63@gmail.com, pass:info6300013) et 13 applications: info63appXX (0 à 12), voir dans la console. Choisissez en une (non choisie par quelqu'un d'autre...)
  • Installez Google Cloud SDK. Vous l'utilisez en ligne de commande (gcloud...) Google Cloud plugin pour Eclipse si vous voulez utiliser un IDE

  • 2. Utilisation du Datastore avec Objectify

    A

    Faites un service Web qui permet

    1. d'ajouter des employés (nom, prénom passés en paramêtre)
    2. de lister les employés par nom (retour HTML)


    La solution qui semble la plus adéquate est d'utiliser la librairie Objectify. Voir ici

    1. Créez un nouveau projet Springboot et un Servive (Controller) comme précédemment.
    2. Développez un service permettant d'ajouter et de récupérer des employés (en créant une Entity Employee). Pensez à la gestion des erreurs.
    3. Pour que votre service fonctionne avec le Datasore, voir l'installation de la V6

    Il faut bien sûr ajouter les dépendances (Objectify et certainement JaxB ) mais aussi créer une classe de configuration Objectify (exemple ci dessous)

    @Configuration
    public class ObjectifyConfig {

      @Bean
      public FilterRegistrationBean<ObjectifyFilter> objectifyFilterRegistration() {
        final FilterRegistrationBean<ObjectifyFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new ObjectifyFilter());
        registration.addUrlPatterns("/*");
        registration.setOrder(1);
        return registration;
      }

      @Bean
      public ServletListenerRegistrationBean<ObjectifyListener> listenerRegistrationBean() {
        ServletListenerRegistrationBean<ObjectifyListener> bean =
            new ServletListenerRegistrationBean<>();
        bean.setListener(new ObjectifyListener());
        return bean;
      }

      @WebListener
      public class ObjectifyListener implements ServletContextListener {

        @Override
        public void contextInitialized(ServletContextEvent sce) {

            ObjectifyService.init();

          ObjectifyService.register(Employee.class);
        }

        @Override
        public void contextDestroyed(ServletContextEvent sce) {
        }
      }
    }

    N'oubliez pas la ligne ObjectifyService.register(Employee.class); qui permet d'enregistrer vos classes métiers. Il vous faut également une classe ServletInitializer. Exemple:

    public class ServletInitializer extends SpringBootServletInitializer {

      @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(BookstoreApplication.class);
      }
    }

    Vérifiez bien votre code et deployez sur GAE pour tester. En local, ca ne fonctionne pas, à moins d'installer le simulateur Datastore avec le SDK GCloud.

    Vérifiez également que le datastore est modifié via la console d'admin de GAE (https://console.cloud.google.com/).

    Utiliser Emulator Datastore :

    gcloud components install cloud-datastore-emulator

    gcloud beta auth application-default login

    dans pom.xml :
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
        <version>2.0.0</version>
    </dependency>

    dans fichier application.properties
    spring.cloud.gcp.datastore.project-id=inf63app0
    spring.cloud.gcp.datastore.emulator.enabled=true
    spring.cloud.gcp.datastore.emulator.port=8081
    spring.cloud.gcp.datastore.host=localhost:8081

    B

    Faites une client Guzzle ou Java.

    3. Utilisation du Datastore avec la lib. datastore bas niveau

    A

    Implémentez le même service que précédemment dans une nouveau projet, en utilisant la librairie bas niveau du Datastore. Ajoutez les dépendences (google-cloud-datastore et JaxB certainement).

    Pensez à la gestion des erreurs. Le SDK propose une Exception DatastoreException.

    Testez votre service localement, (notez qu'il utilisera le vrai Datastore de GAE) en utilisant un navigateur. Vérifiez également que le datastore est modifié via la console d'admin de GAE (https://console.cloud.google.com/).

    B

    Déployez sur GAE et testez.