私は@ApplicationScoped
すべてのユーザー用のBeanを持っています。これは、ids->名前とその逆をTrove
&java.util
マップに保存します。
Bean の構築時または (Web サイト管理者による手動更新の場合)マップを一度だけ構築します。
Bean メソッド内ではget()
、マップで を使用しているだけなので、マップは変更しません。準備が整った目的でのみ使用されるため、これはスレッドセーフになりますか? 私はマップを外部の他の Bean と共有しておらず、コード内でいつでもマップを変更 (エントリの追加/削除) していません。
また、この場合、フィールドを final にする必要がありますか?
Bean コードは次のとおりです。
@ApplicationScoped
@ManagedBean(name="directory", eager=true)
public class directory {
private static TIntObjectHashMap<String> idsToNamesMap;
private static TreeMap<String, Integer> namesToIdsMap;
@PostConstruct
public void buildDirectory(){
// building directory here ....
}
public String getName(int topicId){
return idsToNamesMap.get(topicId);
}
public List<Entry<String, Integer>> searchTopicsByName(String query){
return new ArrayList(namesToIdsMap.subMap(query, true, query+"z", true).entrySet());
}
}