2009-09-24 6 views
13

Ich habe gelesen über Rhino als eine nützliche Möglichkeit, JavaScript in meinem Java-Code zu implementieren.Vorteile der Verwendung von Rhino (Mozilla Nashorn)

Nach dem Lesen für eine Weile, Suche in Google und hier, ich konnte keinen wirklichen Grund finden, für die ich JavaScript innerhalb von Java verwenden würde.

Könnten Sie auf einige reale Vorteile hinweisen, die Sie bei der Verwendung von Rhino für eine normale Java-Anwendung feststellen?

+0

Zusätzlich zu dem, was andere sagten, ist die Entwicklung von Spielen ein großartiges Beispiel. Externe Skripts zu verwenden, ist in der Spieleentwicklung aus verschiedenen Gründen sehr üblich. Wenn Sie ein Spiel in Java schreiben und JavaScript als Skriptsprache verwenden möchten, ist Rhino großartig. – Josh1billion

Antwort

10
  1. Verarbeitung von XML mit Rhino und E4X ist eine Freude für die meisten der APIs Java XML im Vergleich
  2. Sie JavaScript bestehenden haben, dass „einfach funktioniert“, und Sie wollen nicht, um es neu zu schreiben. Dies kann passieren, wenn Sie eine Berechnung oder Verarbeitung auf der Clientseite durchführen und diese auf den Server verschieben.
  3. Alle Arten von netten Caching und Code-Lade-Tricks.
  4. Ihr Problem wird besser durch eine dynamischere Sprache als Java gelöst.
  5. Liste Comprehensions;)
+1

Sie haben Recht. Ich würde Jython anstelle von JavaScript verwenden, um die meisten der von Ihnen angegebenen Punkte zu erfassen. Aber dein wahrscheinlich ein Java-Typ würde nicht. – Santi

5

Der Vorteil der Einbettung einer Skriptsprache wie Javascript in Ihre Software besteht darin, dass Sie anderen eine Möglichkeit bieten können, Plugins für Ihre Software zu schreiben, ohne den Quellcode wegzugeben.

Ein Grund, die ganze App in einer anderen Sprache zu schreiben, ist, dass Sie eine App für eine Firma schreiben können, die sie in ihrer Java EE Umgebung implementiert, ohne Java lernen zu müssen.

+1

Damit andere in Ihre App eingesteckt werden können, ohne den Quellcode anzugeben, benötigen Sie lediglich ein Paket mit einigen Schnittstellen. –

+0

IBM Maximo 7.5 + tut dies (Rhino oder Jython), und der zusätzliche Vorteil ist, dass Sie die Anpassung ihrer Software vermeiden, was Upgrades glatter macht. – Bratch

14

Beachten Sie, dass sich die Skript-API seit Java 6 in der Standard-Java-Bibliothek befindet - siehe die Dokumentation des Pakets javax.script. Die API in javax.script ist eine angepasste Version von Rhino. Die Skript-API unterstützt nicht nur JavaScript, sondern auch viele andere Skriptsprachen.

Siehe Java Scripting Programmer's Guide

Die Titelseite gibt es einige Gründe erwähnt, möchten Sie vielleicht Scripting verwenden:

  • Anwendung Erweiterung/Anpassung: Sie können „externalisieren“ Teile der Anwendung - wie Konfigurationsskripten, Geschäftslogik/Regeln und mathematische Ausdrücke für Finanzanwendungen.
  • "Kommandozeile" Shells für Anwendungen -für Debugging, Runtime/Deployment-Zeit-Konfiguration usw. Die meisten Anwendungen haben ein web-basiertes GUI-Konfigurationstool in diesen Tagen. Systemadministratoren bevorzugen jedoch häufig Befehlszeilenprogramme. Anstatt zu diesem Zweck eine Ad-hoc-Skriptsprache zu erfinden, kann eine "Standard" -Skriptsprache verwendet werden.

Ein Beispiel: Sie können Skript Oracle Weblogic Python-Skripte verwenden, zum Beispiel Anwendungsserver-Domäne konfigurieren, starten oder den Server zu stoppen und andere Verwaltungsaufgaben zu tun.

+0

Was sind diese anderen Sprachen? –

+1

@WesleiPrudencio siehe http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages ​​ – Jesper

4

Wir verwenden JS (über Rhino) für einen DSL in einem unserer Produkte. Es ist kein großartiges DSL, aber das ist ein Fehler der Verwendung von JS anstelle von Rhino.

+0

Ich bin kurz und gut, aber mir ist nicht klar, was DSL in diesem Zusammenhang bedeutet. Würdest du mich aufklären? – WynandB

+1

DSL = Domänenspezifische Sprache. Im Grunde benötigten wir eine Sprache, die es den Menschen erlaubte, Regeln auszudrücken. Javascript ist gut, weil es einfach ist, festzulegen, was der Benutzer tun kann und was nicht, indem er angibt, was im globalen Kontext ist. Keine enthält erforderlich. – user1545858

0

Wenn Sie darüber nachdenken, auch .Net, schlägt ich vor, mit Rhino auszukommen.

Neben Java-Umgebungen ist Rhino einer der besten Performance-Interpreter in .NET-Umgebung (mit IKVM). Auf der anderen Seite ist Nashorn bei .net sehr langsam.

Die Portierung eines eigenen Rhino-Projekts nach .NET ist nicht so schwierig.