[Seasar-user:19155] [S2JDBC] Unicodeマッピングの違いを吸収する方法について
Hiroshi Ogawa
[E-MAIL ADDRESS DELETED]
2010年 1月 19日 (火) 23:41:54 JST
小川と申します。
S2JDBCで首題の内容を行う方法について質問させてください。
[環境]
Seasar 2.4.40
SAStruts
S2JDBC
Tomcat 6.0.18
Java 1.6.0_16
Postgres 8.3.7
Postgres JDBC 8.3-604 Type4
データベースの文字コード, Java/JSPの文字コードをUTF-8としています。
今回開発しているシステムのクライアントはWindowsのため、
画面から入力された文字列は CP932系の Unicode として
サーバへ送信され、現在はそのままデータベースへ格納しています。
今回開発しているWebシステムにおいては問題ないのですが、
このデータベースは他システムからも参照されます。
その他システムはデータベースに格納されている文字が
Shift_JIS 系の Unicode であることを期待しています。
そのため、例えば画面から入力された値に'〜'等の文字が含まれていると、
他システムで正しく表示できないという問題が発生しています。
他システムは変更できないため、今回開発しているシステムで
Unicodeマッピングが異なる文字を 格納(insert, update)時に
Shift_JIS系の Unicodeに置換し、取得(select)時にその逆の置換を
行うことを考えています。
アプリ側で対応を行うのは非常に大変なので、フレームワーク側で
吸収したいと思っています。
SeasarのMLを検索したところ、以下のスレッドが見つかりました。
http://ml.seasar.org/archives/seasar-user/2004-June/000797.html
このスレッドでは SELECT時に Map(List)ResultSetHandler を使っていると
上手くいかない(static なValueTypeを直接返す)とありますが、
Seasar 2.4.40のソースを見ると、登録した ValueType を
返しているように見えました。
そのため、以下の方法でよいのではないかと考えています。
1. org.seasar.extension.jdbc.types.StringTypeを継承した
クラス(CustomStringType)を作成し、getValue(), bindValue() をオーバーライドして
置換処理を加える
2. システム起動時に以下のように登録する(HOT DEPLOYでは問題あり・・?)
ValueTypes.registerValueType(String.class, new CustomStringType());
ただ、かなり前の内容みたいですので、今のS2JDBCでも
この方法で大丈夫なのかがわかりません。
この方法で大丈夫か、又はもっといい別の方法がある・・といったことを
教えていただけないでしょうか。
S2JDBCでは SQL自動生成と外部SQLファイルの2種類をつかっています。
SELECT結果はEntityで受ける場合と、BeanMap で受ける場合の
2種類あります。
ソース・コード内に対象文字をハードコーディングしていたり、
ローカルファイルからデータを取得することもあるので、
サーブレット・フィルタはNGだと思っています。
よろしくお願いします。
Seasar-user メーリングリストの案内