jp.terasoluna.fw.message
クラス DataSourceMessageSource

java.lang.Object
  上位を拡張 org.springframework.context.support.MessageSourceSupport
      上位を拡張 org.springframework.context.support.AbstractMessageSource
          上位を拡張 jp.terasoluna.fw.message.DataSourceMessageSource
すべての実装されたインタフェース:
org.springframework.beans.factory.InitializingBean, org.springframework.context.HierarchicalMessageSource, org.springframework.context.MessageSource

public class DataSourceMessageSource
extends org.springframework.context.support.AbstractMessageSource
implements org.springframework.beans.factory.InitializingBean

DAOから取得したメッセージリソースより、メッセージコード及びロケールをキー として、メッセージもしくはメッセージフォーマットを決定するクラス。

本クラスはクラスロード時にDBを参照し、DB中のメッセージリソースからメッセージ もしくはメッセージフォーマットを決定するクラスである。 また、国際化に対応しており、言語コード、国コード、バリアントコードによる ロケール判別が可能である。

使用方法
このクラスを利用するにはアプリケーションコンテキスト起動時にMessageSource として設定し、またメッセージリソースを格納したDBとの接続をする DAOオブジェクトとして設定する必要がある。

設定例
Bean定義ファイルに以下の内容の記述をする。
DAOとしてDBMessageResourceDAOを利用した場合
 <bean id = "messageSource"
   class = "jp.terasoluna.fw.message.DataSourceMessageSource">
   <property name = "DBMessageResourceDAO">
     <ref bean = "dBMessageResourceDAO"></ref>
   </property>
 </bean>
 
解説
<bean>要素のid属性に"messageSource" を指定することでMessageSource として認識される。
<bean>要素内<property>要素にはDAOの設定を記述する。


デフォルトロケールの変更
デフォルトロケールは、メッセージリソースのロケールが設定されていない場合、 もしくは設定されていても正しくロケールが設定されていない場合に指定される ロケールである。
デフォルトロケールの初期設定は、クライアントのVMで使用されるロケールである。
デフォルトロケールは本クラス内に実装されているsetDefaultLocaleを利用する ことで変更することが出来る。

設定例
Bean定義ファイル中に以下の内容の記述をする。
デフォルトロケールを日本語(言語コード「ja」)にする場合。

 <bean id = "messageSource"
   class = "jp.terasoluna.fw.message.DataSourceMessageSource">
   <property name = "DBMessageResourceDAO">
     <ref bean = "dBMessageResourceDAO"></ref>
   </property>
   <property name = "defaultLocale">
     <value>ja</value>
   </property>
 </bean>
 
解説
<bean>要素内<properities>要素のname属性にdefaultLocaleを指定し、 value属性にて設定したい値を指定する。

関連項目:
DBMessage, DBMessageQuery, DBMessageResourceDAO, DBMessageResourceDAOImpl

フィールドの概要
protected  Map<Locale,Properties> cachedMergedProperties
          ロケール毎にメッセージコードとメッセージをマップで保持する。
protected  Map<String,Map<Locale,MessageFormat>> cachedMessageFormats
          メッセージコード毎にロケールとメッセージフォーマットをマップで保持する。
protected  DBMessageResourceDAO dbMessageResourceDAO
          メッセージリソースを取得するDAO。
protected  Locale defaultLocale
          ロケールが指定されていない場合のデフォルトロケール。
 
クラス org.springframework.context.support.MessageSourceSupport から継承されたフィールド
logger
 
コンストラクタの概要
DataSourceMessageSource()
           
 
メソッドの概要
 void afterPropertiesSet()
          Webアプリケーションコンテキスト起動時に実行される。
protected  Locale createLocale(DBMessage message)
          Localeオブジェクトを生成する。
protected  List<Locale> getAlternativeLocales(Locale locale)
          メッセージを決定する際のキーを生成する。
protected  MessageFormat getMessageFormat(String code, Locale locale)
          引数として渡されたメッセージコードとロケールからメッセージフォーマット を決定する。
protected  Properties getMessages(Locale locale)
          ロケールに対応する全てのメッセージを返却する。
protected  String internalResolveCodeWithoutArguments(String code, Locale locale)
          メッセージコードとロケールからメッセージを決定する。
protected  void mapMessage(DBMessage message)
          メッセージリソースをロケール別に整理し、メッセージコードとメッセージ本体 をセットにして、ハッシュテーブルに格納する。
protected  void readMessagesFromDataSource()
          DAOからメッセージリソースを取得し、整理する。
 void reloadDataSourceMessage()
          メッセージリソースをリロードする。
protected  MessageFormat resolveCode(String code, Locale locale)
          引数として渡されたメッセージコードとロケールからメッセージフォーマットを 決定し、メッセージフォーマットを返却する。
protected  String resolveCodeWithoutArguments(String code, Locale locale)
          引数として渡されたメッセージコードとロケールからメッセージを決定し、 メッセージを返却する。
 void setDbMessageResourceDAO(DBMessageResourceDAO dbMessageResourceDAO)
          DBMessageResourceDAOを設定する。
 void setDefaultLocale(Locale defaultLocale)
          デフォルトロケールを設定する。
 
クラス org.springframework.context.support.AbstractMessageSource から継承されたメソッド
getDefaultMessage, getMessage, getMessage, getMessage, getMessageFromParent, getMessageInternal, getParentMessageSource, isUseCodeAsDefaultMessage, resolveArguments, setParentMessageSource, setUseCodeAsDefaultMessage
 
クラス org.springframework.context.support.MessageSourceSupport から継承されたメソッド
createMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, setAlwaysUseMessageFormat
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

cachedMessageFormats

protected final Map<String,Map<Locale,MessageFormat>> cachedMessageFormats
メッセージコード毎にロケールとメッセージフォーマットをマップで保持する。
Map <Code, Map <Locale, MessageFormat>>


cachedMergedProperties

protected Map<Locale,Properties> cachedMergedProperties
ロケール毎にメッセージコードとメッセージをマップで保持する。
Map <Locale, Properties>


defaultLocale

protected Locale defaultLocale
ロケールが指定されていない場合のデフォルトロケール。 メッセージリソース内 でロケールが指定されていない場合、 このロケールが設定される。 デフォルトではサーバー側JVMの言語コードのみをロケールとして使用する。


dbMessageResourceDAO

protected DBMessageResourceDAO dbMessageResourceDAO
メッセージリソースを取得するDAO。

コンストラクタの詳細

DataSourceMessageSource

public DataSourceMessageSource()
メソッドの詳細

setDefaultLocale

public void setDefaultLocale(Locale defaultLocale)
デフォルトロケールを設定する。設定しない場合はクライアントのVMのロケール が設定される。VMのロケールが認識できない場合は英語が設定される。

パラメータ:
defaultLocale - デフォルトのロケール。
関連項目:
AbstractMessageSource.getMessageInternal(java.lang.String, java.lang.Object[], java.util.Locale), Locale.getDefault()

setDbMessageResourceDAO

public void setDbMessageResourceDAO(DBMessageResourceDAO dbMessageResourceDAO)
DBMessageResourceDAOを設定する。

パラメータ:
dbMessageResourceDAO - 全てのメッセージリソースを取得するDAO

afterPropertiesSet

public void afterPropertiesSet()
Webアプリケーションコンテキスト起動時に実行される。
メッセージリソースからメッセージコード、ロケール、メッセージ (メッセージフォーマット含む)の3項目で分類し、キャッシュに保持する。

定義:
インタフェース org.springframework.beans.factory.InitializingBean 内の afterPropertiesSet
関連項目:
cachedMergedProperties

reloadDataSourceMessage

public void reloadDataSourceMessage()
メッセージリソースをリロードする。 このメソッドを明示的に呼び出すことでDBから動的にメッセージリソースを リロードする。DBの更新があった場合、このメソッドを呼び出すことで メッセージリソースをリロードすることが可能。


readMessagesFromDataSource

protected void readMessagesFromDataSource()
DAOからメッセージリソースを取得し、整理する。メッセージリソースをロケール 別にまとめ、メッセージコードとメッセージ本体をセットにして格納する。 取得した全てのメッセージリソースに対して実施する。
メッセージリソースとは、メッセージコード、言語コード、国コード、 バリアントコード、メッセージ本体である。


mapMessage

protected void mapMessage(DBMessage message)
メッセージリソースをロケール別に整理し、メッセージコードとメッセージ本体 をセットにして、ハッシュテーブルに格納する。

パラメータ:
message - メッセージリソースを格納したDBMessageオブジェクト。

createLocale

protected Locale createLocale(DBMessage message)
Localeオブジェクトを生成する。
言語コード、国コード、バリアントコードからLocaleオブジェクトを生成する。 言語コードが与えられていない場合は、デフォルトロケールの言語コードのみ を格納し、Localeオブジェクトを生成する。

パラメータ:
message - メッセージリソース
戻り値:
言語コード、国コード、バリアントコードを格納したLocaleオブジェクト。
例外:
IllegalArgumentException - メッセージコード及びメッセージが存在するメッセージリソースに ロケールが設定されていない。かつ、デフォルトロケールも設定出来ない 場合のエラー。

getMessages

protected Properties getMessages(Locale locale)
ロケールに対応する全てのメッセージを返却する。 指定されたロケールの メッセージが存在しない場合は新たに生成し、nullを返却しない。

パラメータ:
locale - メッセージのロケール。
戻り値:
ロケールに対応した全てのメッセージ。 メッセージコードと メッセージ本体が関連付けられ、格納されている。

resolveCodeWithoutArguments

protected String resolveCodeWithoutArguments(String code,
                                             Locale locale)
引数として渡されたメッセージコードとロケールからメッセージを決定し、 メッセージを返却する。親クラスから呼び出されるメソッド。 AbstractMessageSourceのメソッドをオーバーライドしている。

オーバーライド:
クラス org.springframework.context.support.AbstractMessageSource 内の resolveCodeWithoutArguments
パラメータ:
code - メッセージコード
locale - メッセージのロケール
戻り値:
メッセージ本体

internalResolveCodeWithoutArguments

protected String internalResolveCodeWithoutArguments(String code,
                                                     Locale locale)
メッセージコードとロケールからメッセージを決定する。 引数として与えられた ロケールでメッセージの決定が出来なかった場合、ロケールを変化させ、 メッセージの取得を試みる。 また、デフォルトロケールが与えられていた場合、デフォルトロケールでの メッセージの決定を最後に試みる。

パラメータ:
code - メッセージコード
locale - メッセージのロケール
戻り値:
メッセージ本体

getAlternativeLocales

protected List<Locale> getAlternativeLocales(Locale locale)
メッセージを決定する際のキーを生成する。 ロケールの値から ロケールオブジェクトを生成し、リストに格納、返却する。 1.引数localeの言語コード、国コードを持つもの。(バリアントコードを削除。) 2.引数localeの言語コードを持つもの。(国コード、バリアントコードを削除。) 3.デフォルトロケールの言語コード、国コード、バリアントコードを持つもの。 4.デフォルトロケールの言語コード、国コードを持つもの。 5.デフォルトロケールの言語コードを持つもの。

パラメータ:
locale - ロケールオブジェクト
戻り値:
メッセージ決定のキーとなるロケールオブジェクト

resolveCode

protected MessageFormat resolveCode(String code,
                                    Locale locale)
引数として渡されたメッセージコードとロケールからメッセージフォーマットを 決定し、メッセージフォーマットを返却する。 親クラスから呼び出されるメソッド。AbstractMessageSourceのメソッドを オーバーライドしている。

定義:
クラス org.springframework.context.support.AbstractMessageSource 内の resolveCode
パラメータ:
code - メッセージコード
locale - メッセージのロケール
戻り値:
メッセージフォーマット

getMessageFormat

protected MessageFormat getMessageFormat(String code,
                                         Locale locale)
引数として渡されたメッセージコードとロケールからメッセージフォーマット を決定する。

パラメータ:
code - メッセージコード
locale - メッセージのロケール
戻り値:
決定されたメッセージフォーマット


Copyright © 2012. All Rights Reserved.