2009-06-19 11 views
8

Java内で「スクリプトエンジン」を効果的に使用するにはどうすればよいですか?Javaスクリプトエンジンはどこにありますか?

スクリプトエンジンを使用するための適切なケースは何ですか?

「Scripting Engine」を使用しているオープンソースプロジェクトはありますか?

「閉鎖、機能プログラミング」のサポートは可能ですが、「アプリケーション要件」よりも技術的な使用が多いです。

設定可能なプラグインは問題ありません。しかし、それでも多くのパターン(訪問者、デコレータ)が同じことをすることができます。

私は要件をよく知らない... Java EEパターンでどの程度効果的に使用できるのか...既存のパターンを補うことができる。

また、私はいくつかのビジネス用例についてもっとお答えしたいと思います。おそらく、メンバーシップや場所に基づいて販売中の製品の複雑な割引を見つけるのが好きかもしれません。複雑なアルゴリズムのランキングを見つける。特にJavaのないシナリオがあるのはなぜですか? (.NETの世界ではC#)

答えて

12

を見なければならない、スクリプトエンジンのサポートが組み込まれています。例えば、

// Create a script engine manager 
    ScriptEngineManager factory = new ScriptEngineManager(); 

    // Create a JavaScript engine 
    ScriptEngine engine = factory.getEngineByName("JavaScript"); 

    // Evaluate JavaScript code from String 
    engine.eval("print('Hello, World')"); 

なぜあなたはいずれかを使用するのでしょうか?いくつかの理由:

  1. はあなたがJavaで使用するスクリプト言語でライブラリを持っている(例えば、あなたがJythonを経由して実行することができますPythonライブラリ)
  2. あなたは顧客のために、設定可能なプログラミングメカニズムを提供したい
  3. 、短いコードスニペットを提供できるようにします。たとえば、私はこれまで、顧客がJavaScriptを使用してフィルタを作成できるようにしました(x < 2、y> 5、z> 10など)。
  4. 構成ファイルに直接スクリプトを記述することで、Antなどのツールでより複雑なロジックを実装することができます。
  5. 解決策は、そのドメインに適した言語で実装できますが(例えば、Clojureを使用してlambdaを使用)、JVM 。

実装には、Rhino(JavaのJavascript実装)、Jython(Java Python)などがあります。

+2

注:エンジンがJVMにバンドルされる保証はありません。アプリケーションの一部として自分自身を持っていく必要があります。 –

1

"スクリプトエンジンを使用するにはどうすればよいでしょうか?"これはかなり曖昧な質問です。多くのユースケースがあります。ここで私はすぐに考えることができますほんの数です:

  1. プラグイン/拡張システム
  2. IDE
  3. 私はあなたが特に JSR 223を参照していると仮定していますライブデモ

  • プログラミングチュートリアル。もしそうなら、あなたは、Java 6でscripting.dev.java.net

  • 1

    JavaScriptは特に使用しませんでしたが、ドメイン固有言語(DSL)を提供するためにアプリケーションフレームワークにGroovyを統合しました。私はアプリケーションにフックする関数とクラスを作成しました。

    ユーザーは、アプリケーション内の一般的な操作(マクロ)をスクリプト化するだけでなく、より重いコードコンパイラ - jar-deployソリューションを避けるために軽量処理を実装することもできます。ユーザーが自分の処理フレームワークへのプラグインのアイデアを持っている場合、リアルタイムでGroovyを介してプロトタイプを作成し、時間があるとき(または速度が必要なときに)Javaに戻ることができます。スクリプティングは通常、Java/C#/ C/C++よりも桁違いに遅いことを覚えておいてください。

    9

    ここで私が使ったことがあります。

    1)Javaはスクリプト言語(例1)を呼び出したいとします。 WMD JavaScriptウィジェットを使用してユーザーのコメントを受け入れるJavaアプリケーションがあります。 (StackOverflowが実際に使用するウィジェットと同じです。)ユーザーはMarkdown形式でコメントを入力し、ShowdownというJavaScriptライブラリはHTMLに変換します。これは、(1)クライアント上で、リアルタイムプレビューをサポートすること。 (2)サーバー上では、クライアントが純粋なMarkdownをサーバーに送信してそこに保存して、後でMarkdownにHTMLを戻す必要はなく、後でMarkdownを編集できるようにしたいからです。コメントをサーバーに保存するときには、私もそこで変換を実行し、HTMLをMarkdownと一緒に保存するので、コメントリストを表示するときにMarkdownを動的に変換する必要はありません。サーバー上のHTMLがクライアント上のHTMLと一致するように、まったく同じShowdownライブラリを使用したいと思います。だから私はRhinoのJavaScriptエンジンの中で、ショーダウンのサーバー側を走らせます。

    2)Javaはスクリプト言語(例2)を呼びたいと思っています。私は開発者、システム管理者、リリースエンジニアなどさまざまな役割を持つステークホルダーを含むデプロイメント自動化アプリケーションに取り組んでいます。アプリケーション全体(ワークフローとUI)はJavaアプリケーションですが、パッケージをプッシュする、設定を検証する、パッケージをインストールする、スモークテストするなど、さまざまなスクリプト(Ruby、bashなど)を呼び出します。これは、スクリプトディレクトリの作成、コピー、移動、wgettingなどを表現する上でより経済的ですが、その一部を所有する人々はJavaではなくスクリプト言語で作業する方法を知っているからです。そこで、ここではJavaのScripting APIを使用してスクリプトを呼び出します。確かにこのケースでは、Javaの外でスクリプトを実行することができますが、下の#3を参照してください。

    3)スクリプト言語は、Javaを呼び出す必要があります。上記のデプロイメントアプリケーションでは、Webベースのデプロイメントログが用意されています。開発者/ SQA /リリースエンジニアの大規模な人口がログを消費するため、デプロイメントログを読みやすく理解しやすくするために、すべての人がデプロイメントで正確に何が起こっているのかをすべて理解しているわけではありません。かなりの印刷と色分けがこのアプローチの一部です。私たちは、Javaできれいな印刷用の配布ログAPIを実装しましたが、スクリプトがそれを呼び出せるようにしたいと考えています。たとえば、Rubyプッシュスクリプトが実行されているときに、そのプロセスをpretty-printerに記録する必要があります。 JRubyの内部でRubyを実行すると、RubyスクリプトはJavaのpretty-printer APIを見ることができます。

    関連する問題