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, 直列化された形式

コンストラクタの概要
MessageFormatCloneReturnMap()
           
 
メソッドの概要
 MessageFormat get(Object key)
          キャッシュされたMessageFormatのcloneインスタンスを返す。
 MessageFormat put(String key, 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
 

コンストラクタの詳細

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.