NooCodeCommit

Le petit monde de Play Framework et de Go

Welcome Hugo!

Changement de moteur de blog

Et voilà, noocodecommit.com à abandonné wordpress pour passer à Hugo

Written By
nicogiard

Clever-Cloud, un acteur français du cloud

Il y’a quelque temps, j’ai écris un article sur le déploiement d’une application Play Framework sur Heroku. Aujourd’hui j’aimerai vous présenter un acteur français, Clever Cloud, qui se positionne sur le même créneau, la plateforme “Cloud”, de type “PaaS” (Platform as a Service)proposant la possibilité de déployer vos applications (Play 1.2.x et Play 2, mais aussi Java + Maven, PHP, Node.js et bientôt Ruby) avec une base de données MySQL ou PostgreSQL associées.

Written By
nicogiard

Erreur de Transaction SQL lors d'un test Fonctionnel avec Play!>

Je viens d’être confronté à un problème lors de l’exécution des tests Fonctionnels d’une application Play!> avec la base de données MySQL (alors qu’avec H2 le problème n’apparaît pas). Sur un projet Play!> 1.2.5 avec MySQL (InnoDB), j’ai souhaité réaliser un test fonctionnel, pourtant très simple (un model User, un controller et une classe de test du controller), et pourtant j’ai été confronté à l’erreur suivante : A java.lang.RuntimeException has been caught, java.util.concurrent.ExecutionException: play.exceptions.JavaExecutionException: Try to read id on null object models.User (controllers.Application.index, line 11) Visiblement, lors de l’exécution du tests fonctionnel, la couche Controller ne semblait pas trouver de résultat, alors que la couche de test en trouvait… Je vais essayer de vous montrer ici mon analyse du problème et une solution pour le contourner.

Written By
nicogiard

Votre application Play!> au démarrage de votre serveur Ubuntu

Je vous présente aujoud’hui un petit script bash que j’utilise pour lancer mes applications Play!> au démarrage de mon serveur Ubuntu. En effet, quoi de plus pénible qu’une application Play!> qui ne se relance pas en cas de restart d’un serveur. Voilà donc le script shell que j’utilise sur mon serveur Ubuntu : ex : /etc/init.d/play-monapplication #!/bin/sh # Path to play install folder PLAY_HOME=/opt/play/play-1.2.5 PLAY=$PLAY_HOME/play # User running the Play process USER=playUser # Path to the application APPLICATION_PATH=/opt/monapplication case "$1" in start) echo -n "Starting Play service: " rm -f ${APPLICATION_PATH}/server.pid su $USER -c "${PLAY} start ${APPLICATION_PATH} --%prod >/dev/null" RETVAL=$?

Written By
nicogiard

Masquer l'icône "Préférences d'accès universel" du System Tray sous Ubuntu 12.04

Après une installation fraiche d’Ubuntu 12.04, je me retrouve avec cet icone dans le system tray : Après avoir pas mal cherché comment enlever cet icône (pas de clic droit / supprimer …) j’ai enfin trouvé comment faire! Voici la marche à suivre : Menu Système / “Paramètres Système” Cliquer sur le menu “Accès universel” Dans l’onglet “Saisie”, décocher l’option “Activer les fonctionnalités d’accéssibilité à partir du clavier” Et voilà l’icône a disparu.

Written By
nicogiard

Une mise en production en moins de 5 minutes....

Je ne sais pas vous, mais dans ma carrière, j’ai eu à mettre en production de nombreuses applications web. Actions qui pouvaient prendre beaucoup de temps en fonction du nombre d’intermédiaire ou de la procédure “sécurisé” de mise en production. Et bien quand j’ai eu l’occasion d’essayer la plateforme Heroku, j’ai tout simplement halluciné ! Heroku est une plateforme dite “Cloud”, de type “PaaS” (Platform as a Service). Elle vous offre la possibilité de déployer vos applications (Java Servlet, Rails, Node.js mais aussi Play!

Written By
nicogiard

Play! Framework Tips : Circular reference avec renderJSON

Imaginez le Diagramme UML suivant : Qui pourrait parfaitement représenter les Objets d’un Blog, mais pas que. Imaginez que vous souhaitiez réaliser un API, compatible REST, qui vous permette de récupérer vos Posts et Comments au format JSon. Nos Objets Métiers Commençons tout d’abord par écrire nos objets Model : app/models/Post.java package models; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.OneToMany; import play.data.validation.Required; import play.db.jpa.Model; @Entity public class Post extends Model { @Required public String author; @Required public String title; @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) public List<comment> comments; } app/models/Comment.java package models; import javax.persistence.Entity; import javax.persistence.Lob; import javax.persistence.ManyToOne; import play.data.validation.MaxSize; import play.data.validation.Required; import play.db.jpa.Model; @Entity public class Comment extends Model { @Required public String author; @Lob @Required @MaxSize(10000) public String content; @ManyToOne @Required public Post post; } Données de référence & Configuration Pour nous simplifier la vie, Play!

Written By
nicogiard

Play! Framework Tips : un renderArgs.put dans un @After sert t'il à quelque chose

Considérons le contrôleur suivant : app/controllers/Application.java package controllers; import play.mvc.After; import play.mvc.Before; import play.mvc.Controller; public class Application extends Controller { @Before static void before() { System.out.println("before"); renderArgs.put("nom", "Michel"); } @After static void after() { System.out.println("after"); renderArgs.put("nom", "Serge"); } public static void index() { System.out.println("index"); redirect(); } public static void redirect() { System.out.println("redirect"); renderArgs.put("nom", "Robert"); render(); } } Ainsi que le template associé : app/views/Application/redirect.html #{extends 'main.html' /} #{set title:'Home' /} ${nom} Lequel des trois prénoms suivants, Michel, Serge et Robert, va t’il s’afficher dans votre navigateur à l’adresse http://localhost:9000 ?

Written By
nicogiard

Play! Framework Tips : Attention au Controller nommé "Tags"

Imaginez que vous ayez un objet Model Tag, et que vous souhaitiez avoir un contrôleur dédié à la gestion de ces objets. Vous le nommeriez tout naturellement controllers.Tags. Ce qui implique que vous ayez un répertoire app/view/Tags pour vos templates. Ensuite imaginez que vous ayez besoin pour vos templates de créer des tags Play! personnalisés. Le framework s’attend à les avoir dans un répertoire nommé app/view/tags. Vous commencez à voir où il pourrait y avoir un problème ?

Written By
nicogiard

Archives