【问题标题】:Worklight Adapters - Java vs JavaScriptWorklight 适配器 - Java 与 JavaScript
【发布时间】:2014-05-20 17:53:36
【问题描述】:

让 JavaScript Worklight 适配器调用 Java 代码有什么缺点吗?是否存在性能问题或任何警告?

我问的原因是 1) 我对 Java 比对 JavaScript 更熟悉,2) Java 比 JavaScript 强大得多。我很想让适配器总是调用 Java 类来完成所有工作,但我只是担心可能有一些我不应该这样做的原因。

【问题讨论】:

  • 所以您想让您的应用程序通过网络发送请求,因为您更喜欢用 Java 编写代码?是的,这样做可能会带来一些明确的性能影响和缺点
  • 对不起,我想我没有说清楚。我的意思是从 JavaScript 适配器代码本地调用 Java 代码——而不是对 Java 进行网络调用。换句话说,在 Worklight 项目的“server/java”目录中创建我的 Java 代码,并通过以下方式调用它: var myJavaClass = new com.mycorp.myworklight.JavaClass();
  • 我假设当您的 java 类托管在 WL 服务器上时,您将在适配器内部调用 java 时进行网络调用。无论哪种方式,在进行适配器调用时,这都是网络调用。我会进一步研究它,但我希望在每次调用每个适配器过程时创建新的 Java 线程,这可能有缺点。
  • 对不起,JLRishe,你是对的,我会引入网络调用,这不太好。

标签: java javascript adapter ibm-mobilefirst


【解决方案1】:

在适配器内部使用 Java 意味着“适配器功能的扩展而非替代”。 Worklight 确实提供了完整的教程,甚至提供了在适配器内部实现 java 的示例代码,可以在此处找到:

在适配器演示中使用 Java:

http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v610/04_08_Using_Java_in_adapters.pdf

在适配器中使用 Java 示例:

http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v610/WorklightAdaptersProject.zip

正如示例中提到的,在适配器内部使用 java 意味着在“JavaScript 不足以实现 [特定] 功能或 Java™ 类 [已经] 存在”的情况下作为扩展。同样,这意味着“适配器功能的扩展而非替代”。

【讨论】:

  • 谢谢,我没有想到适配器 JavaScript 没有运行在与 Java 代码相同的类加载器中。我很高兴我问了这个问题,因为那是个坏主意。除非必要,否则我会避免使用 Java。我可以假设如果我在适配器中使用 JRE 中的 Java 类,那只会从同一个 JVM 加载类,并且不进行网络调用吗?
【解决方案2】:

这里只能支持ravidor的说法。由于 Adapter 中的所有 JavaScript 都在 Servlet 内部基于 Java 的 Rhino Javascript 引擎和相同的 Servlet Context 中执行,因此调用 Java Class 或实例化 Java Object 不会产生影响。在 Java 中运行复杂的代码甚至可能更快。

尽管如此,在离开 Javascript 并转向 Java 时,您会失去一些适配器的架构模块化。所有 Java 代码都在一个 Java 源文件夹中,并且所有代码都必须使用完整的 WL 控制台进行部署。您正在失去可以独立维护和部署的适配器的松散和模块化特性。

此外,Worklight 安全框架及其安全测试和领域都是为保护适配器过程而量身定制的。

此外,您正在失去 Javascript 适配器自动执行的 HTTP、SQL 等网络通信的开箱即用代码。如果您回退到 Java 并且需要调用您的后端,您需要自己编写所有网络通信的代码。以及一些 JSON 转换。

我们在我们的项目中进行了讨论,最终我们将 Java 很好地组合用于更复杂的数据处理组件,并将 Javascript 用于大部分网络调用和工作灯安全性。在一个项目中,我们甚至在 Adapter Java 端使用了完整的 Groovy,它运行得相当好。有时我们会遇到线程池等问题。

【讨论】:

    【解决方案3】:

    从 JavaScript Worklight 适配器调用 Java 代码没有缺点。
    没有性能损失或任何其他警告。
    如果您觉得编写 Java 而不是 JavaScript 更舒服,那么您应该这样做。
    从客户端调用适配器过程将调用 JavaScript 函数,您可以从中调用您的 Java 代码,该代码将返回到 JavaScript 函数并从那里以调用结果响应客户端。

    【讨论】:

      【解决方案4】:

      AFAIK 如果您不使用 JAVA 进行后端调用,则不会有任何问题。此外,当您的 java 发生更改时,您可能需要再次重新部署战争。在另一种情况下,如果它是 JavaScript,则很容易在 worklight 服务器中部署适配器

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 2016-01-03
        • 1970-01-01
        相关资源
        最近更新 更多