Wo wird die Java-Scripting-Engine verwendet? [geschlossen]

8

Wie nutze ich die "Scripting Engine" in Java?

Was sind die richtigen Anwendungsfälle für die Verwendung der Skript-Engine?

Gibt es ein Open-Source-Projekt mit "Scripting Engine"?

Eine Sache kommt mir in den Sinn ist "Closure, funktionale Programmierung" Unterstützung ist möglich, aber es ist mehr von technischer Nutzung als "Application Requirement".

Konfigurierbare Plugins sind in Ordnung. Aber immer noch so viele Muster (Besucher, Dekorateur) auf hohem Niveau können das gleiche tun.

Ich kenne die Anforderung nicht gut ... wie effektiv könnte sie in Java-EE-Mustern verwendet werden ... wo sie die vorhandenen Muster ergänzen könnte.

Außerdem würde ich gerne mehr Antworten mit einigen Geschäftsanwendungen sehen. Vielleicht einen komplexen Rabatt für ein Produkt während des Verkaufs basierend auf Mitgliedschaft oder Standort zu finden. Ranking für einen komplexen Algorithmus finden. Vor allem warum nicht Java in irgendeinem Szenario? (oder C # in .NET-Welt)

    
Mohan Narayanaswamy 19.06.2009, 02:39
quelle

4 Antworten

12

In Java 6 ist die Unterstützung für Skripting-Engines integriert. Beispiel:

%Vor%

Warum würdest du eins benutzen? Einige Gründe:

  1. Sie haben eine Bibliothek in einer Skriptsprache, die Sie in Java verwenden möchten (z. B. eine Python-Bibliothek, die Sie über Jython ausführen könnten)
  2. Sie möchten den Kunden einen konfigurierbaren Programmiermechanismus bereitstellen, damit sie kurze Code-Snippets bereitstellen können. Zum Beispiel habe ich dies in der Vergangenheit getan, so dass Kunden Filter mit JavaScript schreiben können (z. B. x & lt; 2 und y & gt; 5 und z & gt; 10?).
  3. Sie können komplexere Logik in Tools wie Ant implementieren, indem Sie direkt in der Konfigurationsdatei
  4. scripten
  5. Sie können Lösungen in einer Sprache implementieren, die für diese Domäne besser geeignet ist (z. B. mit lambdas über Clojure), aber sich auf die JVM verlassen.

Implementierungen umfassen Rhino (eine Java-Implementierung von Javascript), Jython (ein Java Python) und viele mehr.

    
Brian Agnew 19.06.2009, 09:54
quelle
9

Hier sind einige Fälle, wo ich es benutzt habe.

1) Java möchte die Skriptsprache, Beispiel 1, aufrufen. Ich habe eine Java-App, die Benutzerkommentare über das WMD-JavaScript-Widget akzeptiert. (Dasselbe Widget, das auch StackOverflow verwendet.) Der Benutzer gibt Kommentare in das Markdown-Format ein und eine JavaScript-Bibliothek namens Showdown konvertiert sie an zwei Stellen in HTML: (1) auf dem Client, um Echtzeit-Vorschau zu unterstützen; und (2) auf dem Server, da ich möchte, dass der Client reines Markdown an den Server sendet und dort speichert, damit der Benutzer das Markdown später bearbeiten kann (anstatt das HTML irgendwie in Markdown umzukehren). Wenn ich den Kommentar auf dem Server speichere, führe ich auch die Konvertierung dort aus, und ich speichere den HTML-Code neben dem Markdown, damit ich den Markdown beim Anzeigen von Kommentarlisten nicht dynamisch konvertieren muss. Um sicherzustellen, dass der HTML-Code auf dem Server mit dem HTML-Code auf dem Client übereinstimmt, möchte ich dieselbe Showdown-Bibliothek verwenden. Also führe ich Showdown serverseitig innerhalb der Rhino JavaScript Engine.

2) Java möchte Skriptsprache aufrufen, Beispiel 2. Ich arbeite an einer Anwendung zur Anwendungsimplementierung, an der Stakeholder in verschiedenen Rollen beteiligt sind, z. B. Entwickler, Sysadmins und Release-Ingenieure. Die gesamte App (Workflow und UI) ist eine Java-App, ruft aber an verschiedenen Stellen verschiedene Skripte (zB Ruby, Bash) auf, um zB Pakete zu pushen, Konfiguration zu überprüfen, Pakete zu installieren, Rauchtests durchzuführen ist besser / ökonomischer für das Ausdrücken von Verzeichniserstellung, Kopieren, Verschieben, Erstellen, usw., und teilweise, weil die Leute, die dieses bestimmte Stück des Kuchens besitzen, wissen, wie man mit Skriptsprachen, aber nicht mit Java arbeitet. Daher rufen wir hier Scripts auf, die die Scripting-API von Java verwenden. Zugegeben, in diesem Fall könnten wir die Skripte nur außerhalb von Java ausführen, aber siehe unten # 3.

3) Die Skriptsprache möchte Java aufrufen. In der oben genannten Bereitstellungsanwendung haben wir webbasierte Bereitstellungsprotokolle und wir haben uns viel Mühe gegeben, die Bereitstellungsprotokolle so einfach zu lesen und zu machen Verstehen Sie dies so gut wie möglich, da eine große Entwickler- / SQA- / Release-Techniker-Population die Protokolle konsumiert und nicht jeder versteht, was genau mit einer Bereitstellung geschieht. Pretty-Printing und Farbcodierung sind Teil des Ansatzes. Wir haben eine API für die Implementierung von Pretty-Printing-Deployment-Logs in Java implementiert, aber wir möchten, dass die Skripts das aufrufen können. Wenn beispielsweise das Ruby-Push-Skript ausgeführt wird, möchten wir, dass es seinen Fortschritt im Pretty-Drucker protokolliert. Wenn Ruby in JRuby ausgeführt wird, kann das Ruby-Skript die Java-Pretty-Printer-API sehen.

    
Willie Wheeler 29.03.2011 17:53
quelle
1

"Was sind die richtigen Anwendungsfälle für die Verwendung der Skript-Engine?" Das ist eine ziemlich vage Frage. Es gibt viele Anwendungsfälle. Hier sind nur einige, an die ich sofort denken kann:

  1. Plugin / Erweiterungssystem
  2. IDE
  3. Programmieranleitung mit Live-Demos

Ich gehe davon aus, dass Sie sich besonders auf JSR 223 beziehen. Wenn ja, sollten Sie sich scripting.dev.java.net

ansehen     
Matthew Flaschen 19.06.2009 02:46
quelle
1

Ich habe JavaScript nicht speziell verwendet, aber ich habe Groovy in mein Anwendungsframework integriert, um eine domänenspezifische Sprache (DSL) bereitzustellen. Ich habe Funktionen und Klassen erstellt, die sich in meine Anwendung einklinken.

Der Benutzer darf Skripte für allgemeine Operationen innerhalb der Anwendung (Makros) erstellen und eine leichte Verarbeitung implementieren, um die viel schwerere Code-Compiler-Jar-Deployment-Lösung zu vermeiden. Wenn der Benutzer eine Idee für ein Plugin zu meinem Verarbeitungsframework hat, kann er über Groovy in Echtzeit prototypieren und zurück zu Java (vielleicht sogar nativ) bewegen, wenn es Zeit gibt (oder wenn Geschwindigkeit benötigt wird). Beachten Sie, dass Scripting in der Regel um Größenordnungen langsamer ist als Java / C # / C / C ++

    
basszero 19.06.2009 11:47
quelle

Tags und Links