Avant de commencer le projet, il faut que je constitue un environnement de développement. Même si, pour l'instant, je n'ai pas besoin d'un environnement complet, avec outils de suivi de qualité ou intégration continue, il faut au moins que j'évalue les capacités des outils de développement, en me concentrant sur Netbeans et Eclipse, avec ou sans Maven ou Ant.

Il est possible de développer avec des outils rudimentaires : un JDK 5 ou 6, le SDK et un éditeur de texte. J'ai fait quelques essais dont j'ai rendu compte sur JTips. Ces essais m'ont juste servi à comprendre le fonctionnement du SDK avant d'étudier l'intégration avec les environnements de développement.

Intégration avec Eclipse

Installation du plug-in
Google fournit un plugin Eclipse pour GAE. Il y a une adresse d'update site pour chaque version d'Eclipse. Par exemple, pour Eclipse 3.5, il faut ajouter le site suivant dans Eclipse :
    http://dl.google.com/eclipse/plugin/3.5
Le site d'update contient le plugin, l'App Engine SDK et GWT. Seul le premier est indispensable. Le SDK peut être installé de façon autonome et GWT ne sert pas forcément. J'ai donc installé le plugin tout seul ; tout s'est bien passé, du moins au deuxième essai.
Le plugin ajoute les éléments suivants dans Eclipse :
  • un type de projet : Google / Web Application Project,
  • une vue : Google / Development Mode,
  • une configuration au niveau du workspace, pour spécifier la localisation du ou des SDK(s),
  • une configuration au niveau du projet, pour choisir le SDK et préciser l'id et la version de l'application,
  • des actions accessibles par le menu contextuel, en particulier pour déployer l'application,
  • une action d'exécution "Run As / Web Application".
Création du projet
Une fois le plugin installé, il faut créer un Google / Web Application Project et spécifier la localisation du SDK qu'Eclipse utilisera.

Le projet ressemble à un classique Dynamic Web Project, à ceci prêt que le répertoire war remplace WebContent et qu'une servlet d'exemple est créée. On remarque quelques fichiers supplémentaires :
  • src/log4j.properties pour les traces de DataNucleus via Log4J
  • src/META-INF/jdoconfig.xml pour la persistance JDO
  • war/WEB-INF/logging.properties pour les traces de DataNucleus via java.util.logging
  • war/WEB-INF/appengine-web.xml pour la configuration de l'application
L'application a aussi quelques librairies jar pour les API App Engine, JDO, JPA et JTA, ainsi que pour la persistance par DataNucleus.
Configuration de l'application
Avant de pouvoir déployer l'application, il faut renseigner l'identifiant et la version de notre application. Ceci peut se faire de façon standard dans le fichier appengine-web.xml ou dans la configuration du projet ; les informations sont synchronisées.
Lancement de l'application
Avant de déployer, il faut aussi pouvoir tester l'application. Je ne parle pas encore de tests unitaires automatisés, mais juste de pouvoir exécuter localement l'application et d'afficher les pages dans mon navigateur.
Il faut pour cela exécuter le projet "Run As / Web Application", qui lance le serveur localement sur le port 8888. L'accès aux pages se fait donc par l'URL http://localhost:8888/.
Le port du serveur local peut être modifié dans les "Run Configurations".
Déploiement
Enfin, nous pouvons déployer notre application, ou plutôt la dernière version de l'application, sur le serveur App Engine. On peut utiliser le menu contextuel ou la barre d'outils "Deploy App Engine Project".

Intégration avec Netbeans

Pour travailler avec Netbeans, j'ai installé Netbeans 6.8, avec les dernières mises à jour, et j'ai utilisé le plug-in fourni dans Kenai. On verra dans l'avenir proche s'il reste sur Kenai ou s'il doit migrer vers java.net. Quelques indices sont peu encourageants sur la vie du projet : les dernières mises à jour datent de 4 mois et la version 1.3 du SDK n'est pas encore officiellement supportée.
Installation du plug-in
L'installation se passe en douceur : j'ai installé les modules Google à partir de l'URL indiquée. J'ai ensuite configuré mon environnement en indiquant à Netbeans la localisation du SDK, via le menu "Tools / Servers".
Le plugin demande le port du serveur local lors de son ajout. En revanche, je n'ai pas trouvé comment changer ce port dans Netbeans. La seule solution que j'ai trouvée a été de modifier la valeur du port dans le fichier .netbeans/6.8/config/J2EE/InstalledServers/.nbattrs.
Création du projet
Apparement, il n'y a pas de template de projet spécifique à App Engine. Je démarre donc avec un classique "Java Web / Web Application". En fait, à partir du moment où on choisit Google App Engine comme serveur, le plugin inclut les librairies et crée un fichier appengine-web.xml minimal.
Lancement de l'application
Pour lancer l'application, un Run classique fonctionne parfaitement. Il lance le serveur local puis, selon la configuration du projet, ouvre la page d'accueil dans un navigateur.
On peut aussi démarrer le serveur depuis l'onglet Services.
Déploiement
Le déploiement se fait par le menu contextuel "Deploy to Google App Engine".

Intégration avec IDEA

Là, je m'avance un peu car je n'ai pas de licence IDEA. CE sera pour plus tard, si tout va bien.

Intégration avec Ant

Le SDK fournit un ensemble de tâches Ant dans le fichier config/user/ant-macros.xml. On y trouve en particulier les tâches suivantes :
  • dev_appserver pour démarrer le serveur local
  • appcfgpour déployer l'application
La documentation sur l'utilisation de Ant avec App Engine me semble pas mal, avec un exemple complet.

Intégration avec Maven

Le support de Maven n'est pas natif dans le SDK. D'ailleurs, les premières expériences d'association entre les Maven et GAE semblent assez négatifs. Depuis cette expérience, les choses semblent évoluer, avec l'apparition d'un plugin indépendant. En fouinant sur le Web, on peut aussi trouver des références à un gae-archetype ou à des procédures manuelles.
Bref, la situation n'est pas très claire...

Conclusion

Comme j'ai envie de bien organiser mon projet, je suis assez motivé par l'utilisation de Maven, mais au vu de la situation actuelle, j'ai l'impression qu'il y a du travail. Je vais donc me dépêcher d'attendre.
Donc, dans l'étape d'investigation et de prototypage, je vais me contenter d'un IDE avec son plugin. Pour l'instant, je n'ai pas vu de différence flagrante entre Eclipse et Netbeans ; il faudra que j'approfondisse, en comparant le support des fonctionnalités avancées, comme la persistance. Mon choix initial sera juste celui de l'outil que j'ai l'habitude d'utiliser et qui bénéficie du support direct de Google : je vais donc commencer avec Eclipse, et je me reposerai la question plus tard.