2010-04-20 1 views
1

Что произойдет, если #setDefault(TimeZone timezone) вызывается одновременное приложение, работающее на том же сервере приложений с JDK 1.6TimeZone # SetDefault() на сервере приложений с JDK 1.6

Как обсуждалось в TimeZone #setDefault changes in JDK 6 вызов в настоящее время изменения VM в ширину, это может имеют ужасные последствия.

Если вы не одобряете сервер приложений, как обеспечить, чтобы TimeZone не изменился?

ответ

3

Мое предложение было бы полностью игнорировать часовой пояс по умолчанию. Всегда указывайте часовой пояс, который вы хотите использовать, что значительно затрудняет случайное использование того, что имеет смысл для вас, а не для пользователя. Действительно, для Noda Time мы удалили все, что по умолчанию задает часовой пояс.

Обязательная ссылка на Joda: Я бы также предложил использовать Joda Time вместо встроенных API-интерфейсов даты/времени.

+0

Да, я также предлагаю использовать Joda Time, но, к сожалению, это невозможно (в моем случае). Используют ли серверы приложений по умолчанию «SecurityManager» и не устанавливают «user.timezone»? – codevour

+0

@chrsk: Я не знаю, если честно. Даже без использования Joda Time вы можете попытаться убедиться, что вы всегда указываете часовой пояс, когда это имеет значение. Не могли бы вы подробнее рассказать о своей ситуации? –

0

Способ предотвращения TimeZone.setDefault(...) от наличия эффекта VM-wide заключается в том, чтобы убедиться, что ваш SecurityManager НЕ дает разрешениям приложений написать системное свойство "user.timezone".

Чтобы понять, почему, посмотрите на the source code.

Теперь, возможно, немного озорной, чтобы полагаться на поведение, которое не задокументировано в Javadoc. Но в этом случае у нас мало выбора. Кроме того, учитывая историю этого конкретного метода, инженеры Sun/Oracle вряд ли изменят свое поведение ... еще раз.

Смежные вопросы