在应用程序中访问OSGI捆绑包上下文

在应用程序中访问OSGI捆绑包上下文,osgi,osgi-bundle,Osgi,Osgi Bundle,我试图在java应用程序中访问OSGI捆绑包的上下文,以获得正在运行的服务 ctx.getServiceReference(ReceiverService.class.getName()); 我试过这个: BundleContext ctx = FrameworkUtil.getBundle(ReceiverService.class).getBundleContext(); 但它返回空值 我使用预先安装的捆绑包以图形模式初始化Knopflerfish,然后启动SenderDevice捆绑包

我试图在java应用程序中访问OSGI捆绑包的上下文,以获得正在运行的服务

ctx.getServiceReference(ReceiverService.class.getName());
我试过这个:

BundleContext ctx = FrameworkUtil.getBundle(ReceiverService.class).getBundleContext();
但它返回空值


我使用预先安装的捆绑包以图形模式初始化Knopflerfish,然后启动SenderDevice捆绑包和ReceiveService捆绑包。我想访问ReceiveService以在Java应用程序中使用接收到的对象。因此,我需要访问ReceiveService捆绑包上下文

您似乎正在使用嵌入Java应用程序中的OSGi框架—您是如何启动该框架的

标准方法是

Framework framework = FrameworkFactory.newFramework(props);
然后,您可以从
框架
实例获取系统包上下文:

BundleContext ctx = framework.getBundleContext();

在您的示例中,
ReceiverService
很可能是由应用程序类加载器加载的,而不是由bundle类加载器加载的,因此
FrameworkUtil
无法确定加载此类的bundle。

您似乎在使用嵌入Java应用程序中的OSGi框架-您是如何启动该框架的

标准方法是

Framework framework = FrameworkFactory.newFramework(props);
然后,您可以从
框架
实例获取系统包上下文:

BundleContext ctx = framework.getBundleContext();

在您的示例中,
ReceiverService
很可能是由应用程序类加载器加载的,而不是由bundle类加载器加载的,因此
FrameworkUtil
无法确定加载此类的bundle。

您似乎在使用嵌入Java应用程序中的OSGi框架-您是如何启动该框架的

标准方法是

Framework framework = FrameworkFactory.newFramework(props);
然后,您可以从
框架
实例获取系统包上下文:

BundleContext ctx = framework.getBundleContext();

在您的示例中,
ReceiverService
很可能是由应用程序类加载器加载的,而不是由bundle类加载器加载的,因此
FrameworkUtil
无法确定加载此类的bundle。

您似乎在使用嵌入Java应用程序中的OSGi框架-您是如何启动该框架的

标准方法是

Framework framework = FrameworkFactory.newFramework(props);
然后,您可以从
框架
实例获取系统包上下文:

BundleContext ctx = framework.getBundleContext();

在您的示例中,
ReceiverService
很可能是由应用程序类加载器加载的,而不是由bundle类加载器加载的,因此
FrameworkUtil
无法确定加载此类的bundle。

从何处加载ReceiveService接口?它是从捆绑中导出的吗?不幸的是,系统包无法从普通包导入包

由于您正在嵌入OSGi,并在外部应用程序和内部框架之间就服务进行通信,因此接口包必须由外部应用程序加载,并使用
org.OSGi.framework.system.packages.extra
属性导出。此属性通过提供给
FrameworkFactory.newFramework()
的映射传递。然后,普通捆绑包可以导入服务接口并发布服务


要从外部应用程序访问
BundleContext
,必须在
Framework
对象上使用
getBundleContext()
方法。这将返回系统捆绑包的
BundleContext

从何处加载ReceiveService接口?它是从捆绑中导出的吗?不幸的是,系统包无法从普通包导入包

由于您正在嵌入OSGi,并在外部应用程序和内部框架之间就服务进行通信,因此接口包必须由外部应用程序加载,并使用
org.OSGi.framework.system.packages.extra
属性导出。此属性通过提供给
FrameworkFactory.newFramework()
的映射传递。然后,普通捆绑包可以导入服务接口并发布服务


要从外部应用程序访问
BundleContext
,必须在
Framework
对象上使用
getBundleContext()
方法。这将返回系统捆绑包的
BundleContext

从何处加载ReceiveService接口?它是从捆绑中导出的吗?不幸的是,系统包无法从普通包导入包

由于您正在嵌入OSGi,并在外部应用程序和内部框架之间就服务进行通信,因此接口包必须由外部应用程序加载,并使用
org.OSGi.framework.system.packages.extra
属性导出。此属性通过提供给
FrameworkFactory.newFramework()
的映射传递。然后,普通捆绑包可以导入服务接口并发布服务


要从外部应用程序访问
BundleContext
,必须在
Framework
对象上使用
getBundleContext()
方法。这将返回系统捆绑包的
BundleContext

从何处加载ReceiveService接口?它是从捆绑中导出的吗?不幸的是,系统包无法从普通包导入包

由于您正在嵌入OSGi,并在外部应用程序和内部框架之间就服务进行通信,因此接口包必须由外部应用程序加载,并使用
org.OSGi.framework.system.packages.extra
属性导出。此属性通过提供给
FrameworkFactory.newFramework()
的映射传递。然后,普通捆绑包可以导入服务接口并发布服务


要从外部应用程序访问
BundleContext
,必须在
Framework
对象上使用
getBundleContext()
方法。这将返回系统捆绑包的
BundleContext

I使用预先安装的捆绑包以图形模式初始化Knopflerfish,然后启动SenderDevice捆绑包和ReceiveService捆绑包。我想访问ReceiveService以在Java应用程序中使用接收到的对象。