2017-08-16 4 views
-1

J'ai un serveur tomcat5 qui se connecte à une base de données Oracle et je souhaite spécifier le fuseau horaire de la session Oracle. J'ai réussi à définir en ajoutant JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Europe/Zurich" au fichier de configuration tomcat5.conf. Le problème est quand j'interroge dans Oracle SELECT SESSIONTIMEZONE FROM dual; Je reçois +02:00Comment définir la zone de fuseau horaire Oracle dans tomcat

Actuellement ceci est CORRECT, cependant cela deviendra faux en hiver quand l'heure d'été est éteinte - sauf si je redémarre le serveur Tomcat.

Comment est-ce que je peux placer le fuseau horaire au nom de région (par exemple Europe/Zurich) au lieu du décalage UTC (comme +02:00)? Je voudrais éviter d'exécuter explicitement ALTER SESSION SET TIME_ZONE = ...; dans mon Oracle.

+0

Est-il possible que vous ayez un déclencheur de connexion à la base de données qui définit explicitement le fuseau horaire de la session sur +02: 00? Ou - peut-être plus probablement - quelque chose d'autre dans la configuration perd ou remplace ce paramètre? Quel fuseau horaire de session voyez-vous si vous vous connectez au même DB et compte via SQL \ * Plus? –

+0

La même que celle définie par la variable d'environnement (ou les paramètres du registre) 'ORA_SDTZ' - comme prévu. –

+0

Logon trigger serait une solution, mais dans ce cas, je resterais sur 'ALTER SESSION SET TIME_ZONE = ...; 'dans mon code PL/SQL. Mis à part que je n'ai pas les autorisations pour créer des déclencheurs de base de données sur cette base de données. –

Répondre

0

Sérieusement, Tomcat5? Tomcat 5.5 a été decommissioned en 2012. Eh bien, à part ça: je vous recommande de résoudre ce problème d'une manière différente: Stocker des données infestées par Timezone dans le backend est un gros gâchis, toujours. Ainsi, vous devriez toujours stocker purement UTC et ne pas vous soucier de l'heure d'été, de la géolocalisation de l'utilisateur ou du fuseau horaire actuel, sauf si vous présentez les données à l'utilisateur. Seulement alors (et en entrée) pouvez-vous le relier au fuseau horaire actuel pour l'utilisateur actuel et transformer en UTC en conséquence.

Ainsi, la question que vous posez pourrait sembler logique, mais conduira à beaucoup de la douleur plus tard. Sauvez-vous la douleur et allez UTC sur le backend.

Vous savez déjà comment régler le fuseau horaire par défaut de Tomcat, vous pouvez aussi être capable de gérer des fuseaux horaires spécifiques à l'utilisateur, mais c'est une bête complètement différente.

+0

Oui, je sais que c'est vieux. C'est une application tierce qui n'est plus maintenue, donc la mise à niveau serait un plus gros projet. Quoi qu'il en soit, cela fonctionne comme vous l'avez proposé mais comment présenter des valeurs correctes si le fuseau horaire n'est pas correctement défini pour l'utilisateur actuel (c'est-à-dire l'utilisateur de tomcat), c'est ce que j'essaie de réaliser. –

+0

Si l'utilisateur n'a pas configuré son fuseau horaire, affichez-le par défaut, y compris un indicateur pour le fuseau horaire. Je pourrais aussi demander: comment décidez-vous actuellement quel fuseau horaire choisir? –

+0

Le fuseau horaire que je dois choisir est "Europe/Zurich". Le problème est, je ne suis pas en mesure de dire cela l'application, resp. la base de données. Quelque part, il change automatiquement à "+02: 00", ce qui n'est pas la même chose! Eh bien, à partir d'aujourd'hui, cela n'a pas d'importance, mais à la fin d'octobre, ça ira. –