我正在尝试编写一个基于OSGi的桌面应用程序.我有一个Swing JFrame,我想添加添加模块(其他包)的可能性.我在JSig教程中浏览了EclipseZone OSGi,但每个应用程序都是从OSGi Framework(在本例中为Knopflerfish OSGi Desktop)启动的.
所以我的问题是,是否有一个选项可以在没有可见的OSGi框架的情况下启动应用程序?我知道,从代码中,可以更改bundle的属性,但是如何以这种方式更改框架的属性?(例如,默认捆绑存储位置,捆绑在位置时的默认操作等?)
public class MainFrame extends ServiceTracker implements BundleActivator {
public MainFrame(BundleContext context, JToolBar toolBar) {
// select, which services is the bundle tracking
super(context, JMenu.class.getName(), null);
}
@Override
public void start(BundleContext context) throws Exception {
//display a JFrame
}
@Override
public void stop(BundleContext context) throws Exception {
//hide a JFrame
}
@Override
public Object addingService(ServiceReference reference) {
// Process a Service and return a JMenu
return new JMenu();
}
@Override
public void removedService(ServiceReference reference, Object service) {
// remove a JMenu from a JFrame
}
public static void main(String[] args) {
// ????????????????????????????????????????????
// ????????????????????????????????????????????
}
}
Run Code Online (Sandbox Code Playgroud)
我上面写了一个课(我刚发布了一个草图),但我不知道在main()函数中写什么.这个捆绑包在Knopflerfish OSGi Desktop中运行良好,但是我希望它在没有它的情况下运行.
Nei*_*ett 13
你的代码基本没问题,但听起来你想要更多地控制OSGi框架本身.换句话说,您想知道如何启动OSGi框架并启动捆绑包.您目前遇到的问题是您正在使用其他人的启动器(Knopflerfish),其中包括KF GUI控制台,您正在使用它来安装和启动您的捆绑包.然而,这些都不是必需的.
在AValchev的回答中,他谈到了启动Equinox java -jar org.eclipse.osgi.jar -console
.这种方法的问题在于它为您提供了一个空的 OSGi框架,因此您必须在OSGi shell中键入命令才能安装和启动您的软件包...也不理想!
我想你应该写自己的发射器.这实际上非常简单,可以完全独立于任何特定的OSGi框架实现的方式完成.我刚才在一篇博文中写过这篇文章.
在伪代码中,您的启动器应用程序应如下所示:
public static void main() {
1. get a FrameworkFactory using java.util.ServiceLoader.
2. create an OSGi framework using the FrameworkFactory
3. start the OSGi framework
4. Install your bundle(s).
5. Start all the bundles you installed.
6. Wait for the OSGi framework to shutdown.
}
Run Code Online (Sandbox Code Playgroud)
在您的问题中,您特别询问有关设置捆绑存储位置的信息.这可以通过Constants.FRAMEWORK_STORAGE
在传递给FrameworkFactory.newFramework
方法的Map中设置属性来完成.
归档时间: |
|
查看次数: |
5943 次 |
最近记录: |