Hi Peter,

Sorry for the delay in reply.  Still catching up on mails from vacation.

> On Aug 4, 2016, at 3:26 AM, Peter Levart <peter.lev...@gmail.com> wrote:
> 
> 
> On 08/04/2016 11:21 AM, Peter Levart wrote:
>> If the providing module declares the service type, then the consuming module 
>> will have an explicit dependency on the providing module, which also defeats 
>> the purpose of service provider's implicit coupling.
> 
> I take this back. The service type is resolved at runtime by the 
> ResourceBundle code using the consumer module's class loader and then 
> ResourceBundleProvider interface is used to invoke its method.

Exactly.

> But I still think that the "baseName" parameter to this method is superfluous.
> 

A resource bundle provider may provide different bundles, i.e. different base 
names and so it can implement multiple service interfaces.

> I also see now that using resource bundle service providers is necessary if 
> one wants to provide different modules for different languages covering a set 
> of bundles - each language in its own module. Normally, for "java.class" 
> format bundles, this would require per-language classes to be split among 
> multiple modules and this is not possible as split packages are prohibited. 
> With ResourceBundleProvider approach one can defined a ResourceBundleProvider 
> service type in say "main language" module together with a default 
> implementation and then various language implementations each in its own 
> module with own package(s). For example:
> 
> module consumer {
>    uses my.BundleProvider;
> }
> // containing:
> package consumer;
> public class Main {
>    public static void main(String ... args) {
>        ResourceBundle.getBundle("my.Bundle", Locale.getDefault());
>    }
> }
> 
> 
> module my.bundle {
>    exports my;
>    provides my.BundleProvider with my.bundle.Bundle.Provider;
> }
> // containing:
> package my;
> public interface BundleProvider extends java.util.spi.ResourceBundleProvider 
> {}
> 
> 
> module my.bundle.en {
>    requires my.bundle;
>    provides my.BundleProvider with my.bundle.en.Bundle.Provider;
> }
> 
> 
> module my.bundle.de {
>    requires my.bundle;
>    provides my.BundleProvider with my.bundle.de.Bundle.Provider;
> }
> 
> 
> etc…

jdk/test/java/util/ResourceBundles/modules have a few examples.

Perhaps we should improve the javadoc of ResourceBundleProvider and code 
example to make this clearer?

Mandy

Reply via email to