Developpez.com - Rubrique JavaScript

Le Club des Développeurs et IT Pro

Nashorn : exécuter du JavaScript sur une JVM

En combinant des codes Java et JavaScript

Le 2015-12-21 10:18:32, par vermine, Expert éminent sénior
Nashorn est un environnement d'exécution JavaScript de haute performance écrit en Java pour la JVM (Java Virtual Machine).

Le projet a été mis en place à l'origine par Oracle qui l'a ensuite ouvert à la communauté via OpenJDK.

Il permet aux développeurs d'intégrer le code JavaScript à l'intérieur de leurs applications Java et même d'utiliser les classes et méthodes Java à partir de leur code JavaScript. Il peut être conçu comme un substitut au moteur JavaScript V8 de Google. C'est un successeur de l'environnement d'exécution Rhino qui était fourni avec les versions antérieures du JDK. Nashorn est écrit à partir de zéro en utilisant les nouvelles fonctionnalités du langage comme JSR 292 (Supporting Dynamically Typed Languages) et invokedynamic.

Actuellement, Nashorn supporte la spécification ECMAScript 5.1 et le support de ECMAScript 6 est bien entendu en cours.

Voici un exemple qui utilise la classe Java HashMap en ligne de commande avec l'outil jjs :

Code javascript :
1
2
3
4
5
6
7
jjs> var HashMap = Java.type("java.util.HashMap") 
jjs> var userAndAge = new HashMap() 
jjs> userAndAge.put("shekhar",32) 
null 
jjs> userAndAge.put("rahul",33) 
null 
jjs> userAndAge.get("shekhar")

Vous pouvez donc utiliser notamment :

  • des classes ;
  • des méthodes statiques ;
  • des bibliothèques JavaScript externes ;
  • des scripts personnalisés en utilisant les caractéristiques d'un shell Unix ;
  • les nouveautés de Java 8 ;
  • etc.


Vous pouvez également utiliser Nashorn dans du code Java :

Code java :
1
2
3
4
5
6
public static void main(String[] args) throws ScriptException { 
    ScriptEngineManager manager = new ScriptEngineManager(); 
    ScriptEngine nashorn = manager.getEngineByName("nashorn"); 
    Integer eval = (Integer) nashorn.eval("10 + 20"); 
    System.out.println(eval); 
}

Pour plus de détails, n'hésitez pas à lire ce tutoriel sur GitHub.

Le blog officiel.

Et vous ?

Que pensez-vous de ce projet ?
Connaissez-vous des outils similaires ?

Découvrez également les cours et tutoriels Java de Developpez.com ainsi que ceux sur le JavaScript.
  Discussion forum
4 commentaires
  • youtpout978
    Expert confirmé
    Je pense que si les devs ont l'occasion d'utiliser Java ou JS ils préféreront utiliser Java , je pense que l'utilité sera surtout la réutilisation de code JS ou pour un dev faisant principalement du JS mais au-delà de ça je vois pas pourquoi un dev se tournera vers cette solution, j'espère que ça ne sera pas pousser par les décideurs pour être dans le hype.
  • heid
    Membre confirmé
    Ca permet par exemple d'ouvrir a des tiers via des script JS (plus grand public qu'un jar a livrer) des opération sur des données. Par exemple permettre à des personnes d'aller personnaliser des contrôles métier avant une opération lambda sur un bean.
  • Zefling
    Expert confirmé
    On utilise parfois une lib JS, comme celle de compilation du LESS. C'est dans ce genre de cas que Rhino ou Nashorn servent.
  • CoderInTheDark
    Membre émérite
    Peut on l'utiliser pour ajouter un outil de scripts à son application ? Comme on ferait du VBA...

    Dans ce cas là comment limiter le périmètre des classes disponibles aux utilisateurs ?