gpt4 book ai didi

osgi - Eclipse RCP 4 通过声明性服务使用包

转载 作者:行者123 更新时间:2023-12-04 18:11:24 24 4
gpt4 key购买 nike

我已经编写了一个 OSGi 包以在我的 eclipse 4 rcp 应用程序中使用它。如果我添加依赖项,在我的激活器中注册这些服务并将其注入(inject)我的类中,则服务的使用工作正常。

在活化剂中

IUserService service = new TestUserService();
context.registerService(IUserService.class.getName(), service, null);

在我的课上
@Inject
IUserService service;

service.getSth();

我读到通过声明性服务使用捆绑包应该是更好的方法。所以改变了我的实现。
我在我的包中创建了一个组件定义来提供我的服务:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="usermanagement.test">
<implementation class="usermanagement.test.TestUserService"/>
<service>
<provide interface="usermanagement.IUserService"/>
</service>
</scr:component>

然后我从我的激活器中删除了服务注册并创建了一个服务消费者类:
public class UserServiceConsumer {

private IUserService service;

public synchronized void setQuote(IUserService service) {
this.service = service;
}

public synchronized void unsetQuote(IUserService service) {
if (this.service == service) {
this.service = null;
}
}

}

和另一个组件定义:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="UserServiceConsumer">
<implementation class="services.UserServiceConsumer"/>
<reference bind="setService" cardinality="1..1" interface="usermanagement.IUserService" name="IUserService" policy="static" unbind="unsetService"/>
</scr:component>

在这些修改之后,我的服务注入(inject)不再起作用。问题是注入(inject)的服务引用每次都是 NULL。

有谁知道为什么?我忘了什么吗?

非常感谢!

最佳答案

我可以建议一些你可以做的事情来调试。

  • 你真的在运行时实现了 scr 吗? SCR(声明式服务的另一个名称)不包含在 Equinox 核心中,因此您需要包含它。大多数人使用 Felix SCR 捆绑包 - 它会非常高兴地放在 Equinox 之上。
  • 由于声明式服务只使用服务,您可以一次更改一半的应用程序,以确定是服务消费还是注册不起作用。
  • 您还可以使用 Equinox 控制台检查您的服务注册。使用 'ss' 来标识您的捆绑包,然后使用 'bundle [no]' 来查看注册和使用的服务。如果您使用的是 Felix SCR,还有 Equinox 控制台扩展,因此您可以使用“scr list”查看捆绑包尝试注册的所有服务(及其状态),并使用“scr info”查看特定服务的更多详细信息服务。
  • 关于osgi - Eclipse RCP 4 通过声明性服务使用包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13435524/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com