[Seasar-user:19164] Re: [S2JDBC] Unicodeマッピングの違いを吸収する方法について
Hiroshi Ogawa
[E-MAIL ADDRESS DELETED]
2010年 1月 20日 (水) 23:39:48 JST
小川です。
koichikさん、回答ありがとうございました。
ただ試してみたところ、これだけではだめでした。
Entityのプロパティの ValueType が PropertyMetaFactoryImpl
からとられていて、そこでは static な ValueTypes.STRING が返されていました。
ValueTypes.STRING で検索すると、PostgreDialect でも使われてたので、
・PostgreDialectを拡張した独自Dialectを作成
・PropertyMetaFactoryImplを拡張した独自クラスを作成
が必要なのかなと思っています。
ここで質問があるのですが、PropertyMetaFactoryImpl は
EntityMetaFactoryImpl のsetterでバインドされているみたいですが、
ここに標準のPropertyMetaFactoryImplでなく、拡張したクラスが
バインドされるようにするにはどうしたらよいでしょうか?
いろいろ試してみたところ S2 標準のs2jdbc-internal.dicon を
WEB-INF/classes などにコピーして、PropertyMetaFactoryImpl を
自動登録から強引にはずすようなことをやればできたのですが、
多分まっとうなやり方でないですよね・・?
以下、試して一応うまくいった s2jdbc-internal.dicon を貼り付けます。
(initMethod ではうまくいかなかったので仕方なく<component>で・・)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="convention.dicon"/>
<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
<initMethod name="addReferenceClass">
<arg>@[E-MAIL ADDRESS DELETED]</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"org.seasar.extension.jdbc.dialect"</arg>
<arg>"..*Dialect"</arg>
</initMethod>
<!-- ..*FactoryImpl をばらして個別に追加 -->
<initMethod name="addClassPattern">
<arg>"org.seasar.extension.jdbc.meta"</arg>
<arg>"ColumnMetaFactoryImpl"</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"org.seasar.extension.jdbc.meta"</arg>
<arg>"EntityMetaFactoryImpl"</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"org.seasar.extension.jdbc.meta"</arg>
<arg>"TableMetaFactoryImpl"</arg>
</initMethod>
</component>
<component class="root.meta.CustomPropertyMetaFactoryImpl"/>
<component name="customPostgreDialect"
class="root.dialect.CustomPostgreDialect"/>
</components>
よろしくお願いします。
2010年1月20日0:00 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (koichik) です.
>
> Date: Tue, 19 Jan 2010 23:41:54 +0900
> From: Hiroshi Ogawa <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:19155] [S2JDBC] Unicodeマッピングの違いを吸収する方法について
>
>> SeasarのMLを検索したところ、以下のスレッドが見つかりました。
>> http://ml.seasar.org/archives/seasar-user/2004-June/000797.html
>
> ここでの S2JDBC は今の流れるようなインタフェースを
> 持った S2JDBC ではなく,そのベースになってる S2JDBC の
> ことです.
>
>> そのため、以下の方法でよいのではないかと考えています。
>>
>> 1. org.seasar.extension.jdbc.types.StringTypeを継承した
>> クラス(CustomStringType)を作成し、getValue(), bindValue() をオーバーライドして
>> 置換処理を加える
>>
>> 2. システム起動時に以下のように登録する(HOT DEPLOYでは問題あり・・?)
>> ValueTypes.registerValueType(String.class, new CustomStringType());
>
> それで大丈夫だと思います.
>
> s2-extension の org.seasar.extension.jdbc.types
> パッケージに WaveDashStringType・WaveDashStringClobType
> といったクラスがあるので参考にどうぞ.
>
> 本当は S2 側で一通り対応してもよさそうなんですが,
> 上記クラスの名前が示すように "〜" しか扱ってないんですよね.
>
>
> --
> <component name="koichik">
> <property name="fullName">"Koichi Kobayashi"</property>
> <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
> <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内