@Override public int compareTo(final LifecycleHandler o) { if (target.getRegistrationOrdering() < o.getTarget().getRegistrationOrdering()) { return -1; } else if (target.getRegistrationOrdering() > o.getTarget().getRegistrationOrdering()) { return 1; } else { return Integer.valueOf(target.hashCode()).compareTo(Integer.valueOf(o.hashCode())); } } }
private Set<? extends KillbillService> findServices(final Set<Class<? extends KillbillService>> services, final Injector injector) { final Set<KillbillService> result = new HashSet<KillbillService>(); for (final Class<? extends KillbillService> cur : services) { log.debug("Found service {}", cur.getName()); try { final KillbillService instance = injector.getInstance(cur); log.debug("got instance {}", instance.getName()); result.add(instance); } catch (final ConfigurationException e) { if (!cur.getSimpleName().startsWith("Test")) { // The service has not implementation - this may be fine (e.g. tests), don't log the full stack trace logWarn("Failed to inject " + cur.getName(), null); } } catch (final ProvisionException e) { if (!cur.getSimpleName().startsWith("Test")) { logWarn("Failed to inject " + cur.getName(), e); } } } return result; }
@Test(groups = "fast") public void testHandlersOrdering() { final Set<KillbillService> services = new HashSet(); for (int i = 0; i < 100; i++) { int order = (i + 37) % 100; services.add(createKillBillService(String.format("yo-%d", order) , order)); } final DefaultLifecycle otherLifecycle = new DefaultLifecycle(services); final SortedSet<LifecycleHandler<? extends KillbillService>> handlers = otherLifecycle.getHandlersByLevel().get(LifecycleLevel.INIT_SERVICE); int prevOrdering = -1; for (LifecycleHandler<? extends KillbillService> h : handlers) { Assert.assertTrue(h.getTarget().getRegistrationOrdering() > prevOrdering); prevOrdering++; } }
private void doFireStage(final LifecycleHandlerType.LifecycleLevel level) { log.info("Killbill lifecycle firing stage {}", level); final Set<LifecycleHandler<? extends KillbillService>> handlers = handlersByLevel.get(level); for (final LifecycleHandler<? extends KillbillService> cur : handlers) { try { final Method method = cur.getMethod(); final KillbillService target = cur.getTarget(); log.info("Killbill lifecycle calling handler {} for service {}", cur.getMethod().getName(), target.getName()); method.invoke(target); } catch (final Exception e) { logWarn("Killbill lifecycle failed to invoke lifecycle handler", e); } } }