OSGI Embedded Equinox-用于访问OSGI框架中未实例化的POJO的捆绑包

OSGI Embedded Equinox-用于访问OSGI框架中未实例化的POJO的捆绑包,osgi,equinox,Osgi,Equinox,我有一个服务器端应用程序,希望在其中嵌入osgi框架,以便动态加载捆绑包。 假设我想公开一个QuoteImpl实现iNote(作为服务器容器bootstrap/Spring的一部分实例化)以供不同的bundle使用 问题1。是否有一种将服务器应用程序实例公开给捆绑包的干净方法?(顺便说一句,由于遗留问题,不可能将服务器代码放入捆绑包:)并且不希望使整个应用程序osgi'ed 试图通过服务和捆绑包将其公开到iNote中。我不确定我是否做得很好,但由于iNote驻留在核心应用程序项目中而不是捆绑包项

我有一个服务器端应用程序,希望在其中嵌入osgi框架,以便动态加载捆绑包。
假设我想公开一个QuoteImpl实现iNote(作为服务器容器bootstrap/Spring的一部分实例化)以供不同的bundle使用

问题1。是否有一种将服务器应用程序实例公开给捆绑包的干净方法?(顺便说一句,由于遗留问题,不可能将服务器代码放入捆绑包:)并且不希望使整个应用程序osgi'ed


试图通过服务和捆绑包将其公开到iNote中。我不确定我是否做得很好,但由于iNote驻留在核心应用程序项目中而不是捆绑包项目中,编译问题没有解决,因此失败了。有什么想法吗?

是的,方法是通过服务。“主机”应用程序将发布服务,OSGi中的捆绑包将以正常方式使用服务

实现这一功能的关键是,主机应用程序必须通过系统包导出服务API(即包含
iNote
)的包。您可以通过在创建嵌入式osgi框架时设置
org.osgi.framework.system.packages.extra
属性来控制这一点。我写了一篇关于这个主题的文章,应该可以帮助您入门(请查找标题“公开应用程序包”)


您声明有编译问题。要解决这些问题,有必要了解您是如何构建项目和构建系统的。

是的,这样做的方法是使用服务。“主机”应用程序将发布服务,OSGi中的捆绑包将以正常方式使用服务

实现这一功能的关键是,主机应用程序必须通过系统包导出服务API(即包含
iNote
)的包。您可以通过在创建嵌入式osgi框架时设置
org.osgi.framework.system.packages.extra
属性来控制这一点。我写了一篇关于这个主题的文章,应该可以帮助您入门(请查找标题“公开应用程序包”)


您声明有编译问题。要解决这些问题,需要知道您是如何构建项目和构建系统的。

这就是我如何在Java类中嵌入Equinox OSGi运行时的。我想你也可以这样做

这就是我在Java类中嵌入Equinox OSGi运行时的方式。我想你也可以这样做

尼尔非常感谢你回来。我用你的博客作为指导。顺便说一句,很棒的博客。我解决了编译问题。我有3个项目Quote捆绑包(包含接口iNote)、Consumer捆绑包(使用iNote)和Launcher项目(模仿我的应用服务器(不是捆绑包),并以编程方式注册servic iNote的实现)。当我尝试执行context.getServiceReference(iNoteService.class.getName())时,消费者捆绑包中的serviceReference为NULL;我的问题是:我肯定错过了什么。实现是否必须在捆绑包中?当我启动框架时(不在Activator中)
publicstaticvoidmain(String[]args){..FrameworkFactory FrameworkFactory=ServiceLoader.load(FrameworkFactory.class).iterator().next();config.put(Constants.framework\u SYSTEMPACKAGES\u EXTRA,“osgi.main”);framework FrameworkFactory=FrameworkFactory.newFramework(config);framework.start();BundleContext=framework.getBundleContext();context.registerService(iNoteService.class.getName(),new SimpleNote(),null);…}
抱歉,我无法从您的博客中获取有关lto linebreak:)的评论。…
“使用此包的捆绑包的清单中应包含以下内容:导入包:org.example.mydomain。”。这会导致捆绑包清单中出现错误,显示“No bundle exports package org.example.mydomain”。关于显示“No bundle exports this package”的错误消息,这是生成时错误吗?如果是这样,那么我需要再次了解您的构建系统。听起来你正在使用的工具是非常不灵活的,它对你的影响远远大于它的帮助!尼尔非常感谢你回来。我用你的博客作为指导。顺便说一句,很棒的博客。我解决了编译问题。我有3个项目Quote捆绑包(包含接口iNote)、Consumer捆绑包(使用iNote)和Launcher项目(模仿我的应用服务器(不是捆绑包),并以编程方式注册servic iNote的实现)。当我尝试执行context.getServiceReference(iNoteService.class.getName())时,消费者捆绑包中的serviceReference为NULL;我的问题是:我肯定错过了什么。实现是否必须在捆绑包中?当我启动框架时(不在Activator中)
publicstaticvoidmain(String[]args){..FrameworkFactory FrameworkFactory=ServiceLoader.load(FrameworkFactory.class).iterator().next();config.put(Constants.framework\u SYSTEMPACKAGES\u EXTRA,“osgi.main”);framework FrameworkFactory=FrameworkFactory.newFramework(config);framework.start();BundleContext=framework.getBundleContext();context.registerService(iNoteService.class.getName(),new SimpleNote(),null);…}
抱歉,我无法从您的博客中获取有关lto linebreak:)的评论。…
“使用此包的捆绑包的清单中应包含以下内容:导入包:org.example.mydomain。”。这会导致捆绑包清单中出现错误,显示“No bundle exports package org.example.mydomain”。关于显示“No bundle exports this package”的错误消息,这是生成时错误吗?如果是这样,那么我需要再次了解您的构建系统。听起来你正在使用的工具是非常不灵活的,它对你的影响远远大于它的帮助!