【问题标题】:Dynamically load Webservice bundle in Eclipse RCP application在 Eclipse RCP 应用程序中动态加载 Webservice 包
【发布时间】:2013-09-14 08:09:19
【问题描述】:

这是我想要做的:我有一个服务器和一个客户端应用程序,它们通过 Web 服务 (SOAP) 进行通信。

客户端是一个 Eclipse RCP 应用程序,它使用来自 Apache CXF 的 DOSIG 包。我使用了本教程中描述的声明式服务和 BundleActivator:http://cxf.apache.org/dosgi-ds-demo-page.html

我通过为 Apache CXF 包添加一个自动启动条目让客户端与服务器连接。问题是这会显着减慢启动速度,因为 Apache CXF 需要一段时间来设置服务和所有内容。只有当 Apache CXF 包完全启动时,我的 UI 才会出现。

我希望在 Apache CXF 包完成启动之前显示 UI。我不会立即需要 Web 服务,并且无论如何都必须处理丢失的 Web 服务。所以我希望我的 UI 显示出来,然后在 web 服务可用时激活功能。

所以我的问题是:

  1. 这种方法有意义吗?
  2. 我该如何实现呢?我想我必须从正在运行的应用程序启动 cxf 包?

【问题讨论】:

    标签: java eclipse web-services osgi eclipse-rcp


    【解决方案1】:

    您可以使用以下方式启动插件(捆绑包):

    final Bundle bundle = Platform.getBundle(id);
    if (bundle != null)
     {
       if ((bundle.getState() & Bundle.ACTIVE) == 0)
        {
          try
           {
             bundle.start(Bundle.START_TRANSIENT);
           }
          catch (final BundleException ex)
           {
             // Handle error
           }
        }
     }
    

    【讨论】:

    • 好的,我试过了,看起来很有希望。但是捆绑包是在主线程中启动的,所以我所有的其他操作都必须等到捆绑包启动。有没有一种标准的方法来异步加载它而无需为此手动实现线程?
    • 您可以使用 Eclipse 作业在您的插件中进行主要的启动处理。该作业将在后台线程中运行。
    • 非常感谢!我知道我在这里遗漏了一些东西。我只是从 RCP 开始,并且已经阅读/听说过这些技术,但没有想到乔布斯。这正是我需要的。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2013-08-11
    相关资源
    最近更新 更多