jp.terasoluna.fw.message
クラス DBMessageResourceDAOImpl

java.lang.Object
  上位を拡張 JdbcDaoSupport
      上位を拡張 jp.terasoluna.fw.message.DBMessageResourceDAOImpl
すべての実装されたインタフェース:
DBMessageResourceDAO

public class DBMessageResourceDAOImpl
extends JdbcDaoSupport
implements DBMessageResourceDAO

DBからメッセージリソースを取得するDBMessageResourceDAOの実装クラス。 本クラスは、メッセージリソースを格納したDBから検索SQL文を使用し、 メッセージリソースをDBMessageオブジェクトのリストとしてまとめ、返却する。

使用方法
このクラスを使用するにはアプリケーションコンテキスト起動時にDAOとして 認識させる必要がある。

設定例
DAOの実装クラスとして本クラスを使用する場合、Bean定義ファイルに 以下の記述をする。

 <bean id = "dBMessageResourceDAO"
   class = "jp.terasoluna.fw.message.DBMessageResourceDAOImpl">
   <property name = "dataSource">
     <ref bean = "dataSource"></ref>
   </property>
 </bean>
 
解説
<bean>要素のid属性にDBMessageResourceDAOを指定し、<bean>要素内 <property>要素にはdataSourceを設定する。

検索SQL文について

DBからメッセージリソースを取得する検索SQL文には初期値が与えられている。 デフォルトの検索SQL文は
SELECT CODE,MESSAGE FROM MESSAGES
である。 デフォルトの検索SQL文を使用する場合、DBのカラム名は以下の通りとなる。
テーブル名 = MESSAGES
メッセージコードを格納するカラム名 = CODE
メッセージ本文を格納するカラム名 = MESSAGE
尚、デフォルトの検索SQL文を使用する場合、ロケール対応は行われない。 ロケール対応する場合は、下記、検索SQL文の変更が必要となる。

検索SQL文の変更1

この変更方法は検索SQL文のフォーマットにしたがって、テーブル名及び各カラム名を 独自に指定し、本クラスの機能によって、検索SQL文を生成する方法である。この方法 を実施することで、以下のことが可能になる。
1.DBのテーブル名及び各カラム名の自由な設定
2.ロケール対応
検索SQL文のフォーマット
SELECT メッセージコードのカラム名 , 言語コードのカラム名 , 国コードのカラム名, バリアントコードのカラム名 ,メッセージ本体のカラム名 FROM テーブル名
 
テーブル名及び各カラム名の全てもしくは一部を指定することでDBのテーブル名及び カラム名を自由に設定出来る。一部の値のみを指定した場合、指定されていない値は 上記デフォルトの検索SQL文の値が使用される。
又、言語コードのカラム名、国コードのカラム名、バリアントコードのカラム名を 指定するし、各カラムを有効にすることにより、これらのコードによるロケールの 判別が可能となる。 これらの値は本クラス内に実装されている各々のセッターを利用する事で変更出来る。

設定例
Bean定義ファイル内で以下のような記述をする。
テーブル名及び各カラム名の全てを独自に設定する場合。
 <bean id = "DBMessageResourceDAO"
   class = "jp.terasoluna.fw.message.DBMessageResourceDAOImpl">
     <ref bean = "dataSource"></ref>
   </property>
   <property name = "tableName">
     <value>DBMESSAGES</value>
   </property>
   <property name = "codeColumn">
     <value>BANGOU</value>
   </property>
   <property name = "languageColumn">
     <value>GENGO</value>
   </property>
   <property name = "countryColumn">
     <value>KUNI</value>
   </property>
   <property name = "variantColumn">
     <value>HOUGEN</value>
   </property>
   <property name = "messageColumn">
     <value>MESSAGE</value>
   </property>
 </bean>
 
<bean>要素内<properities>要素のname属性に変更したいテーブル名や カラム名を指定し、value属性にて設定したい値を指定する。

上記設定により検索SQL文は
SELECT BANGOU,GENGO,KUNI,HOUGEN,HONBUN FROM DBMESSAGES
となる。
またDBのテーブル名及びカラム名は以下の通りとなる。
テーブル名 = DBMESSAGES
メッセージコードを格納するカラム名 = BANGOU
メッセージの言語コードを格納するカラム名 = GENGO
メッセージの国コードを格納するカラム名 = KUNI
メッセージのバリアントコードを格納するカラム名 = HOUGEN
メッセージ本文を格納するカラム名 = HONBUN

検索SQL文の変更2

この変更方法は本クラスの機能による検索SQL文の生成を行わずに、検索SQL文を独自 に指定する方法である。WHERE句など検索SQL文のフォーマットでは対応出来ない クエリを利用する場合に有効である。

設定例
Bean定義ファイル内で以下のような記述をする。 検索SQL文及びテーブル名、各カラム名の全てを独自に設定する場合。

 <bean id = "DBMessageResourceDAO"
   class = "jp.terasoluna.fw.message.DBMessageResourceDAOImpl">
   <property name = "dataSource">
     <ref bean = "dataSource"></ref>
   </property>
   <property name = "findMessageSql">
     <value>
       SELECT BANGOU as CODE,HONBUN as MESSAGE FROM DBDATA WHERE CATEGORY = "DBMESSAGE"
     </value>
   </property>
 </bean>
 
<bean>要素内<properities>要素のname属性に検索SQL文と使用する カラム名を指定し、value属性にて設定したいSQL文を指定する。

SQL文で
新規カラム名 as デフォルトのカラム名
とすることでDBのカラム名を変更することが出来る。 ただし、デフォルトで値が渡されているメッセージコード及びメッセージの2カラム のみの対応となる。ロケール対応する場合、その他のカラムを設定する必要がある。 その場合は検索SQL文の変更1に倣い、カラムを有効にする必要がある。

上記設定により検索SQL文は
SELECT BANGOU as CODE,HONBUN as MESSAGE FROM DBDATA WHERE CATEGORY = "DBMESSAGE"
 
となる。
またDBのテーブル名及びカラム名は以下の通りとなる。
テーブル名 = DBDATA
メッセージコードを格納するカラム名 = BANGOU
メッセージの言語コードを格納するカラム名 = null
メッセージの国コードを格納するカラム名 = null
メッセージのバリアントコードを格納するカラム名 = null
メッセージ本文を格納するカラム名 = HONBUN

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

フィールドの概要
protected  java.lang.String codeColumn
          メッセージコードを格納するDBのカラム名。
protected  java.lang.String countryColumn
          国コードを格納するDBのカラム名。
protected  DBMessageQuery dBMessageQuery
          メッセージリソースを取得するRDBMSオペレーションクラス。
protected  java.lang.String findMessageSql
          外部から設定されるDB検索時に使用されるSQL文。
protected  java.lang.String languageColumn
          言語コードを格納するDBのカラム名。
private static Log log
          ログクラス。
protected  java.lang.String messageColumn
          メッセージを格納するDBのカラム名。
protected  java.lang.String tableName
          メッセージを格納するDBのテーブル名。
protected  java.lang.String variantColumn
          バリアントコードを格納するDBのカラム名。
 
コンストラクタの概要
protected DBMessageResourceDAOImpl()
          DBMessageResourceDAOImplを生成する。
 
メソッドの概要
protected  void checkNotRequiredColumnName(java.lang.String value, java.lang.String columnName)
          必須カラム以外のカラム名をチェックする。
protected  void checkRequiredColumnName(java.lang.String value, java.lang.String columnName)
          必須カラムのカラム名及びテーブル名をチェックする。
 java.util.List<DBMessage> findDBMessages()
          DBから取得したメッセージリソースをDBMessageオブジェクトに格納し、リスト型 で返却する。
protected  void initDao()
          DBよりメッセージリソースを取得するDBMessageQueryを生成する。
protected  java.lang.String makeSql()
          DBからメッセージリソースを取得するSQL文を生成する。
 void setCodeColumn(java.lang.String codeColumn)
          メッセージコードを格納するDBのカラム名を設定する。
 void setCountryColumn(java.lang.String countryColumn)
          国コードを格納するDBのカラム名を設定する。
 void setFindMessageSql(java.lang.String findMessageSql)
          DBからメッセージリソースを検索するSQL文を設定する。
 void setLanguageColumn(java.lang.String languageColumn)
          言語コードを格納するDBのカラム名を設定する。
 void setMessageColumn(java.lang.String messageColumn)
          メッセージを格納するDBのカラム名を設定する。
 void setTableName(java.lang.String tableName)
          メッセージを格納するDBのテーブル名を設定する。
 void setVariantColumn(java.lang.String variantColumn)
          バリアントコードを格納するDBのカラム名を設定する。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

tableName

protected java.lang.String tableName
メッセージを格納するDBのテーブル名。デフォルトはMESSAGES。


codeColumn

protected java.lang.String codeColumn
メッセージコードを格納するDBのカラム名。デフォルトはCODE。


languageColumn

protected java.lang.String languageColumn
言語コードを格納するDBのカラム名。デフォルトはnull。


countryColumn

protected java.lang.String countryColumn
国コードを格納するDBのカラム名。デフォルトはnull。


variantColumn

protected java.lang.String variantColumn
バリアントコードを格納するDBのカラム名。デフォルトはnull。


messageColumn

protected java.lang.String messageColumn
メッセージを格納するDBのカラム名。デフォルトはMESSAGE。


findMessageSql

protected java.lang.String findMessageSql
外部から設定されるDB検索時に使用されるSQL文。 設定されている場合、こちらが実行される。


log

private static Log log
ログクラス。


dBMessageQuery

protected DBMessageQuery dBMessageQuery
メッセージリソースを取得するRDBMSオペレーションクラス。

コンストラクタの詳細

DBMessageResourceDAOImpl

protected DBMessageResourceDAOImpl()
DBMessageResourceDAOImplを生成する。

メソッドの詳細

setTableName

public void setTableName(java.lang.String tableName)
メッセージを格納するDBのテーブル名を設定する。設定されていない場合は デフォルトの値MESSAGESが使用される。

パラメータ:
tableName - メッセージを格納したDBのテーブル名。

setCodeColumn

public void setCodeColumn(java.lang.String codeColumn)
メッセージコードを格納するDBのカラム名を設定する。設定されていない場合は デフォルトの値CODEが使用される。

パラメータ:
codeColumn - メッセージコードを格納したDBのカラム名。

setLanguageColumn

public void setLanguageColumn(java.lang.String languageColumn)
言語コードを格納するDBのカラム名を設定する。設定されていない場合は デフォルトの値nullが使用される。

パラメータ:
languageColumn - 言語コードを格納したDBのカラム名。

setCountryColumn

public void setCountryColumn(java.lang.String countryColumn)
国コードを格納するDBのカラム名を設定する。設定されていない場合は デフォルトの値nullが使用される。

パラメータ:
countryColumn - 国コードを格納したDBのカラム名。

setVariantColumn

public void setVariantColumn(java.lang.String variantColumn)
バリアントコードを格納するDBのカラム名を設定する。設定されていない場合は デフォルトの値nullが使用される。

パラメータ:
variantColumn - バリアントコードを格納したDBのカラム名。

setMessageColumn

public void setMessageColumn(java.lang.String messageColumn)
メッセージを格納するDBのカラム名を設定する。設定されていない場合は デフォルトの値MESSAGEが使用される。

パラメータ:
messageColumn - メッセージを格納したDBのカラム名。

setFindMessageSql

public void setFindMessageSql(java.lang.String findMessageSql)
DBからメッセージリソースを検索するSQL文を設定する。設定されていない場合は makeSqlメソッドにて作成されたSQL文が実行される。

パラメータ:
findMessageSql - 外部から設定されるDB検索時に使用されるSQL文。

initDao

protected void initDao()
DBよりメッセージリソースを取得するDBMessageQueryを生成する。 コンストラクタに渡される値のうち、メッセージコードのカラム名、 言語コードのカラム名、国コードのカラム名はnullの場合がある。
nullが渡された場合、これらのカラムはDBに存在しないものとして処理される。

例外:
java.lang.IllegalArgumentException - DBとの接続が取得できなかった場合

findDBMessages

public java.util.List<DBMessage> findDBMessages()
DBから取得したメッセージリソースをDBMessageオブジェクトに格納し、リスト型 で返却する。

定義:
インタフェース DBMessageResourceDAO 内の findDBMessages
戻り値:
メッセージリソースのリスト

makeSql

protected java.lang.String makeSql()
DBからメッセージリソースを取得するSQL文を生成する。 SQL文生成前にカラム名及びテーブル名に不正な値が渡されていないかの チェックをする。必須カラム名(メッセージコード、メッセージ本体) とテーブル名はnullチェック及び空文字チェックを実施する。 その他のカラム名は空文字チェックのみを実施する。

戻り値:
DBからメッセージリソースを取得するSQL文。 nullは返却しない。

checkRequiredColumnName

protected void checkRequiredColumnName(java.lang.String value,
                                       java.lang.String columnName)
必須カラムのカラム名及びテーブル名をチェックする。 nullチェック及び空文字チェックを実施する。

パラメータ:
value - DBでのカラム名もしくはテーブル名
columnName - 検査対象のカラムもしくはテーブル

checkNotRequiredColumnName

protected void checkNotRequiredColumnName(java.lang.String value,
                                          java.lang.String columnName)
必須カラム以外のカラム名をチェックする。 空文字チェックを実施する。

パラメータ:
value - DBでのカラム名
columnName - 検査対象のカラム