[ 
https://issues.apache.org/jira/browse/DERBY-3320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12562434#action_12562434
 ] 

Vemund Østgaard commented on DERBY-3320:
----------------------------------------

I am not sure if there is an easier way to check for Locale support, I used 
your method when making a patch for the tests to avoid running them when the 
locale to test with was not available. It has not been committed yet, though.

I think maybe that Locale.getAvailableLocales() doesn't necessarily have to 
return the same list of supported Locales as Collator.getSupportedLocales(), or 
other locale-dependent classes with the getSupportedLocales() method. So maybe 
it is important to check what returned by the functionality that will be used, 
like Collator.

Take a look at the javadoc for java.util.spi.LocaleServiceProvider, it seems 
all the different locale-dependant provider classes are subclasses of this. The 
second last paragraph says:

Locale sensitive factory methods and methods for name retrieval in the 
java.text and java.util packages invoke service provider methods when needed to 
support the requested locale. The methods first check whether the Java runtime 
environment itself supports the requested locale, and use its support if 
available. Otherwise, they call the getAvailableLocales() methods of installed 
providers for the appropriate interface to find one that supports the requested 
locale. If such a provider is found, its other methods are called to obtain the 
requested object or name. If neither the Java runtime environment itself nor an 
installed provider supports the requested locale, a fallback locale is 
constructed by replacing the first of the variant, country, or language strings 
of the locale that's not an empty string with an empty string, and the lookup 
process is restarted. In the case that the variant contains one or more '_'s, 
the fallback locale is constructed by replacing the variant with a new variant 
which eliminates the last '_' and the part following it. Even if a fallback 
occurs, methods that return requested objects or name are invoked with the 
original locale before the fallback.The Java runtime environment must support 
the root locale for all locale sensitive services in order to guarantee that 
this process terminates.

So, I think you will have to go through the list of supported locales for the 
functionality that will be used. Maybe that is only Collator?

Something to consider is also whether you need an exact match to consider a 
locale supported for the purpose of the Collator, or if it is enough to get a 
language match? For instance, if looking for en_GB, is en_US good enough? Maybe 
if a partial match is found, the DB should be allowed to boot but write a 
warning about it only finding a partial match?

> Database creation and boot should fail if collation=TERRITORY_BASED and the 
> selected locale is not supported
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3320
>                 URL: https://issues.apache.org/jira/browse/DERBY-3320
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.4.0.0
>         Environment: Java ME:
> Product: phoneME Advanced (phoneme_advanced_mr2-b34)
> Profile: Foundation Profile Specification 1.1
> Linux 2.4.21-40.ELsmp #1 SMP Thu Feb 2 22:14:12 EST 2006 i686 athlon i386 
> GNU/Linux
>            Reporter: Vemund Østgaard
>            Assignee: Mamta A. Satoor
>         Attachments: DERBY_3320_Repro.java
>
>
> A problem I've discovered when testing with the phoneME advanced platform is 
> that the collationtests expect other locales than Locale.US to be available 
> on the platform that is used for the test, and for phoneME advanced (when 
> compiled as foundation profile) only Locale.US is available. From the jdk1.6 
> javadoc of Collator.getAvailableLocales() I see that only Locale.US is 
> strictly required:
> public static Locale[] getAvailableLocales()
>     Returns an array of all locales for which the getInstance methods of this 
> class can return localized instances. The returned array represents the union 
> of locales supported by the Java runtime and by installed CollatorProvider 
> implementations. It must contain at least a Locale instance equal to 
> Locale.US.
>     Returns:
>         An array of locales for which localized Collator instances are 
> available.
> This led me to thinking about how Derby should behave if created/booted with 
> collation=TERRITORY_BASED and territory=<some unsupported locale>. I'm not 
> sure what the consequences could be if the database is first created on a 
> platform that supports whatever locale is set and later booted with one that 
> doesn't, or created on a platform missing support and later booted with one 
> that has. In any case I think it may confuse a user needlessly to see the 
> database boot successfully with his collation setting and later behave in a 
> way he does not expect.
> Opinions voiced on the derby-dev list are that both database creation and 
> boot should fail if collation=TERRITORY_BASED and the selected locale is not 
> supported.
> If a change like this is implemented, the collationtests should be changed to 
> verify correct behavior also if they are executed in an environment were some 
> of the tested locales are not supported.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to