Rythm: создать новый движок или установить язык / локаль для существующего экземпляра движка для каждого запроса

Ритм может быть использован как одиночка или создан как обычный объект. В настоящее время я создаю его один раз в веб-приложении в сервлете. Init() метод. (Это почти то же самое, что и использование синглтона, так как я создаю его только один раз)

Теперь мне нужно добавить поддержку i18n на мой сайт и динамически установить язык перед рендерингом.

Я мог бы сделать это:

engine.setLocale(userLocale);
engine.render(template,arguments);

Я предполагаю, что если я использую синглтон (или единственный экземпляр, созданный в сервлете), то я могу получить условие гонки между двумя операторами.

  1. Это правильно или нет расы?
  2. Должен ли я создать экземпляр Rythm для каждого запроса?
  3. Есть ли другой способ изменить язык для каждого рендеринга без изменения состояния движка?

1 ответ

Решение

Сначала в последней версии ритма, вы должны позвонить engine.prepare(Locale)не engine.setLocale(Locale);

Теперь, чтобы ответить на ваши вопросы:

  1. Это правильно или нет расы?

Это НЕ вызовет состояние гонки, потому что внутри кода, который он использует ThreadLocal сохранить настройки рендера

  1. Должен ли я создать экземпляр Rythm для каждого запроса?

Определенно НЕТ

  1. Есть ли другой способ изменить язык для каждого рендеринга без изменения состояния движка?

Язык и локаль НЕ являются состояниями уровня двигателя, они являются состояниями для каждого запроса. Однако язык и локаль по умолчанию могут быть настроены на уровне движка

Другие вопросы по тегам