public class DBCodeListLoader extends AbstractMultilingualCodeListLoader implements ReloadableCodeListLoader
AbstractMultilingualCodeListLoader
、
ReloadableCodeListLoader
実装クラスである。
このクラスを用いてコードリストを生成する場合は、
dataSource属性に使用するデータソースを指定したあと、
init-method属性にloadを指定し、load()メソッドを最初に実行する必要がある。
また、本クラスはスレッドセーフではないため、
業務閉塞機能もしくはサーバ閉塞機能等を利用し、
コードリストへの参照が行われない状態にてreload()メソッドを
実行するように閉塞設計を行う必要がある。
スレッドセーフとする場合、コードリスト参照時に排他制御がかかり
性能劣化をもたらす原因となり得るため注意が必要である。
コードリストをデータベースから取得するための SQL は、Bean定義ファイルから 設定する。
Bean定義ファイルの設定例。
データソースをTerasolunaDataSourceとして定義している場合。
<bean id="loader1"
class="jp.terasoluna.fw.web.codelist.DBCodeListLoader"
init-method="load">
<property name="defaultLocale" value="ja" />
<property name="dataSource">
<ref bean="TerasolunaDataSource"/>
</property>
<property name="sql">
<value>SELECT KEY, VALUE, LANGUAGE, COUNTRY, VARIANT FROM CODE_LISTS</value>
</property>
</bean>
SQLで取得されたコードリストを格納するクラス LocaleCodeBean は、属性
id 、 name、language、country、variant を持ち、
SELECT 文で指定されたカラムの順番で LocaleCodeBean に
格納される。
上記例では、 KEY が id 、VALUE が name、LANGUAGEがlanguage、
、COUNTRYがcountry、VARIANTがvariant の順番で格納される。
取得されたカラムが2つに満たない場合、例えば上記例で
KEY のみ取得した場合は、 name、language、country、variant に
null が格納される。
SELECT 文で取得したカラムが6つ以上であるときは、
6つめ以降のカラムは無視される。
コードリストが国際化対応されていない場合は、
LANGUAGE、COUNTRY、VARIANTカラムを取得しなくてよい。
SQLで取得された結果(LocaleCodeBean)からコードリスト情報として保持する Map<Locale,List<CodeBean>>を作成する。 MapのキーLocaleはLocaleCodeBeanのlanguage、country、variantから作成する。
JSP 内において、 Struts の<logic:iterate>
タグの name 属性や、<html:options>タグの
collection 属性をbean名として参照する。
以下は、bean名を "loader1" として、
<html:options> の collection属性に指定
した場合の例である。
<ts:defineCodeList id="loader1" />
…
<html:select property="selectOptions">
<html:options collection="loader1"
labelProperty="name"
property="id"/>
</html:select>
ReloadCodeListAction
を、またコードリストのJSP内での使用方法は、
DefineCodeListTag
と、
WriteCodeCountTag
を参照のこと。
defaultLocale, localeMap
コンストラクタと説明 |
---|
DBCodeListLoader() |
修飾子とタイプ | メソッドと説明 |
---|---|
DataSource |
getDataSource()
dataSourceを取得する。
|
String |
getSql()
コードリストを取得するSQLを取得する。
|
void |
load()
コードリストの初期化を行う。
|
protected void |
loadCodeList()
コードリストを読み込む。
|
void |
reload()
コードリストの再読み込みを行う。
|
void |
setDataSource(DataSource dataSource)
dataSourceを設定する。
|
void |
setSql(String sql)
コードリストを取得するSQLを設定する。
|
createCodeBeans, createLocale, getCodeBeans, getCodeBeans, setDefaultLocale
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getCodeBeans, getCodeBeans
public void load()
loadCodeList()
を使って既に設定されている
dataSourceと指定されたSQL文を元にコードリストを生成する。
コードリストがすでに存在する場合には、何も行わない。
load
インタフェース内 CodeListLoader
public void reload()
codeListsの同期を取った上でloadCodeList()
を呼び出す。業務閉塞中の管理者業務にて利用することが望ましい。
reload
インタフェース内 ReloadableCodeListLoader
protected void loadCodeList()
public DataSource getDataSource()
public void setDataSource(DataSource dataSource)
dataSource
- dataSourceを表すフィールド値。public String getSql()
public void setSql(String sql)
sql
- SQL文Copyright © 2014. All Rights Reserved.