在 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类不是很方便吗?
最好的问候,迈克