1

Rythm 可以用作单例或实例化为普通对象。Init()目前我在 Servlet方法的 webapp 中实例化它一次。(这与使用单例几乎相同,因为我只创建一次)

现在我需要为我的站点添加 i18n 支持,并且需要在渲染之前动态设置语言。

我可以这样做:

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

我假设如果我使用单例(或在 servlet 中创建的单个实例),那么我可能会在两个语句之间获得竞争条件。

  1. 这是正确的还是没有竞争条件?
  2. 我应该为每个请求创建一个 Rythm 实例吗?
  3. 是否有另一种方法可以在不更改引擎状态的情况下更改每次渲染的语言?
4

1 回答 1

2

首先在最新版本的 rythm 中,你应该调用engine.prepare(Locale),而不是engine.setLocale(Locale);

现在回答你的问题:

  1. 这是正确的还是没有竞争条件?

它不会导致竞态条件,因为在它用于ThreadLocal存储渲染设置的代码内部

  1. 我应该为每个请求创建一个 Rythm 实例吗?

绝对没有

  1. 是否有另一种方法可以在不更改引擎状态的情况下更改每次渲染的语言?

语言和区域设置不是引擎级别的状态,它们是每个请求状态。但是可以在引擎级别配置默认语言和区域设置

于 2016-06-04T00:02:41.843 回答