TZ Games: игры с временными зонами

     Осенью 2011 года в России, Белоруссии  и на Украине произошли изменения часовых зон. Во всех часовых поясах России и Белоруссии произошли два события:

1. К стандартному времени на постоянной основе прибавился ещё один час.

2. Отменены сезонные переводы часов (т.е. переход на летнее время и обратно).

     Например, у часовой зоны Europe/Moscow до принятия изменений было два часовых пояса: летнее дискретное время MSD = UTC+4 и зимнее, стандартное время MSK = UTC+3. После изменений у этой зоны остался один общий часовой пояс, именующийся MSK и равный UTC+4. Другие временные зоны, использующиеся на территории РФ, изменились аналогичным образом.

   Подробнее об изменении часовых зон и чем это грозит администраторам/разработчикам можно прочитать в этой интересной статье. Для нас, как для администраторов WebSphere, главными проблемами являются: перевод часов в JVM и использование корректного часового пояса.

     Для корректировки временных зон в JVM, IBM разработала утилиту IBM Time Zone Update Utility for Java (JTZU).

     Эта утилита производит поиск и обновление всех IBM SDK и JRE в системе. JTZU может работать в двух режимах:

  • Discovery mode – ищет экземпляры Java, которые нуждаются в обновлении, и формирует подробный лог-файл, с текущими параметрами временных зон.
  • Patch mode – обновляет экземпляры Java в соответствии с изменениями временных зон.

Вот обычная последовательность действий по обновлению JVM с помощью JTZU:

1. Перейдите по ссылке:

http://www.ibm.com/developerworks/java/jdk/dst/jtzu.html

В разделе JTZU download скачайте актуальную версию JTZU.

2. Скачайте архив на целевую систему и распакуйте его.

Измените права доступа к файлу runjtzu.sh на 755, для возможности его запуска.

3. В директории, куда был распакован архив, откройте для редактирования файл runjtzuenv.bat или runjtzuenv.sh, в зависимости от платформы.

Задайте путь JAVA_HOME, например:

set JAVA_HOME=C:\Program Files\Java\jre7\

     Если на целевом сервере несколько JVM, то, обычно, первый раз запускают JTZU в режиме “Discovery mode“. Это необходимо для формирования списка всех SDK/JRE, которых может затронуть обновление. Для этого:

Установите параметр NOGUI=true, убедитесь, что параметр DISCOVERONLY=true.

Сохраните изменения.

4. Запустите runjtzu.bat или runjtzu.sh.

     В режиме “Discovery mode” утилита осуществляет поиск всех Java, критерии поиска задаются в файле DirectorySearch.txt, при этом все SDK/JRE, которые необходимо обновить, фиксируются в файле SDKList.txt. В этом режиме утилита JTZU работает долго. 

     После окончания работы утилиты в режиме “Discovery mode”, можно приступать непосредственно к обновлению, т.е. к запуску JTZU в режиме “Patch mode“.

5. Patch mode: откройте для редактирования файл runjtzuenv.bat или runjtzuenv.sh, в зависимости от платформы.

Проверьте, что задан параметр JAVA_HOME. 

Установите параметр NOGUI=false.

Установите параметр DISCOVERONLY=false.

Сохраните изменения.

6. Запустите runjtzu.bat или runjtzu.sh. Для обновления будут предложены два варианта:

“Интерактивный режим” – пользователь сам указывает путь к папке JDK/JRE.

“Неинтрактивный режим” – утилита осуществит поиск и автоматическое обновление JDK/JRE.

7. После обновления необходимо перезапустить все JVM, для которых были изменены временные зоны.

Подробнее об обновлении JVM с помощью JTZU можно прочитать здесь.

Хозяйке на заметку (z/OS only):

    В WAS V7, в файловой структуре WAS, в директории zi, находятся файлы временных зон. Общий вид расположения настройки: /was_install_root/java64/lib/zi/

    Утилита JTZU не правит файлы временных зон, в указанном выше расположении. Поэтому необходимо вручную заменить файл Moscow, или другой, соответствующий используемой временной зоне, скопировав его из расположения системной Java (например: /usr/lpp/java/J6.0_R64/lib/zi/Europe/), которую JTZU успешно обновляет.

     В связи с этим, после установки пакетов обновлений для WAS, необходимо проверять изменение файла используемой временной зоны, расположенного в файловой структуре продукта.

Проблема была замечена при использовании кода следующего вида:

     При этом ошибка, разница во времени, возникает, даже если в конфигурации WAS установлена переменная TZ=Etc/GMT-4, т.к. при работе с календарем, временная зона берется не из системной библиотеки java, а из файловой структуры конфигурации WAS.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
Метки: , , ,
Опубликовано в WebSphere Application Server, Обнаружение и устранение проблем

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Выбор языка: