在 RCP 应用程序中拥有 RESTful 服务

Posted

技术标签:

【中文标题】在 RCP 应用程序中拥有 RESTful 服务【英文标题】:Having RESTful service in RCP application 【发布时间】:2017-07-12 08:50:20 【问题描述】:

我们有一个现有的 Eclipse RCP 应用程序,可作为独立产品使用。在高层次上,该产品用于使用其 UI 配置图像规范,我们可以基于这些配置导出示例图像。 现在我们正在开发另一个具有多个模块的 Web 应用程序,其中一个模块用于开发我们的 Eclipse RCP 应用程序所做的事情。 只是为了演示目的提供 RCP 应用程序的 QUICK 集成,我计划在服务器机器中单独运行 RCP 应用程序,并将其静态功能公开为 RESTful Web 服务。所以模块应该对 RCP 应用程序进行 RESTful 调用。

现在开始,我尝试嵌入一个码头服务器,用于在 RCP 应用程序启动期间托管 REST 服务,如下所示

但问题是在 Jetty 服务器启动后,我无法使用我配置的路径访问 TestWebService。所以我很困惑这是否是的正确方法。请注意,我可以使用http://localhost:1002 访问服务器,但不能访问服务。

以下是我点击http://localhost:1002/hello/test时的控制台日志:

【问题讨论】:

您确定 Jetty 启动了吗?你能给我们提供一些日志吗? 用日志更新了我的帖子。看起来 RESTful 服务类没有被加载/注册到 Servlet。如果我将 jetty 嵌入到独立虚拟项目中的 java 类的 main 方法中,则相同的代码可以正常工作。 【参考方案1】:

您正在尝试的架构非常奇怪。 我的意思是编写一个 RCP 应用程序,它侦听一个端口并在其上提供 REST 服务;这可能会导致更多障碍。

相反,我会将其分成两个软件工件:一个 RCP 应用程序和一个 Web 应用程序 (.war)。

您可以提取包含图像处理逻辑的业务逻辑 jar(如果需要,它可以是 OSGi 插件)。 然后将此插件/.jar 作为依赖项包含在 webapp 中,并通过 Web 容器(Tomcat、GlassFish 等)提供其功能

因此,您的其他(第三个)应用程序将连接到此 .war 文件提供的 Web 服务。

opt.1) 如果您需要单个运行实例(因为数据库或其他共享资源),那么您的 RCP 应用程序也必须使用此 REST 服务。

opt.2) 如果不是,那么简单地将包含业务逻辑的 .jar/插件编译到您的 RCP 应用程序中。

【讨论】:

我完全同意你的观点,并且可以肯定我正在尝试做的事情远非理想的解决方案。但这里的主要考虑是我们想要快速演示我们已经拥有的 RCP 应用程序的功能,并在不更改 RCP 应用程序的情况下以最小的工作量提供集成。我敢肯定,将来我们会分配时间来重构业务逻辑,就像您从代码中所说的那样。

以上是关于在 RCP 应用程序中拥有 RESTful 服务的主要内容,如果未能解决你的问题,请参考以下文章

设计 RESTful 登录服务

Eclipse RCP - 以编程方式更改 plugin.xml?重新加载?

Linux rcp命令详解

Restful API应遵循哪些规范?Python进阶

登录和注销操作应在“RESTful”设置中使用哪种 HTTP 方法

如何自动调用 RESTful Web 服务