Another module system question
Alan.Bateman at oracle.com
Mon Feb 20 19:48:47 UTC 2017
On 20/02/2017 19:15, Langer, Christoph wrote:
> However, the main issue I have with this approach is: When is the time that my service from the second module 'b' will be available and registered? I assume, module 'a' will load first, then 'b'. So, when I use some static class initialization as the place in 'a' where I try to load the service from 'b', I guess the service couldn't be available yet. Is there some module system initialization hook, where I could plug in and then assume the service from 'b' is ready? Or should I maybe add a static class initializer in 'a' which would try to resolve the implementing service from 'b' in a loop until it is ready?
Declaring the `uses` and `provides` and deploy the modules on the module
path should be enough. When the consumer module (the module with `uses`)
is resolved then it will trigger any providers to be resolved. The
resolved modules are loaded eagerly (meaning they are defined to the VM)
but there is nothing actually loaded. When you invoke ServiceLoader to
get a stream or to iterate over the providers then it will load the
provider from `b`. It's probably best to just try it out as it's easy to
get something working. Often the hard bit is deciding on the service
interface and choosing the methods to expose to allow a consumer select.
More information about the jigsaw-dev