2012-03-18 7 views
2

Javaアプリケーションがあり、エンドユーザーが「ビジネスルール」を書く能力を提供したいと考えています。これらのルールは、エンティティが作成、更新、または削除されたときに評価されます。Javaアプリケーションの「エンドユーザー」のスクリプト言語

私はこれらのビジネスルールを書くための言語を探しています。検討事項は以下のとおりです。

  1. 設定可能なセキュリティ - エンドユーザが操作すること
  2. 簡単に読んで理解するために、内部API
  3. 簡単に新しいファイル(「いくつかの秘密ファイル」)のようなものを呼び出したり、呼び出しできないようにする必要があり文法チェッカー

任意の提案を提供するために、リストとマップ

  • 能力?

  • +0

    "は新しいファイル("/etc/passwd ")のようなものを呼び出すことはできません。 JVMをrootとして実行しないでください。 – Dev

    +0

    @Dev: '-rw-r -r-- 1 root root 2168 2011-04-13 04:43/etc/passwdは全世界で読めるので、ログインできるようにする必要があります。 –

    +0

    [内部プラットフォーム効果](http://en.wikipedia.org/wiki/Inner-platform_effect)を見てください。 – Jesper

    答えて

    2

    ビジネスルールエンジン(Droolsなど)を使用するか、GroovyまたはxTextを使用して独自のボキャブラリまたはDSLを作成します。

    0

    ANTLRを試すこともできます。もう少し複雑ですが、柔軟性があります。

    1

    Pythonは英語で読みやすく、JythonパッケージとしてJavaで利用できます。 Pythonのリスト構文は非常に柔軟性があり、このようなユースケースのための多くの構文sugerを備えています。 Jythonはよく確立されたプロジェクトであり、すでにビジネスアプリケーションのスクリプト作成に使用されています。

    http://www.jython.org/

    サンドボックスは、JVM内部セキュリティマネージャ・メカニズムを使用してJavaレベルに設けることができます。これは、Javaアプレットが使用するものです。

    Pythonにはpylintという構文チェッカーがあります。

    0

    また、XML、JSON、YAML、またはLISPのs-expのDSLをベースにすることもできます。

    いくつかの例:

    YAMLを使用する:

    - action: reject 
        pattern: http://www\.example\.com/.+ 
    - action: allow 
        pattern: http://www\.example\.net/.+ 
    

    別YAML例:

    <select value="*" from="mytable"> 
        <criteria property="name" op="eq" value="foo" /> 
        <criteria property="age" op="ge" value="18" /> 
    </select> 
    

    XML、JSON、YAMLであるデータフォーマット:XMLを使用

    - xpath-select: /a[1]/b/c[@p1=v1]/d 
        as: x 
    - xpath-select: /e/f/g 
        as: y 
    - yield: "${x}+${y}" 
    

    。これらのデータはあなた自身で解釈する必要がありますが、任意のオブジェクトを作成することはできません。よく知られているデータ形式を使用すると、独自のパーサーを作成する必要がなくなります。 Javaには既存のパーサーがあります。

    関連する問題