Java应用程序中“最终用户”的脚本语言

时间:2012-03-18 03:35:32

标签: java scripting

我们有一个Java应用程序,我们希望为最终用户提供编写“业务规则”的能力。创建,更新或删除实体时将评估这些规则。

我正在寻找一种语言来编写这些业务规则。考虑因素是:

  1. 可配置安全性 - 最终用户不应该调用新文件(“某些机密文件”)或调用内部API
  2. 易于阅读和理解
  3. 易于操作列表和地图
  4. 能够提供语法检查器
  5. 有什么建议吗?

4 个答案:

答案 0 :(得分:2)

使用业务规则引擎(如Drools)或使用Groovy或xText构建自己的词汇表或DSL。

答案 1 :(得分:1)

Python可以使英文具有可读性,并且可以作为Jython包用于Java。 Python中的列表语法非常灵活,对于这样的用例,它有很多合成方法。 Jython是完善的项目,已经在业务应用程序脚本中使用。

http://www.jython.org/

可以使用JVM内部安全管理器机制在Java级别上提供沙盒。这就是Java applet使用的。

Python有一个名为pylint的语法检查器。

答案 2 :(得分:0)

您也可以尝试ANTLR。它有点复杂,但有很多灵活性。

答案 3 :(得分:0)

您还可以将您的DSL基于XML,JSON,YAML甚至是LISP的s-exp。

一些例子:

使用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中有现有的解析器。