El driver JDBC d'Oracle, la versió purament Java (la versió thin), no fa servir la variable d'entorn
NLS_LANG des de la versió 10g. En comptes d'això dedueix els valors de NLS de l'idioma del sistema operatiu. La manera de canviar l'idioma consisteix en passar els següents paràmetres a la VM:-Duser.language=en -Duser.country=ENArrencant amb aquest valors l'ordenació anava bé, per que agafava el
NLS_LANGUAGE, NLS_TERRITORY, NLS_SORT i NLS_COMP als valors que esperàvem. Experimentant una mica, vaig veure que amb NLS_SORT si poses BINARY és el més eficient, però si vols que ignori majúscules i minúscules pots fer BINARY_CI i si vols que ignori accents pots fer BINARY_AI. Però això no és l'important.El cas és que no volíem haver de llençar les nostres màquines virtuals amb paràmetres especials, així que vam mirar de configurar-ho directament a l'aplicació.
La teoria diu que
-Dparam=valor és el mateix que des del Java System.setProperty("param", "valor"), però no és així pel que fa a la resolució del NLS. I vam trigar molt en descobrir-ho. En aquest cas el que realment l'interessa és el "default locale" i no aquestes variables d'entorn (que només es fan servir per definir el default locale. Així que tal i com apunten en aquest tutorial de java, el que cal és fer cridar a Locale.setDefault(). En el nostre cas Locale.setDefault(Locale.ENGLISH).Com això ho volíem fer des de Spring hem pogut aprofitar el que comentava algú al fòrum de Spring.
Ara ja no depenem dels paràmetres d'inicialització.
Conclusions:
- Les proves automàtiques t'ajuden a trobar els errors ben aviat
- La configuració de NLS amb Java és un mal de cap
 
 
2 comments:
Demà et passo la NOTE que varem fer l'Albert i jo per probar aquestes cosetes... efectivament, el JDBC driver.. hereda del locale.
Jomo
At http://support.oracle.com
1) Note 375807.1 - Sample Application to Troubleshoot NLS Issues in Application Server / OC4J / JDBC
2) Note 351919.1 - Globalization Support : JavaVM, Oracle JDBC Driver, NLS_LANG and OC4J
3) Note 98065.1 - How to Change NLS_LANG Settings With JDBC Client Applications
;)
Post a Comment