BT

Nouveau Early adopter ou innovator ? InfoQ a travaillé sur de nouvelles fonctionnalités pour vous. En savoir plus

Java EE 7 apporte des améliorations à l'Expression Language

| par Dan Woods Suivre 0 Abonnés , traduit par Gérald Quintana  Abonnés le 18 oct. 2013. Durée de lecture estimée: 3 minutes |

Dans l'arsenal des améliorations incluses dans Java EE 7, il y a une refonte de l'Expression Language Java appelée Expression Language 3. Spécifiée dans la JSR-341, cette collection d'améliorations à l'API EL inclut le support des expressions lambda, l'accès aux champs et méthodes statiques, mais aussi des améliorations pour le traitement des collections et un mode d'utilisation autonome.

Avant Java EE, l'Expression Language Java était un composant fortement couplé aux API JavaServer Faces et JavaServer Pages. La JSR-341 introduit une Expression Language Java en tant qu'entité distincte, découplée (mais néanmoins intéropérable) des API de la couche présentation de Java EE.

L'API offre à présent aux développeurs la possibilité d'invoquer l'EL Java directement. La création d'une instance de la toute nouvelle classe ELProcessor et l'invocation de sa méthode eval avec une chaîne de caractères qui représente le script à évaluer retourneront un résultat qui pourra être utilisé dans une variable de l'application Java elle-même.

ELProcessor el = new ELProcessor();
assert ((Integer)el.eval("a = [1, 2, 3]; a[1]")) == 2;

En plus de ce mode autonome, la JSR-341 apporte aux développeurs JavaEE la possibilité d'écrire des expressions lambda. Les expressions lambda sont prévues pour l'édition standard de Java qui arrivera l'année prochaine avec Java 8, mais dès à présent, les développeurs peuvent utiliser les lambdas dans leurs expressions EL. Lors de la conférence JavaOne de l'année dernière, le chef de la spécification JSR-348 Kin-man Chung a précisé que le groupe d'experts avait grandement consulté les développeurs du projet Lambda de Java 8 pour s'assurer que l'API était commune et que l'interopérabilité entre Java EL et Java 8 serait possible.

ELProcessor el = new ELProcessor();
assert ((Integer)(el.eval("((x,y) -> x+y)(4, 5)"))) == 9;

Pour travailler avec les collections, la nouvelle API de flux Java EL inclut des opérateurs tels que forEach, reduce, filter, et map. La plupart des fonctionnalités et des concepts introduits dans le traitement des collections Java EL seront aussi intégrées dans la version 8 de Java. Dès maintenant, avec cette JSR-341, les développeurs peuvent déjà tirer partie des flux traités à la demande (lazy streams) ou bien immédiatement (eager streams), en s'appuyant sur les expressions Lambda.

ELProcessor el = new ELProcessor();
List list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
    list.add(i);
}
el.defineBean("list", list);
List processedList = (List)el.eval("list.stream().filter( x -> x <= 3).map(x -> x * 5).toList()");
assert processedList.get(0) == list.get(0);
assert processedList.get(1) == list.get(5);
assert processedList.get(2) == list.get(10);
assert processedList.get(3) == list.get(15);

Par ailleurs, une amélioration du Java EL très attendue fait partie de cette JSR-341, les développeurs pourront dorénavant accéder directement aux champs et aux méthodes statiques. Toutes les classes du paquetage java.lang.* sont pré-importées par défaut dans tous les scripts. Quant aux autres classes, les développeurs EL pourront y accéder à condition de les avoir importées dans le contexte EL au moyen de l'ELManager fourni par l'instance d'ELProcessor.

ELProcessor el = new ELProcessor();
el.getELManager().importStatic("com.company.Class.STATIC_FIELD");
assert (el.eval("Math.random()") instanceof Double);
System.out.println(el.eval("STATIC_FIELD"));

Ces améliorations de l'Expression Language Java qui constituent la JSR-341 devraient se révéler d'une aide précieuse pour les développements JSP et JSF, mais aussi pour une utilisation dans un mode autonome.

Evaluer cet article

Pertinence
Style

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Donnez-nous votre avis

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet
Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Discuter

Se connecter à InfoQ pour interagir sur ce qui vous importe le plus.


Récupérer votre mot de passe

Follow

Suivre vos sujets et éditeurs favoris

Bref aperçu des points saillants de l'industrie et sur le site.

Like

More signal, less noise

Créez votre propre flux en choisissant les sujets que vous souhaitez lire et les éditeurs dont vous désirez suivre les nouvelles.

Notifications

Restez à jour

Paramétrez vos notifications et ne ratez pas le contenu qui vous importe

BT