public interface NodeManager {
void addNode(Node node);
void removeNode(Node node);
List<Node> getNodes();
}
@Component
public class NodeManagerImpl implements NodeManager {
private List<Node> nodes;
@Activate
public void activate() {
nodes = new ArrayList<>();
}
@Override
public void addNode(Node node) {
nodes.add(node);
}
@Override
public void removeNode(Node node) {
nodes.remove(node);
}
@Override
public List<Node> getNodes() {
return nodes;
}
}
public interface StateProvider {
Map<String, Object> getNodeState(Node node);
}
@Component
public class StateProviderImpl implements StateProvider {
@Reference
private NodeManager nodeManager;
@Override
public Map<String, Object> getNodeState(Node node) {
// ...
return node.getState();
}
}
@Component
public class ClusterMonitor {
@Reference
private StateProvider stateProvider;
@Activate
public void activate() {
// ...
}
@Deactivate
public void deactivate() {
// ...
}
public void checkNodes() {
List<Node> nodes = nodeManager.getNodes();
for (Node node : nodes) {
Map<String, Object> state = stateProvider.getNodeState(node);
// ...
}
}
}
Service-Component: *