View Javadoc
1   package emissary.spi;
2   
3   import org.slf4j.Logger;
4   import org.slf4j.LoggerFactory;
5   
6   import java.util.ServiceLoader;
7   
8   /**
9    * Load SPI implementations to support initialization of the Emissary server.
10   * 
11   * <pre>
12   * - Loading is delegated to the {@link java.util.ServiceLoader}.
13   * - Configured via src/main/resources/META-INF/services/emissary.spi.InitializationProvider
14   * </pre>
15   */
16  public class SPILoader {
17  
18      private static final Logger logger = LoggerFactory.getLogger(SPILoader.class);
19  
20      public static void load() {
21          ServiceLoader<InitializationProvider> loader = ServiceLoader.load(InitializationProvider.class);
22  
23          loader.forEach(provider -> {
24              provider.initialize();
25              logger.info("Initialized {}", provider.getClass().getName());
26          });
27      }
28  
29      public static void unload() {
30          ServiceLoader<InitializationProvider> loader = ServiceLoader.load(InitializationProvider.class);
31          loader.forEach(InitializationProvider::shutdown);
32      }
33  
34  
35      private SPILoader() {}
36  }