【问题标题】:Run business logic using scripting language使用脚本语言运行业务逻辑
【发布时间】:2016-05-27 07:10:03
【问题描述】:

我们有一个 Web 应用程序,其中的网页是动态构建的。动态的意思是,整个 UI 以 JSON 形式存储在后端,前端相应地绘制 UI。在某些用例中,数据收集发生在多个表单中。表格的显示顺序取决于之前表格中输入的数据。

例如假设用户正在查看form1,并且可能有一个业务逻辑,例如 if age > 25 show form2 else form3

这是一个简单的示例,但它可能会变得更加复杂。并且逻辑因客户而异。该业务逻辑也可以由第三方开发人员开发。

javascript 是存储此业务逻辑的选项之一。但是,该应用程序使用 Java7 构建并部署在 Google App Engine 中。性能和安全性是决定方法的重要标准。以下是我们目前考虑的方法:

  • 有一个单独的NodeJS 应用程序并进行 API 调用以执行业务逻辑
  • 在作为 JDK 7 一部分的 JavaScript 脚本引擎中运行 Javascript

您能否建议在 Java 应用程序中执行 javascript 的最佳方法是什么?

【问题讨论】:

    标签: javascript google-app-engine architecture java-7


    【解决方案1】:

    Rhino 是一个完全用 Java 编写的开源 JavaScript 实现。它通常嵌入到 Java 应用程序中,以向最终用户提供脚本。 这是一个链接 - http://www.mozilla.org/rhino/

    【讨论】:

      【解决方案2】:

      鉴于 Javascript 的全球性以及您所指的特定逻辑这一事实,我倾向于同意 Alex 关于 JS 的观点。也就是说,有人抱怨 Rhino 的表现,所以我不建议马上这样做。除非性能证明对您的用例来说很糟糕,否则我建议使用内置的开始。然后,当您对您的用例和特定性能配置文件有了更多了解后,您可以在需要时转向更好的解决方案。

      这里有一些额外的想法可以帮助你提出问题:

      1. 您应该使用保姆线程运行任何对第三方开放的脚本解释器。 (即,在消耗一定数量的资源后杀死它们——这不是保姆应该做的,但唉......)。任何完整的脚本语言都可以做一个简单的“while(true):wait()”

      2. 除非逻辑的复杂性很大(即,您在示例中说了一两个 if-then ;这可以通过任何语言处理)语言不是安全或性能的功能,而是一个让使用它的人感到舒适和熟悉——也就是说,JavaScript 应该很容易。如果您的定制团队知道 python,那么请继续使用嵌入式 jython 等。

      3. 我不会为简单的定制启动单独的服务。同样,除非复杂性很大,否则首选嵌入式引擎。启动一个单独的 NodeJS 服务器来运行 2 行脚本会浪费大量开销、devops 复杂性和维护(想想每次启动一个 dev 实例来运行 if-then)——这并不难,但是当您忘记这一点时,或者当您雇用一个不知道这一点并杀死它的初级开发人员时,这可能是您在 2 年内进行 2 天 24 小时马拉松式调试练习的原因......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        • 2012-02-09
        相关资源
        最近更新 更多