2013-02-15 69 views
0

我有一个名为floodlight.jar的jar文件。我可以在cmd行运行它:java -jar floodlight.jar。现在我想将它转换成一个包,用FUSE ESB容器进行部署。下面是我做的,到目前为止:从主类启动osgi捆绑而不是实现BundleActivator

  1. 转换:

    java -jar bnd.jar wrap floodlight.jar 
    

    导致捆绑命名floodlight.bar。将名称改为floodlight.jar

  2. 部署

    FuseESB:[email protected]> osgi:install -s file:/home/usr/Dir/to/floodlight.jar 
    

我希望包可以做同样的事情,我做了什么在CMD行:Java的罐子floodlight.jar一旦入门。但是,它没有做任何事情是积极的。它就像一个图书馆。

我想知道如何让包一旦启动就运行主类。任何人都可以帮助我?

+0

为什么你想避免写一个'Bundle-Activator'?如果是关于代码的重复,那么你可以从你的激活器的start()方法调用main()。 – 2013-02-15 22:20:34

+0

因为有一些java应用程序,比如floodlight,oracle noslqlDB,可以运行。我只想将这些应用程序部署到OSGi容器中,而无需进行太多更改。 – 2013-02-15 22:28:49

回答

1

OSGi应用程序的入口点是BundleActivator's。您不能像标准Java应用程序那样调用主要方法。但是,您可以在捆绑的开始(BundleContext)方法中执行主要方法中的所有操作。

因此,实现BundleActivator接口并将其添加到您的清单。

+0

它是否像应付从主类到BundleActivator.start()的内容?然后将激活器添加到清单? – 2013-02-15 22:31:28

+0

您可能需要稍微改变一点,具体取决于您的程序。但总的来说,是的,start()是OSGi的主要()!但请记住,将标准程序转换为模块化osgi应用程序可能会导致一些问题,这是由于OSGi的扩展类加载 – Mirco 2013-02-15 22:51:42