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