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, setDefaultLocaleclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetCodeBeans, getCodeBeanspublic void load()
loadCodeList()を使って既に設定されている
dataSourceと指定されたSQL文を元にコードリストを生成する。
コードリストがすでに存在する場合には、何も行わない。
load インタフェース内 CodeListLoaderpublic void reload()
codeListsの同期を取った上でloadCodeList()
を呼び出す。業務閉塞中の管理者業務にて利用することが望ましい。
reload インタフェース内 ReloadableCodeListLoaderprotected 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.