当前位置: 首页 > 面试题库 >

嵌入式OSGi框架中的消费服务

严远
2023-03-14
问题内容

我已经嵌入了Felix。我有一些API捆绑包和Impl。API导出接口C。Impl导入该接口并在激活器中注册impl。现在我要获取C隐含的OSGi

  FrameworkFactory ff = new FrameworkFactory();
  ...
  BundleContext bc = fwk.getBundleContext();
  ...
  final ServiceReference[] serviceReferences = bc.getServiceReferences(C.class.getName(), "(objectclass=" + C.class.getName() + ")");
  for(ServiceReference serviceReference : serviceReferences){
     final Object service = bc.getService(serviceReference);
     ...
  }

现在,我想与它进行交互。我可以反思

     System.out.println(service.getClass().getMethod("some").invoke(service)); //using

但是我不能投

     System.out.println(service instanceof C); //prints false

我猜这来自不同的ClassLoader。但是我该如何解决呢?我们如何从外部与OSGi上下文进行交互?或者我们可以将其全部放入OSGi容器中?


问题答案:

如果要嵌入OSGi,则该服务的API(即接口“
C”)必须对外部应用程序可见,并通过系统捆绑包导出将其导出到OSGi。外部应用程序无法从OSGi框架内包含的包中导入软件包。



 类似资料:
  • 我有一个简单的java项目,叫做服务器。此外,我有一个osgi api项目,它定义了一个接口BlockProvider。接下来,我有一个osgi声明性服务项目,其中有一个实现BlockProvider的服务。 在我的java项目服务器中,我有一个嵌入式osgi框架(在我的例子中是felix)。 我创建了一个bundleactivator,它安装gogo osgi捆绑包、scr捆绑包、我的api项目

  • 我们正在使用ApacheFelix(版本4.4.1)作为嵌入式OSGi框架。提供该框架的主要应用程序使用作为日志框架。存在对log4japi和log4jcore的依赖。当然,当主应用程序启动时,也会加载和配置Log4j2。主部件中触发的所有日志消息都正确写入已配置的Appender。 现在是重点。加载的所有bundle都应该能够使用与主应用程序相同的配置和日志上下文。我试图做的是提供所有Log4j

  • 我刚刚开始使用动物园管理员在卡拉夫的DOSGi。我在Karaf的一个实例中提供服务,在另一个实例中提供消费者。服务端运行良好。一旦发布,我可以在安装了Zookeeper服务器的Karaf控制台中使用log:display命令查看它,并且我也可以通过浏览器访问wsdl。问题出在消费端。当服务启动时,它应该写一条消息(下面的ref代码),但是它从来没有发生。消费者代码: 和component.xml:

  • 我试图在EclipseIDE中运行Equinox的区域有向图束。当我在OSGi命令提示符下使用start命令运行相关的bundle时,我收到一个错误,表示无法解析该bundle。原因:缺少约束:导入包:org.osgi.framework.hooks。捆version=“1.0.0”。为了找出框架中的现有版本,我尝试了命令p org.osgi.framework.hooks.bundle。结果显示

  • 我正在学习《行动中的Spring》第四版第5章,但是我被第一个例子困住了。 以下是我的Eclipse Luna项目结构: 如果我将此项目作为Spring Boot应用程序运行,则会引发异常: 我怎样才能解决这个问题? 所有文件的内容: 随地吐痰。爪哇: SpittrWebAppInitializer.java: 网络配置。爪哇: RootConfig。爪哇: HomeController.java

  • 我试图在Xamarin iOS上使用来自BLE chip bender(北欧)的原生iOS框架。此框架(iOS Native-Swift):https://github.com/nordicsemiconductor/iOS-dfu-library/tree/master/documentation > 我用那些iOS库做了一个胖框架。我看了这位医生。https://developer.xamar