[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 メーリングリストの案内