背景
我们有一个由Java后端支持的AIR客户端应用程序。
在我们的应用程序中,我们有一个复杂的数据网格,可以一次捕获大量数据。每个单独的数据单元可能会触发繁重的计算/处理。这将反复发生,直到用户满意并保存最终版本。
某些处理的性质要求其中很大一部分由Java完成。添加了很多用户,我们有明确的服务器性能问题。
我们需要将大部分处理转移到客户端。
问题
现在,当用户提交最后一组输入时,服务器将在持久化之前执行最后一次计算。这意味着我们需要一组可以执行所需的所有计算/处理的Java类。
由于我们已经编写了Java类,因此在客户端重用它们作为库是理想的,而不是在Flex中重新执行它们并且必须同时维护它们。
我们认为Adobe AIR的原生扩展程序是完美的 - 直到我们发现Windows上只支持DLL。由于我们的传递机制(Java库没有.exe),我们无法使用NativeProcess。
问题
到目前为止,我们已经尝试过Merapi,但考虑到它现在已经暂停了一段时间,我们担心未来的兼容性。我们想知道Merapi是否还有其他选择?
或者更好的是,尝试在AIR应用程序和Java库之间创建通信桥接这个问题的任何其他潜在方法。
答案 0 :(得分:0)
您有一些选择,具体取决于您愿意做多少工作。
如果您愿意考虑FLEX以外的其他内容......
您可以选择Applet,因为:
它在浏览器中运行,可以与您的应用程序进行通信,并使用客户端上的浏览器资源来执行计算。
或者,这是我的最爱,你可以编写一个Java Webstart部署的桌面应用程序。这将完全在客户端上运行,它不是服务器上的资源消耗,可以通过RMI或简单消息与服务器通信,就像您可以获得并更新自身一样接近本机桌面应用程序,因此没有部署问题。 / p>
第三个选项比较棘手,但理论上,您可以使用类似GWT的东西在Java中编写应用程序,然后通过GWT将其转换为Javascript应用程序。这在浏览器中运行,但它有严重的局限性,在我看来,GWT Javascript几乎不可读,难以定制。
替代方案:
将应用程序编写为标准Web应用程序,并使用Javascript在客户端执行计算。问题是您将无法重用Java类。
结论(应该阅读,最简单的意见)
总而言之,通过Webstart部署的Java桌面应用程序看起来是最好的解决方案。它将允许您重复使用您的计算代码,并且它也将充分利用客户端资源。