[
https://issues.apache.org/jira/browse/DERBY-3320?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mamta A. Satoor updated DERBY-3320:
-----------------------------------
Attachment: DERBY_3320_Collator_Support_Check_stat_v2.txt
DERBY_3320_Collator_Support_Check_diff_v2.txt
I am attaching a patch DERBY_3320_Collator_Support_Check_diff_v2.txt which will
make sure during the database create time that Collator support is available
from the JVM otherwise an exception will be thrown. As for the subsequent boot
times, the Collator support from the JVM will be checked the first time there
is a need to access Collator functionality. This may or may not be at the
database boot time. The first access to Collator object can happen under 2
scenarios 1)during database boot time because Store has to recover the database
or 2)if user exectues a SQL which requires territory based collation.
In order to do the check for Collator support during database create time, I
had to add code in DataValueFactoryImpl.boot to look at the collation attribute
on the JDBC url, verify it's value and see if user has requested territory
based collation. If yes, then verify that JVM supports the Collator for the
database's locale. Because the attribute value validation happens here in
DVF.boot, we do not need to do the value validation again in
DataDictionaryImpl.boot and hence I removed the collation attribute value
validation from DataDictionaryImpl.boot.
Also, BasicDatabase.boot does not have to make special call to DVF.setLocal to
set the locale on DVF because it now happens in DVF.boot method. This makes the
code fit more into the existing boot machinery rather than relying on special
calls like DVF.setLocale.
The Collator support is being done in a new method DVF.verifyCollatorSupport
and this method gets called both during database create time and during
subsequent database boot times, it gets called when the Collator object is
accessed for the first time.
I have added a new error message for unavailability of Collator and the message
reads as follows
Collator support not available from the JVM for the database's locale '{0}'.
If anyone has any other suggestion for the error message, please let me know.
Lastly, I could use some help in coming up with test cases for database
recovery such that the Collator support is available during create time, then
the database is crashed and during next boot time, store will try to recover
the database but should run into the situation that the Collator support is no
more available. This kind of test case will make sure that Collator
unavailability exception is thrown properly to the user even in case of store
recovery.
As for the non-recovery database case, I think we have test cases
already(CollationTest and CollationTest2) in place which run into problem on
phoneME. With revision 618507, we changed those tests to first check if the
collation support is available or not and run the tests only if the support is
available. These tests can be modified to not do the check. Instead let
database create fail with the new error message on phoneME and other platforms
that do not support the Collator for locales required by CollationTest and
CollationTest2. I can go ahead and make those changes to the test once I know
that the attached patch looks good to the community.
Please send in your comments, if any, on the attached patch.
> 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_Collator_Support_Check_diff_v2.txt,
> DERBY_3320_Collator_Support_Check_stat_v2.txt,
> DERBY_3320_not_ready_for_commit_diff_v1.txt,
> DERBY_3320_not_ready_for_commit_stat_v1.txt, 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.