替代没有桌面Java的Adobe AIR本机扩展

时间:2012-05-18 12:17:11

标签: java air flex4

背景

我们有一个由Java后端支持的AIR客户端应用程序。

在我们的应用程序中,我们有一个复杂的数据网格,可以一次捕获大量数据。每个单独的数据单元可能会触发繁重的计算/处理。这将反复发生,直到用户满意并保存最终版本。

某些处理的性质要求其中很大一部分由Java完成。添加了很多用户,我们有明确的服务器性能问题。

我们需要将大部分处理转移到客户端。

问题

现在,当用户提交最后一组输入时,服务器将在持久化之前执行最后一次计算。这意味着我们需要一组可以执行所需的所有计算/处理的Java类。

由于我们已经编写了Java类,因此在客户端重用它们作为库是理想的,而不是在Flex中重新执行它们并且必须同时维护它们。

我们认为Adobe AIR的原生扩展程序是完美的 - 直到我们发现Windows上只支持DLL。由于我们的传递机制(Java库没有.exe),我们无法使用NativeProcess。

问题

到目前为止,我们已经尝试过Merapi,但考虑到它现在已经暂停了一段时间,我们担心未来的兼容性。我们想知道Merapi是否还有其他选择?

或者更好的是,尝试在AIR应用程序和Java库之间创建通信桥接这个问题的任何其他潜在方法。

1 个答案:

答案 0 :(得分:0)

您有一些选择,具体取决于您愿意做多少工作。

如果您愿意考虑FLEX以外的其他内容......

您可以选择Applet,因为:

它在浏览器中运行,可以与您的应用程序进行通信,并使用客户端上的浏览器资源来执行计算。

或者,这是我的最爱,你可以编写一个Java Webstart部署的桌面应用程序。这将完全在客户端上运行,它不是服务器上的资源消耗,可以通过RMI或简单消息与服务器通信,就像您可以获得并更新自身一样接近本机桌面应用程序,因此没有部署问题。 / p>

第三个选项比较棘手,但理论上,您可以使用类似GWT的东西在Java中编写应用程序,然后通过GWT将其转换为Javascript应用程序。这在浏览器中运行,但它有严重的局限性,在我看来,GWT Javascript几乎不可读,难以定制。

替代方案:

将应用程序编写为标准Web应用程序,并使用Javascript在客户端执行计算。问题是您将无法重用Java类。

结论(应该阅读,最简单的意见)

总而言之,通过Webstart部署的Java桌面应用程序看起来是最好的解决方案。它将允许您重复使用您的计算代码,并且它也将充分利用客户端资源。