2012-03-18 95 views
2

「最終用戶」我們有一個Java應用程序,我們希望爲最終用戶提供寫「業務規則」的能力。這些規則將在實體創建,更新或刪除時進行評估。腳本語言在Java應用程序

我要找寫這些業務規則的語言。注意事項有:

  1. 配置的安全性 - 最終用戶不應該能夠調用之類的新的文件(「一些祕密文件」),或調用內部API
  2. 易於閱讀和理解
  3. 容易操縱列表和
  4. 有能力提供一個語法檢查器

任何建議的地圖?

+0

」不應該能夠調用像新文件(「/ etc/passwd」)的東西很容易。不要以超級用戶身份運行JVM。 – Dev 2012-03-18 03:56:12

+0

@Dev:'-rw -r - r-- 1 root root 2168 2011-04-13 04:43/etc/passwd'是可讀的整個世界,必須要允許登錄。 – 2012-03-18 05:22:59

+0

注意[內部平臺效應](http://en.wikipedia.org/wiki/Inner-platform_effect)。 – Jesper 2012-03-18 09:16:54

回答

2

使用一個業務規則引擎(如Drools的)或建立使用Groovy或XTEXT自己的詞彙或DSL。

0

你也可以試試ANTLR。這有點複雜,但有很大的靈活性。

1

Python可以進行相當的英語讀,並提供給Java作爲Jython的包。 Python中的列表語法非常靈活,並且對於像這樣的用例來說它有很多的合成語法。 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例如:

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

使用XML:

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

XML,JSON,YAML是數據格式。您必須自己解釋這些數據,但它可以防止創建任意對象。使用衆所周知的數據格式也使您不必編寫自己的解析器。 Java中有現有的解析器可用。 「