jp.terasoluna.fw.web.struts
クラス MessageFormatCloneReturnMap
java.lang.Object
java.util.AbstractMap<K,V>
java.util.HashMap<String,MessageFormat>
jp.terasoluna.fw.web.struts.MessageFormatCloneReturnMap
- すべての実装されたインタフェース:
- Serializable, Cloneable, Map<String,MessageFormat>
public class MessageFormatCloneReturnMap
- extends HashMap<String,MessageFormat>
Strutsのバグ(STR-2172)回避用HashMap(MessageFormatキャッシュ)。
StrutsのMessageResourcesは、キャッシュからgetしたMessageFormatを同期化せずに複数スレッドでアクセス可能にしている。
このバグを回避するため、キャッシュから同一インスタンスを返さず、cloneインスタンスを返すよう拡張している。
また、MessageFormatで使用するサブフォーマットの中には、
(具体的には、{0,number}等の記述時に使用されるDecimalFormatが該当。)
cloneしなければスレッドセーフであるが、
format実行後にcloneすると、MessageFormatインスタンス(サブフォーマットのインスタンス含む)が
スレッドごとに存在するにも関わらず、スレッドアンセーフとなるものがある。
このクラスは、format実行前にputメソッドにMessageFormatインスタンスが渡される前提で、
putメソッド内にてcloneを行うことで、この問題を回避している。
このクラスは、StrutsのMessageResourcesのバグ回避専用クラスである。
putメソッド(null値の設定なし)とgetメソッドのみ使用されることを前提としている。
その他のメソッドを使用した場合の、Mapとしての動作は保証しない。
また、putの戻り値では、前回のputの引数で渡されたインスタンスではなく、等価なcloneインスタンスを返す。
- 関連項目:
MessageFormatCacheMapFactory
,
直列化された形式
クラス java.util.HashMap から継承されたメソッド |
clear, clone, containsKey, containsValue, entrySet, isEmpty, keySet, putAll, remove, size, values |
MessageFormatCloneReturnMap
public MessageFormatCloneReturnMap()
put
public MessageFormat put(String key,
MessageFormat value)
- MessageFormatインスタンスのcloneインスタンスをキャッシュする。
- 定義:
- インタフェース
Map<String,MessageFormat>
内の put
- オーバーライド:
- クラス
HashMap<String,MessageFormat>
内の put
- パラメータ:
key
- MessageFormatキャッシュ時のキーvalue
- キャッシュするMessageFormatインスタンス
- 戻り値:
- メソッド実行前にキャッシュされていたMessageFormatインスタンス
get
public MessageFormat get(Object key)
- キャッシュされたMessageFormatのcloneインスタンスを返す。
- 定義:
- インタフェース
Map<String,MessageFormat>
内の get
- オーバーライド:
- クラス
HashMap<String,MessageFormat>
内の get
- パラメータ:
key
- MessageFormatキャッシュ時のキー
- 戻り値:
- MessageFormatインスタンス
Copyright © 2012. All Rights Reserved.