Struts 2.1, toujours plus de « Convention »

Publié le Mis à jour le

La version 2.1 du framework Struts est sortie dernièrement. Après la refonte complète opérée pour la version 2, cette mise à jour pourtant mineure apporte des améliorations importantes et révélatrices de l’évolution actuelle des frameworks Java.

Convention

Le but ici n’est pas de faire une revue exhaustive de ces améliorations, mais de regarder un peu plus en détail l’évolution qui me semble la plus marquante : le nouveau plugin Convention. Il reprend les idées des anciens plugins CodeBehind et [Zero-Conf->http://struts.apache.org/2.0.14/docs/zero-configuration.html], dans une version plus complète et plus optimisée.

Le principe est d’opérer une configuration non pas basée sur des fichiers XML, mais définie par de simples conventions de nommage.

En pratique

Voici un rapide exemple pour illustrer ce principe de fonctionnement.
Le plugin Convention va automatiquement rechercher dans les classes disponibles, celles qui correspondent à des Action. Pour cela, il va se baser sur les noms des classes, des packages ou sur les interfaces que les classes implémentent. Par exemple, toutes les classes suivantes vont être automatiquement trouvées et utilisées comme des Actions :
com.example.actions.MainAction
com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)
com.example.struts.company.details.ShowCompanyDetailsAction
De la même manière, le plugin va leur associer automatiquement des urls :

com.example.actions.MainAction -> /main
com.example.actions.products.Display -> /products/display
com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details/show-company-details
Bien entendu, il est possible de surcharger les conventions utilisées par défaut. Un point intéressant est que la surcharge peut se faire directement par des annotations (donc dans la classe elle-même), sans passer par des fichiers de configuration extérieurs. Voici un exemple :

package com.example.actions;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;

public class HelloWorld extends ActionSupport @Action(« /different/url »)
public String execute() {
return SUCCESS;

}

Grâce à une simple annotation, l’action HelloWorld sera associée automatiquement à l’url /different/url.

L’intérêt pour les développeurs est évident. Il permet de gagner un temps considérable en s’épargnant la configuration par fichier XML parfois rebutante et sujette à erreur.

Perspectives

Ce type d’évolution est révélatrice de la direction que prennent les frameworks Java à l’heure actuelle. Ils cherchent à simplifier le travail des développeurs et essayent de combler le retard qu’ils ont à ce niveau par rapport à leurs équivalents d’autres langages (Symfony, Ruby on Rails,…).

Il est assez amusant d’ailleurs de remarquer que pendant que les frameworks java se simplifient, leurs « concurrents » comme symfony deviennent plus complexes. Ces derniers reposent sur une utilisation de plus en plus poussée du modèle objet pour des fonctionnalités auparavant réalisées de manière procédurale (ex : sfForms). Si cela apporte des bénéfices en terme de robustesse et maintenabilité, la courbe d’apprentissage en prend un sérieux coup…

Si ces mouvements continuent, il viendra peut-être un jour où les développeurs Java se moqueront de PHP pour sa complexité… Espérons que d’ici là, chacun arrivera à un juste milieu !


  • Framework

  • Java, JEE

  • Struts