【问题标题】:Migrating a 2-tier Java application to...?将 2 层 Java 应用程序迁移到...?
【发布时间】:2011-04-08 12:08:46
【问题描述】:

我们目前有一个位于 MS SQL Server 2005 之上的 2 层 Java Swing 应用程序。所有业务逻辑都在数据库中。客户端相当老旧(而且不太友好),出于性能和可扩展性的原因,我们已经开始将一些服务移植到 Java 的中间层。

但是,我们仍有一些短期和长期目标:

为新的前端选择技术栈

这并不容易 - 我可以看到从连续体一端的 Web 应用程序到另一端的传统桌面应用程序的一切都是可行的选择。当前的前端并不是很复杂(主要是基于表单的),所以我可以看到 web/AJAX 拟合,但这是一个我们不知道我们不知道什么的领域。

我列表中的堆栈是:

  • Eclipse RCP、Netbeans RCP
  • Flex/Flash、Silverlight、JavaFX
  • 纯 Javascript 前端(Sprout Core、Javascript MVC、...)
  • 基于 Java 的 Web 框架(Wicket、JSF、...)

找到一种方法使当前应用程序在远程情况下可以接受地执行

我们有一些客户将我们的应用转售给较小的客户,并且需要能够远程部署它。由于当前架构的 2 层性质,这会导致糟糕的性能(例如,调用返回 18 个结果集的存储过程)。我们过去使用过 Citrix 解决方案,但没有人喜欢这种方法。通过端口 80 连接 JDBC 听起来也是个坏主意。我开始怀疑是否有任何东西可以使用类似 X-Windows 的方法来远程仅 GUI 部分。

【问题讨论】:

  • 您目前是否在您的客户站点同时部署了 db 和 swing 层?是否存在可能影响您选择中间层的硬件限制?
  • 硬件并不是真正的问题。我们有两种不同类型的客户端:一种在他们的网站上安装所有东西,另一种拥有客户端但使用第 3 方进行托管。

标签: java swing ria rich-internet-application


【解决方案1】:

我们刚刚经历了与迁移旧应用程序非常相似的评估过程。

对我们来说,使用什么前端框架的最大决定因素是开发团队的先验知识。我们想要每个人都会立即感到舒适的东西。我们有几个与 X 或 Y 合作过的高级开发人员,但每个人都知道的框架是 Swing。

最后我们决定在 NetBeans 平台上使用 RESTful Web 服务与 EE 服务器进行通信。

作为奖励,您可以将 NetBeans 平台应用程序部署为 Java WebStart 应用程序,这意味着您不必担心单独的安装。

【讨论】:

    【解决方案2】:

    我建议创建一个候选框架的简短列表,并创建一个包含所有这些框架的小型测试应用程序。通过这种方式,您将了解所有项目的好坏方面,并了解每个项目的社区活动和文档是什么样的(这些方面存在很大差异)。

    如果您最终这样做,我希望您将 Vaadin 列入您的短名单,我认为它非常适合您。如果您有任何问题,请联系我们的forums,我们将帮助您开始。

    【讨论】:

      【解决方案3】:

      假设您要强制所有客户端安装新的中间层,我想不出反对将其作为 Java Web 应用程序的论据。正如已经提到的,您可以通过 HTTP 控制对您平台的所有访问,这允许轻松转售,只需配置防火墙即可。您没有理由不能在 Web 前端中使用 Javascript,您可能对 DWR 感兴趣,它允许您通过 Javascript 直接与 Java 对象进行交互。我之前使用它来向 Spring MVC webapp 添加一些简单的 Ajax 交互。

      我喜欢这种方法的原因是,您已经将代码迁移到 Java 中间层,所以

      1. 已经将 Java 服务器硬件成本强加给客户端,托管应用服务器/Web 服务器是可比的
      2. 已经具备 Java 专业知识,可以使用 DWR
      3. 可以根据需要使用尽可能多/少的 Javascript(我在 IE6、Firefox 3、Chrome 中使用过 DWR)

      我认为您对向客户端推送过多功能保持警惕是正确的,我会选择尽可能瘦的客户端。我会查看前两个堆栈选择的唯一原因是,如果您在特定领域拥有一些开发人员专业知识,而不是 Java webapp/Javascript。

      【讨论】:

      • DWR 还活着吗?该网站已关闭,最后一次发布是一年多前。
      • 我不知道它是否仍在积极开发中,但它肯定已准备好生产,并且有一本非常好的书 - books.google.com/books?id=xORZWVLWu-8C
      【解决方案4】:

      如果您想轻松地重新部署您的应用程序,出于更新、安全原因等原因,并且如果您希望您的应用程序可以远程访问,那么您真的应该考虑使用基于 Web 的前端。

      另外,这样一来,只有一个应用程序,您的网络应用程序,将处理与数据库的连接,因此没有 JDBC 隧道或其他任何东西。

      关于最佳框架,这取决于您的团队知识、应用程序的使用方式(或多或少 javascript)等。

      【讨论】:

      • Web 对部署和更新的观点很有吸引力,但是还有支持哪些浏览器的政治问题。这并不容易,因为客户可能有关于哪些浏览器可以接受的政策。
      • 大多数时候,当您使用 Web 框架时,您的 Web 应用程序将与大多数(如果不是全部)Web 浏览器兼容。这也意味着您的客户不需要在他们的计算机上安装 Java/Silverlight。
      • 毫无疑问,您将无法支持 IE6,但您始终可以聘请网页设计师为您提供网站皮肤。
      • 并非所有浏览器都是平等的 - 虽然 Javascript 框架可能适用于所有浏览器,但性能变化很大。
      • 根据所使用的硬件,它的变化也很大。你无法真正控制它。
      【解决方案5】:

      为了简化开发并利用您在 Swing 中的经验考虑将 Vaadin 用于您的前端。它是一个 Java 框架,用于构建看起来很棒且性能良好的现代 Web 应用程序。所有代码都是用 Java 编写的,看起来与 Swing 非常相似。

      就整体应用程序架构而言,我建议使用多层、面向服务的架构。最好的方法是使用 Spring 框架和 Hibernate 进行数据库访问

      【讨论】:

      • 免责声明:我是 Vaadin 团队的成员。同意,您的应用听起来正是 Vaadin 的设计目的。使用 Vaadin,您可以专注于业务逻辑,而不必担心 Web 技术、模板等。
      【解决方案6】:

      如果前端主要是基于表单的,我会远离 Flex。 Flex 非常适合某些应用程序(我将它用于基于画布的应用程序),但 Flex 的表单组件存在一些可用性问题。它们只是不像您对当今网络所期望的那样工作。 (比如缺少对鼠标滚轮的支持,在下拉列表中输入只考虑第一个字符等)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 2019-01-24
        • 2019-10-26
        • 2016-11-04
        • 1970-01-01
        相关资源
        最近更新 更多