@Override
    public void applicationActivated(ApplicationInfo application) {
        Set<HostName> newHostnames = application.getModel().getHosts().stream()
                .map(HostInfo::getHostname)
                .map(HostName::new)
                .collect(Collectors.toSet());

        var reference = toApplicationInstanceReference(application.getApplicationId());

        Set<HostName> oldHostnames = hostnamesByReference.get(reference);
        if (!Objects.equals(newHostnames, oldHostnames)) {
            hostnamesByReference.put(reference, newHostnames);
            listener.onApplicationActivate(reference, newHostnames);
        }
    }
Allows a {@link ServiceHostListener} to register with the duper model as a {@link DuperModelListener}.

<p>This class is not thread-safe: As with the DuperModelListener, events from the duper model
happens within an exclusive duper model lock.</p>
service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapter.java