Nashorn : exécuter du JavaScript sur une JVM
En combinant des codes Java et JavaScript

Le , par vermine, Responsable Jeux-Concours
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 : Sélectionner tout
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 : Sélectionner tout
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.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de youtpout978 youtpout978 - Membre expert https://www.developpez.com
le 21/12/2015 à 12:24
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.
Avatar de heid heid - Membre confirmé https://www.developpez.com
le 21/12/2015 à 13:30
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.
Avatar de Zefling Zefling - Membre expert https://www.developpez.com
le 21/12/2015 à 13:36
On utilise parfois une lib JS, comme celle de compilation du LESS. C'est dans ce genre de cas que Rhino ou Nashorn servent.
Avatar de CoderInTheDark CoderInTheDark - Membre éprouvé https://www.developpez.com
le 22/12/2015 à 18:40
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 ?

 
Contacter le responsable de la rubrique JavaScript