java - OSGi-框架只会注册某些服务

标签 java osgi

我的项目由以下 bundle 组成,它们使用给定的 .xml 文件定义声明性服务:

characterbuilder.gui

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="characterbuilder.gui">
   <implementation class="characterbuilder.gui.ApplicationFrame"/>
   <reference bind="setMenuScripting" cardinality="1..1" interface="characterbuilder.scripting.menu.IMenuScripting" name="IMenuScripting" policy="dynamic"/>
</scr:component>

characterbuilder.pluginmanager

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="characterbuilder.pluginmanager">
   <implementation class="characterbuilder.pluginmanager.implementation.PluginManager"/>
</scr:component>

characterbuilder.scripting

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="characterbuilder.scripting">
   <implementation class="characterbuilder.scripting.internal.CharacterBuilderScripting"/>
   <reference bind="setGameSystem" cardinality="1..1" interface="characterbuilder.systemmanager.IGameSystem" name="IGameSystem" policy="static"/>
   <reference bind="setXMLHandler" cardinality="1..1" interface="characterbuilder.xmlhandling.xmlhandler.IXMLHandler" name="IXMLHandler" policy="static"/>
   <reference bind="setPluginManager" cardinality="1..1" interface="systemplugin.manager.IPluginManager" name="IPluginManager" policy="static"/>
   <service>
      <provide interface="characterbuilder.scripting.menu.IMenuScripting"/>
   </service>
</scr:component>

characterbuilder.xml处理

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="character.builder.xml.handling">
   <implementation class="characterbuilder.xmlhandling.implementation.XMLHandler"/>
   <service>
      <provide interface="characterbuilder.xmlhandling.xmlhandler.IXMLHandler"/>
   </service>
</scr:component>

characterbuilder.dummysystem

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="DummySystem">
   <implementation class="dummygamedefinition.systemmanager.DummySystemManager"/>
   <service>
      <provide interface="characterbuilder.systemmanager.IGameSystem"/>
   </service>
</scr:component>

当我从控制台使用“services”命令获取所有已注册的服务时,只有 IXMLHandler 和 IGameSystem 被注册。

在过去的三天里,我花了十几个小时试图让这些服务正常工作,但我的情况比开始时更糟糕,因为我仍然不知道该做什么以及何时开始开始我并没有感到那么沮丧和愚蠢。

最佳答案

由于没有 Apache Felix Webconsole,您浪费了很多时间(正如太多 OSGi 用户所做的那样)与 aQute Xray 。 Xray 是安装后 Web 控制台中的一个选项卡,它以颜色显示 DS 组件、 bundle 和服务的状态。当 bundle 生成日志消息时,还会出现登录警告。 Xray 有大量工具提示,只需将鼠标悬停在 bundle 、日志警告、服务或组件上即可获取更多信息。您也可以单击这些对象。这些工具也适用于 Equinox,因为它是 100% OSGi。

附注我希望您不是真的还在使用 XML 文件而不是注释吗?

关于java - OSGi-框架只会注册某些服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610663/

相关文章:

java - 我应该如何写三个点?

java - 如何从 java 应用程序使用 OSGi

java - Bundlor 无法与 Java 8 lambda 正常工作

maven - 在 Apache karaf 上的 bundle 中使用 Apache Camel

java - HBase & JDBC 连接

java - 如何从控制台读取字符串? NoSuchElementException : No line found

java - OSGI插件访问resources.jar中的文件

osgi - 如何使用 AEM Form 下拉列表中的项目加载路径

Java附加到文本文件在另一个系统上的工作方式不同?

java - 用于独立 java 项目的 Maven Archetype