首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将OSGi服务绑定到0.n基数中的良好实践?

将OSGi服务绑定到0.n基数中的良好实践?
EN

Stack Overflow用户
提问于 2014-09-04 04:21:44
回答 2查看 726关注 0票数 0

假设我有一个包,它希望向所有的侦听器广播一个信息。考虑到我使用的是声明性服务(其中MyComponent正在使用0..n ComponentListeners ),我将有如下所示:

代码语言:javascript
复制
public class MyComponent {

    private List<ComponentListener> listeners;
    private String data;

    public MyComponent() {
        listeners = new ArrayList<>();
    }

    // Someone else will call this
    public void updateData(String newData) {
        data = newData;
        notifyAll(data);
    }

    // Broadcasts the data to all listeners
    private void notifyAll(String data) {
        for (ComponentListener listener : listeners) {
            listener.updateData(data);
        }
    }

    // Declarative Service binding methods
    public void bindComponentListener(ComponentListener cl) {
        listeners.add(cl);
    }

    public void unbindComponentListener(ComponentListener cl) {
        listeners.remove(cl);
    }
}

我的问题是:

  1. 推荐0.n基数吗?我发现的唯一一个例子来自一个Apache教程,它与上面的类似。
  2. 观察者/可观察的方法在OSGi中被认为是一种良好的实践吗?
  3. 如果我想通知所有侦听器,我应该为每个侦听器调用不同线程中的listener.updateData(data);,对吗?这样,我就可以确保所有侦听器同时得到通知。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-04 11:08:26

如果您的主要目标是广播信息,您也可以使用OSGi事件管理,felix也有一个快速教程。通过服务处理自己的侦听器可能是被认为有害

票数 2
EN

Stack Overflow用户

发布于 2014-09-04 05:07:58

在OSGi中,通过让其他包实现和发布侦听器服务来实现观察者是一个很好的实践。此外,使用声明性服务来管理列表也很好。我唯一不确定的是,是否对每个侦听器使用一个线程是有意义的。问题是,您在系统上创建了大量线程和大量负载。对于许多听众来说,这也可能是很糟糕的。因此,替代方案是只使用相同的线程或使用线程池。线程池将限制系统上的负载,从而使您的方法更具可伸缩性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25657257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档