Допустим, у меня есть пакет, который хочет передать информацию всем своим слушателям. Учитывая, что я использую декларативные службы, в которых MyComponent
потребляет 0..n ComponentListeners
, у меня будет что-то вроде этого:
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);
}
}
Мои вопросы:
- Рекомендуется ли кардинальность 0..n? Единственный пример, который я нашел, был взят из учебника по Apache Felix, аналогичный приведенному выше.
- Считается ли подход наблюдатель/наблюдаемый хорошей практикой в OSGi?
- Если я хочу уведомить всех слушателей, я должен вызывать
listener.updateData(data);
в разных потоках для каждого слушателя, верно? Таким образом, я гарантирую, что все слушатели будут уведомлены одновременно.