【问题标题】:converting a existing standalone java application to a web service将现有的独立 Java 应用程序转换为 Web 服务
【发布时间】:2017-05-04 11:21:49
【问题描述】:

我使用 JavaFX8 GUI 开发了一个 java 应用程序。程序连续运行(长时间)收集数据、处理数据并写入数据库等。程序的配置和监督是通过 GUI 进行的。

我希望能够从任何带有浏览器的计算机上查看/控制应用程序。 Vaadin 会是一个好方法吗(任何更容易的替代方法?)? 我已经尝试了一些来调整一些 Vaadin 示例,但无论用户连接/断开 Web 服务的连接情况如何,都没有设法让我的程序持续运行? 它是否取决于运行 Vaadin 的服务器?我目前正在使用 Jetty(在 Eclipse 中使用 Vaadin 插件)

我用java写代码已经有几年了,但是在服务器-客户端代码方面经验很少

谢谢

【问题讨论】:

  • 视情况而定。如果您的 GUI 应用程序设计有层、分离(等),则可以进行转换。但是当这是 GUI 事件上的“spagetti 代码”时,就不那么容易了
  • 这也取决于您对应用程序架构的最初想法以及controlling the applicationrunning continuously, collecting data, processing 的含义。此外,您可能应该在这里区分两个概念:web-app(又名 UI)对于每个访问它的用户都有自己的(我们称之为)instance,以及应用程序的收集器端你可能想成为一个singleton服务集合或任何可以被任何用户停止、启动、重新配置而不影响网络应用程序的东西。

标签: java vaadin


【解决方案1】:

我认为 Vaadin 对你来说是个不错的选择。我用这个框架开发了一些应用程序来在 SmartTV 的网络浏览器上显示一些实时图表。

您的会话很可能由于不活动而超时。这是在 Vaadin 上默认实现的,但在这些类型的应用程序中可能会很烦人。

使用下面的 sn-p(应该位于您的 UI 中),当会话到期时,webapp 将自动重新加载:

@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet implements Serializable {

    @Override
    protected void servletInitialized() throws ServletException {
        super.servletInitialized();
        getService().setSystemMessagesProvider((systemMessagesInfo) -> {
            CustomizedSystemMessages messages
                    = new CustomizedSystemMessages();

            messages.setSessionExpiredNotificationEnabled(false);

            return messages;
        });

    }
}

另外,参考这个问题: Setting Vaadin session-timeout parameter

我建议您使用 Spring 集成,它可以让您轻松连接所有依赖项,使用 Spring Data 以简单的方式访问数据库,并使用 @Scheduled 注释来运行一些后台任务和处理。

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 2015-12-29
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多