jp.terasoluna.fw.web.struts
クラス MessageFormatCloneReturnMap

java.lang.Object
  上位を拡張 java.util.AbstractMap<K,V>
      上位を拡張 java.util.HashMap<java.lang.String,java.text.MessageFormat>
          上位を拡張 jp.terasoluna.fw.web.struts.MessageFormatCloneReturnMap
すべての実装されたインタフェース:
java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.String,java.text.MessageFormat>

public class MessageFormatCloneReturnMap
extends java.util.HashMap<java.lang.String,java.text.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, 直列化された形式

フィールドの概要
private static long serialVersionUID
          シリアルバージョンID
 
コンストラクタの概要
MessageFormatCloneReturnMap()
           
 
メソッドの概要
 java.text.MessageFormat get(java.lang.Object key)
          キャッシュされたMessageFormatのcloneインスタンスを返す。
 java.text.MessageFormat put(java.lang.String key, java.text.MessageFormat value)
          MessageFormatインスタンスのcloneインスタンスをキャッシュする。
 
クラス java.util.HashMap から継承されたメソッド
clear, clone, containsKey, containsValue, entrySet, isEmpty, keySet, putAll, remove, size, values
 
クラス java.util.AbstractMap から継承されたメソッド
equals, hashCode, toString
 
クラス java.lang.Object から継承されたメソッド
finalize, getClass, notify, notifyAll, wait, wait, wait
 
インタフェース java.util.Map から継承されたメソッド
equals, hashCode
 

フィールドの詳細

serialVersionUID

private static final long serialVersionUID
シリアルバージョンID

関連項目:
定数フィールド値
コンストラクタの詳細

MessageFormatCloneReturnMap

public MessageFormatCloneReturnMap()
メソッドの詳細

put

public java.text.MessageFormat put(java.lang.String key,
                                   java.text.MessageFormat value)
MessageFormatインスタンスのcloneインスタンスをキャッシュする。

定義:
インタフェース java.util.Map<java.lang.String,java.text.MessageFormat> 内の put
オーバーライド:
クラス java.util.HashMap<java.lang.String,java.text.MessageFormat> 内の put
パラメータ:
key - MessageFormatキャッシュ時のキー
value - キャッシュするMessageFormatインスタンス
戻り値:
メソッド実行前にキャッシュされていたMessageFormatインスタンス

get

public java.text.MessageFormat get(java.lang.Object key)
キャッシュされたMessageFormatのcloneインスタンスを返す。

定義:
インタフェース java.util.Map<java.lang.String,java.text.MessageFormat> 内の get
オーバーライド:
クラス java.util.HashMap<java.lang.String,java.text.MessageFormat> 内の get
パラメータ:
key - MessageFormatキャッシュ時のキー
戻り値:
MessageFormatインスタンス