18 septembre 2009

premiers pas avec GWT 2.0

Le plugin gwt-maven-plugin est disponible en version 1.2-SNAPSHOT avec un aperçu du support GWT 2.0. Les fonctionnalités ne sont pas forcément sans bugs et probablement encore incomplètes, mais les nouvelles options du compilateur sont déjà proposées.

La mise en oeuvre nécessite de récupérer le SDK (prendre par exemple les builds proposés par SFEIR). Configurer ensuite le plugin en affectant le paramètre gwtHome, pour le forcer à utiliser cette version, alors que par défaut il s'adapte à vos dépendances.

Vous avez alors accès à tout plein de nouvelles fonctionnalités, comme par exemple le draftCompile pour accélérer votre intégration continue, ou le rapport SOYC pour analyser la traduction de votre code Java en JavaScript et ses points noirs.

Pas de date prévue pour la finalisation de cette version 1.2, mais je vais essayer de coller à l'actualité de GWT 2.0.

14 septembre 2009

Hibernate est un sacré comique

Alerté par Julien, je fais un peu joujou avec les annotations @OneToOne et Hiernate.
Voici grosso modo ce que je manipule :


@OneToOne( fetch = FetchType.LAZY )
private Foo precedent;

@OneToOne( mappedBy = "precedent", fetch = FetchType.LAZY )
private Foo suivant;
Et là, dès que je charge une instance, j'ai autant de select qui partent en base que j'ai d'éléments dans ma chaîne suivant-précédent...

Le piège, c'est que malgré le LAZY, hibernate veut identifier si la relation OneToOne inverse (mappedBy) est renseignée ou non. En fonction de la réponse il colle un proxy ou null.

La solution, bien que pas très esthétique dans le code est simple : utiliser des OneToMany et se baser sur des collections de 1 élément :


@OneToMany( fetch = FetchType.LAZY )
private Set<Foo> suivants = new HashSet<>();

public Foo getSuivant()
{
Iterator<Foo> it = suivants.iterator();
return it.hasNext() ? it.next() : null;
}

public void setSuivant( Foo suivant )
{
for ( Foo item : suivants )
{
item.setPrecedent( null );
}
this.suivants.clear();

suivant.setPrecedent( this );
suivants.add( suivant );
}


Ca sent la grosse magouille, mais au moins ça ne casse pas la logique des get/set. Comme quoi la persistance "transparente" c'est pas encore tout à fait ça ;)

BreizhJUG - saison 2

Après deux mois de repos (?) pendant l'été, le BreizhJug repart sur les chapeaux de roue avec trois speackers pour une session spéciale "Spring ecosystem".

Comme toujours, je prépare la session au dernier moment. Je n'échapperais donc pas au gros coup de stress en me rendant compte que j'ai une fois de plus oublié un truc.

Histoire de se détendre, aujourd'hui c'est livraison au boulot, avec toute la ruche (pardon, l'openspace) attentive au moindre bug qui trainerait sous un tapis - disons que si on arrive au moins à faire passer tous nos tests jUnit ce serait un bon début.

Rendez-vous ce soir :)