private <T> T waitForConfigurationRescan(Callable<T> action) { ConfigurationScanListener listener = new ConfigurationScanListener(); ListenerRegistration<ContainerLifecycleListener> registration = runnable.furnace .addContainerLifecycleListener(listener); T result = Callables.call(action); while (runnable.furnace.getStatus().isStarting() || !listener.isConfigurationScanned()) { try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException("Sleep interrupted while waiting for configuration rescan.", e); } } registration.removeListener(); return result; }