public static boolean findServiceLater( final ServiceBroker sb, final Class cl, final Object requestor, final Callback cb) { final Object req = (requestor == null ? ServiceFinder.class : requestor); if (sb.hasService(cl)) { Service s = (Service) sb.getService(req, cl, null); cb.foundService(s); return true; } ServiceAvailableListener sal = new ServiceAvailableListener() { public void serviceAvailable(ServiceAvailableEvent ae) { if (cl.isAssignableFrom(ae.getService())) { Service s = (Service) sb.getService(req, cl, null); cb.foundService(s); // sb.removeServiceListener(this); } } }; sb.addServiceListener(sal); return false; }
@Override public void load() { super.load(); // we want the servlet service, but it's loaded after the MTS. // Also, we want the agent's proxy to the node-level // ServletService. The blackboard is loaded late enough, so we // wait 'til then... if (sb.hasService(BlackboardService.class)) { registerServlet(); } else { ServiceAvailableListener sal = new ServiceAvailableListener() { public void serviceAvailable(ServiceAvailableEvent ae) { Class<?> cl = ae.getService(); if (BlackboardService.class.isAssignableFrom(cl)) { registerServlet(); } } }; sb.addServiceListener(sal); } }