0

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

角色生成器.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>

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

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

4

3 回答 3

1

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

PS我希望你不是真的还在使用XML文件而不是注释?

于 2013-09-04T11:26:56.413 回答
0

首先,注册这些服务的捆绑包是否已启动?我在同一个问题上猛烈抨击,却发现在默认运行配置中,Eclipse/Equinox 不会自动启动所有包。

于 2013-09-04T09:57:18.677 回答
0

正如我所看到的,characterbuilder.pluginmanager不提供任何服务,但characterbuilder.scripting 参考对IPluginManager有 1..1 静态参考,这在您的示例中似乎不存在。

调试应用程序的一个好方法(在 Web 控制台和 xray 旁边)是 OSGi 控制台。寻找不满意的服务以及不满意的原因。

最好的问候,迈克

于 2013-09-04T14:32:00.720 回答