View Javadoc
1   /*-
2    * #%L
3    * io.earcam.instrumental.lade.jpms
4    * %%
5    * Copyright (C) 2018 earcam
6    * %%
7    * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8    * 
9    * You <b>must</b> choose to accept, in full - any individual or combination of 
10   * the following licenses:
11   * <ul>
12   * 	<li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13   * 	<li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14   * 	<li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15   * 	<li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16   * </ul>
17   * #L%
18   */
19  package io.earcam.acme.app;
20  
21  import java.util.ServiceLoader;
22  import java.util.stream.StreamSupport;
23  
24  import io.earcam.acme.api.AcmeApi;
25  
26  public class AcmeApp {
27  
28  	public static void main(String[] args)
29  	{
30  		Module module = AcmeApp.class.getModule();
31  		AcmeApi implementation = loadService(module);
32  
33  		String msg = implementation.greet(args[0]);
34  
35  		System.out.println(module + ": " + msg);
36  	}
37  
38  
39  	private static AcmeApi loadService(Module module)
40  	{
41  		ServiceLoader<AcmeApi> services = loadServiceLoader(module);
42  
43  		return StreamSupport
44  				.stream(services.spliterator(), false)
45  				.findFirst()
46  				.orElseThrow(NullPointerException::new);
47  	}
48  
49  
50  	private static ServiceLoader<AcmeApi> loadServiceLoader(Module module)
51  	{
52  		ModuleLayer layer = module.getLayer();
53  
54  		ServiceLoader<AcmeApi> services = (layer == null) ? ServiceLoader.load(AcmeApi.class) : ServiceLoader.load(layer, AcmeApi.class);
55  		return services;
56  	}
57  }