[Seasar-user:801] Re: S2JDBC でOracleのUnicode問題とうまく付き合いたい ...
B furyu.omron.co.jp Hikaru Taniguchi
taniguchi
2004年 6月 10日 (木) 13:05:12 JST
tanigonです。
おおっ…反応がたくさんあり、さすがというか、本当に勉強になります。
ありがとうございます。
スガさん、ありがとうございます。 ValueType周りは見てはいましたが、なるほ
ど、という感じです。 ありがとうございます。
ちなみに、これには全く気が付きませんでした・・・ ↓
(原文から抜粋)
> UPDATE や INSERT なら OK ですが、SELECT に問題があります。
> Bean(List)ResultSetHandler なら上手くいくのですが、
> Map(List)ResultSetHandler だと上手くいきません。
>
> 理由は ResultSetMetaDataPropertyHandler 内で
> ValueTypes#getValueType(Class) ではなく
> ValueTypes#getValueType(int) の方を使っているためです。
>
> 前者は登録したものを返しますが、後者は static なものを直接返します。
なるほど〜…
ところで私自身のポリシーのせいでややこしくなっているところもあります。
どのResultSetHandlerを使うか、というのはカプセル化したとしても結局のとこ
ろ hoge = (List)fuga.execute... のようになってしまうため、大元の処理
ロジックがResultSetHandler実装に依存(ただし「出力のされ方」だけですが)し
てしまいますし、同様の理由でSQLも .dicon には設定しないようにしています。
(ソースコードの可読性(というと語弊がありますが・・・)も向上するように思
います)
と、こうなると、厄介なのが・・・
ひがやすおさん:
(一部抜粋)
> <property name="resultSetHandler">
> <component class="org.seasar.extension.jdbc.impl.BeanResultSetHandler">
> <arg>@[E-MAIL ADDRESS DELETED]</arg>
> <aspect>OracleResultSetInterceptor</aspect>
> </component>
> </property>
そう・・・自分自身でAOPがいいなあとかいいながら コンテナを使わないこ
とになってしまうために<aspect>が使えないんですよ (;_;)
これは悲しい…というか ちょっとしたジレンマですね。私が頭を切り替えれ
ばいいんでしょうけど…
今はというと、DIしてもらうのは、DataSourceもしくはBasicSelectHandlerだ
けにしています。そして set...(new ConcreteResultSetHandler()) というよ
うなことをやっています。
土居さん:
(抜粋)
> <property name="resultSetHandler">
> <component class="org.seasar.extension.jdbc.impl.BeanResultSetHandler">
> <arg>@[E-MAIL ADDRESS DELETED]</arg>
> </component>
> </property>
> のように自分でResultSetHandlerを指定できるので、"〜"をうまく処理する
> ResultSetHandlerを用意してあげる…ではだめでしょうか?
> #どうしてもAOPにしたいですか?:-)
AOPはなんとなくアイデアというか「これって実はcrosscutting concernじゃ
ないのか」という思いが先走ってるだけなので、手段と目的を取り違えないよう
に気を付けたいと思います。
ひとまず、ResultSetHandlerに手を入れていく(上の思想はひとまず置いとい
て、ResultSetHandlerをDIしてもらうことにしてサブクラス作る、かな)という
方向で回避しようと思います。
皆さん本当にありがとうございます。
# ひがさん、後ほど関係部分のソースをメールしときます
--
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内