gpt4 book ai didi

java - 在 OSGi 中延迟服务注册。如何正确地做

转载 作者:行者123 更新时间:2023-11-30 11:29:48 24 4
gpt4 key购买 nike

在 OSGi 中使用声明式服务时,我遇到了一个特殊的用例:

有时您希望 ds 组件在长时间操作完成后立即注册服务。通常这不是问题,因为服务将在激活方法完成后注册。但是,有时需要在 activate 方法中打开一个线程(为了避免线程阻塞)并在线程完成其工作后注册服务,例如

@Component
public class MyClass implements MyService {

private ExecutorService executor = Executors.newCachedThreadPool();

@Activate
public void start(final BundleContext context) {
executor.execute(new Runnable() {

@Override
public void run() {

... // doing something for long

context.registerService(MyService.class, MyClass.this, null);
}
});
}
}

我们想出了一个 util 类来做这件事(并涵盖了诸如组件在线程仍在运行时停止等问题)。有没有更好的方法来做这样的事情?如果没有,在框架中加入这样一个util类岂不是很方便?

最好的问候,迈克

最佳答案

DS 不直接支持此用例。您使用 BundleContext 显式注册服务的解决方案是最可行的。

您还需要注意防止 DS 在您的激活方法完成后立即自动注册服务。您应该通过将 @Component 注释上的 provide 属性设置为空数组来执行此操作:

@Component(provide = {})

或者,不让组件类直接实现服务接口(interface);使用类似内部类的东西。

关于java - 在 OSGi 中延迟服务注册。如何正确地做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18126741/

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