jp.terasoluna.fw.web.struts.action
クラス DBMessageResources

java.lang.Object
  上位を拡張 org.apache.struts.util.MessageResources
      上位を拡張 jp.terasoluna.fw.web.struts.action.DBMessageResources
すべての実装されたインタフェース:
Serializable

public class DBMessageResources
extends org.apache.struts.util.MessageResources

メッセージリソースクラス.

メッセージリソース機能とは、JSP内で表示するエラーメッセージなど、 特定のキーに対してメッセージを取得する機能である。
このクラスを使用することによって、メッセージリソース定義ファイル (通常Strutsで使われるプロパティファイル形式のメッセージリソース)だけでなく、 クラスロード時にDBを参照し、DBからのメッセージリソースを使用することが 可能である。

このクラスは、 Won't FixとなっているStrutsのバグ STR-2172(https://issues.apache.org/jira/browse/STR-2172) を回避する手段を有している。
詳細は、MessageFormatCacheMapFactory を参照。

サンプルを用いた解説

DB内で設定されたメッセージリソースは、全モジュール内で 共有されるが、メッセージリソース定義ファイルのメッセージリソースは、 Strutsの各モジュールごとに独立する。 以下サンプルを用いて、このクラスを使用したときに、メッセージリソース機能が どのように振舞うか解説する。

サンプル設定

例として、モジュールA、モジュールBという複数のモジュールが存在し、 モジュール毎のメッセージリソースの設定(メッセージリソース定義ファイル)に 下記のような指定があるとする。

メッセージリソース一覧
モジュール名 メッセージキー メッセージ文言 メッセージの登録先
モジュールA message.propMessageResource "moduleA" メッセージリソース定義ファイル
message.dbMessageResource "DB" DB
モジュールB message.propMessageResource "moduleB" メッセージリソース定義ファイル
message.subMessageResource "subModule" メッセージリソース定義ファイル

モジュール間のメッセージリソースの可視範囲
上の表で、モジュールAのメッセージリソースの可視範囲は、 である。
モジュールBのメッセージリソースの可視範囲は、 である。
モジュールAとモジュールBでは、同じメッセージリソースのキー message.propMessageResourceが見えているが、各モジュールで 取得できるメッセージは、 となる。 メッセージリソース定義ファイルによるメッセージリソースの設定に関しては、 各モジュール間で設定は共有できないことに注意する。
それに対し、モジュール間で共有されるDBのメッセージリソースは、 message.dbMessageResourceに対して取得できるメッセージは、 モジュールA、モジュールBともに "DB"である。
また、Strutsの仕様として、モジュールBのメッセージリソース定義ファイルで 設定されたメッセージリソースをモジュールAから取得することはできない。 (モジュールAからmodule.subMessageResourceのキーで 参照しても、メッセージは取得できない。)
注意点
このように、メッセージリソースの扱いについては下記の注意点がある。 また、1つのキーに対して、DBMessageResourcesのメッセージ取得優先順位は、 下記の通りとなる。
  1. メッセージリソース定義ファイルで定義されたメッセージリソース
  2. DB内に定義されたメッセージリソース
  3. 業務共通メッセージリソース定義ファイル (application-messages.properties)で 定義されたメッセージリソース
  4. システムメッセージリソース定義ファイル (system-messages.properties)で 定義されたメッセージリソース
業務共通メッセージリソース・システムメッセージリソースに関する内容は、 GlobalMessageResourcesを参照のこと。

使用方法
このクラスを利用するには、Struts設定ファイル(struts-config.xml)中の <message-resource>要素に、 を指定する。
下記はStruts設定ファイル(struts-config.xml)の設定例である。
 <struts-config>
   …
   <message-resources parameter="MessageResources"
                      factory="jp.terasoluna.fw.web.struts.action.DBMessageResourcesFactory"
   />
   …
 </struts-config>
 

DB内のメッセージリソースを取得する設定例
DBからメッセージリソースを取得するために、システム設定プロパティファイル (system.properties)で、下記のように設定する。

 messages.sql=<SQL(SELECT)文>
 messages.dao=MessageResourcesDAOの実装クラス
 

具体例は以下のようになる。

 messages.sql=SELECT MESSAGE_KEY, MESSAGE_VALUE FROM MESSAGES
 messages.dao=jp.terasoluna.fw.web.struts.action.MessageResourcesDAOImpl
 
設定上の注意点
メッセージリソース定義ファイル(プロパティファイル)の メッセージリソースの設定例
プロパティファイルを用いたメッセージリソースの定義は、プロパティファイルの 定義どおりに登録される。

 <メッセージキー>=<メッセージ文言>
 

具体例は以下のようになる。

 errors.requiredArray={0}番目の{1}は必須入力です。
 errors.alphaNumericStringArray={0}番目の{1}は半角英数字でなくてはなりません。
 

関連項目:
MessageFormatCacheMapFactory, GlobalMessageResources, DBMessageResourcesFactory, MessageResourcesDAO, MessageResourcesDAOImpl, 直列化された形式

フィールドの概要
static String MESSAGES_DAO
          システム設定プロパティファイル(system.properties)内で DAOを取得する際に使用するキー。
static String MESSAGES_SQL
          システム設定プロパティファイル(system.properties)内で SQLを取得する際に使用するキー。
 
クラス org.apache.struts.util.MessageResources から継承されたフィールド
config, defaultFactory, defaultLocale, factory, formats, returnNull
 
コンストラクタの概要
DBMessageResources(org.apache.struts.util.MessageResourcesFactory factory, String config)
          指定されたパラメータによってDBMessageResourcesを生成する。
DBMessageResources(org.apache.struts.util.MessageResourcesFactory factory, String config, boolean returnNull)
          指定されたパラメータによってDBMessageResourcesを生成する。
 
メソッドの概要
protected static void dbInit()
          DB内のメッセージキーとメッセージ文言のペアを取得する。
 String getMessage(Locale locale, String key)
          指定されたキーにもとづきメッセージ文言を取得する。
 String getMessage(String key)
          指定されたキーにもとづきメッセージ文言を取得する。
protected  void propertyInit(String propertyFile)
          メッセージリソース定義ファイルからメッセージキーとメッセージ文言の ペアを取得する。
 
クラス org.apache.struts.util.MessageResources から継承されたメソッド
escape, getConfig, getFactory, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessageResources, getReturnNull, isEscape, isPresent, isPresent, localeKey, log, log, messageKey, messageKey, setEscape, setReturnNull
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

MESSAGES_DAO

public static final String MESSAGES_DAO
システム設定プロパティファイル(system.properties)内で DAOを取得する際に使用するキー。

関連項目:
定数フィールド値

MESSAGES_SQL

public static final String MESSAGES_SQL
システム設定プロパティファイル(system.properties)内で SQLを取得する際に使用するキー。

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

DBMessageResources

public DBMessageResources(org.apache.struts.util.MessageResourcesFactory factory,
                          String config)
指定されたパラメータによってDBMessageResourcesを生成する。

パラメータ:
factory - メッセージリソースファクトリ
config - メッセージリソース定義ファイル名

DBMessageResources

public DBMessageResources(org.apache.struts.util.MessageResourcesFactory factory,
                          String config,
                          boolean returnNull)
指定されたパラメータによってDBMessageResourcesを生成する。

パラメータ:
factory - メッセージリソースファクトリ
config - メッセージリソース定義ファイル名
returnNull - org.apache.struts.util.MessageResources クラスの returnNull false 指定時、キーに該当するメッセージが 存在しない場合???Locale.key???という形式でメッセージを 返却する。
メソッドの詳細

dbInit

protected static void dbInit()
DB内のメッセージキーとメッセージ文言のペアを取得する。


propertyInit

protected void propertyInit(String propertyFile)
メッセージリソース定義ファイルからメッセージキーとメッセージ文言の ペアを取得する。

パラメータ:
propertyFile - メッセージリソース定義ファイル名

getMessage

public String getMessage(Locale locale,
                         String key)
指定されたキーにもとづきメッセージ文言を取得する。 同じキーが異なるメッセージの定義場所に存在する時、取得される優先順位は 下記のようになる。
  1. メッセージリソース定義ファイルのメッセージリソース
  2. DB内のメッセージキーとメッセージ文言の入っているメッセージリソース
  3. 業務共通メッセージリソースファイル定義ファイル (application-messages.properties)のメッセージリソース
  4. システムメッセージリソース定義ファイル(system-messages.properties) のメッセージリソース

すべてのメッセージリソースに初期化処理が行われなかった場合、 あるいは、どの定義からもメッセージキーに該当する値が 取得できなかった場合、生成時のreturnNull指定によって、 nullか、あるいはStrutsの形式(???Locale.key???)で返却される。

なお、ここで指定されているロケールは考慮されない。 すなわちgetMessage(key)と同じ動作をする。

定義:
クラス org.apache.struts.util.MessageResources 内の getMessage
パラメータ:
locale - メッセージロケール。考慮されない
key - メッセージキー
戻り値:
localeとkeyに対応するメッセージ文言

getMessage

public String getMessage(String key)
指定されたキーにもとづきメッセージ文言を取得する。 同じキーが異なるメッセージの定義場所に存在する時、取得される優先順位は 下記のようになる。
  1. メッセージリソース定義ファイル
  2. DB内のメッセージキーとメッセージ文言の入っているテーブル
  3. 業務共通メッセージリソースファイル定義ファイル (application-messages.properties)のメッセージ
  4. システムメッセージリソース定義ファイル(system-messages.properties) のメッセージ
すべてのメッセージリソースに初期化処理が行われなかった場合、 あるいは、どの定義からもメッセージキーに該当する値が 取得できなかった場合、nullが返却される。

オーバーライド:
クラス org.apache.struts.util.MessageResources 内の getMessage
パラメータ:
key - メッセージキー
戻り値:
keyに対応するメッセージ文言


Copyright © 2012. All Rights Reserved.