【问题标题】:start osgi bundle from main class rather than implementing BundleActivator从主类启动 osgi bundle 而不是实现 BundleActivator
【发布时间】:2014-03-08 20:23:38
【问题描述】:

我有一个名为 floodlight.jar 的 jar 文件。我可以在 cmd 行中运行它:java -jar floodlight.jar。现在我想将它转换成一个捆绑包以使用 FUSE ESB 容器进行部署。这是我到目前为止所做的:

  1. 转换:

     java -jar bnd.jar wrap floodlight.jar
    

    产生一个名为 floodlight.bar 的包。把名字改成 Floodlight.jar

  2. 部署

    FuseESB:karaf@root> osgi:install -s file:/home/usr/Dir/to/floodlight.jar
    

我希望捆绑包可以做与我在 cmd 行中所做的相同的事情:java -jar floodlight.jar 一旦它开始。但是,它是活动的,没有做任何事情。它的行为就像一个图书馆。

我想知道如何让包启动后运行主类。谁能帮帮我?

【问题讨论】:

  • 为什么要避免写Bundle-Activator?如果是关于重复代码,那么您可以从激活器的 start() 方法中调用 main()
  • 因为有一些java应用程序,比如floodlight,oracle noslqlDB,已经准备好运行了。我只想将这些应用程序部署到 OSGi 容器中,而无需进行太多更改。

标签: java bundle fuseesb jbossfuse


【解决方案1】:

OSGi 应用程序的入口点是 BundleActivator 的。您不能像在标准 Java 应用程序中那样调用 main-method。但是,您可以在包的 start(BundleContext) 方法的 main 方法中执行所有操作。

所以,实现 BundleActivator 接口并将其添加到您的清单中。

【讨论】:

  • 是不是就像将主类的内容复制到BundleActivator.start()中一样?然后将 Activator 添加到 manifest 中?
  • 您可能需要稍作更改,具体取决于您的程序。但总的来说,是的,start() 是 OSGi 的 main()!但请记住,由于 OSGi 的扩展类加载,将“标准”程序转换为模块化 osgi 应用程序可能会导致一些问题
猜你喜欢
  • 2010-12-09
  • 2013-08-18
  • 2023-03-10
  • 2016-04-17
  • 2014-01-14
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2014-11-16
相关资源
最近更新 更多